Auto merge of #137738 - Daniel-Aaron-Bloom:const_slice_make_iter, r=d… · rust-lang/rust@e0883a2 (original) (raw)
`@@ -1043,9 +1043,10 @@ impl [T] {
`
1043
1043
`/// assert_eq!(iterator.next(), None);
`
1044
1044
```` /// ```
`1045`
`1045`
`#[stable(feature = "rust1", since = "1.0.0")]
`
``
`1046`
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
`1046`
`1047`
`#[inline]
`
`1047`
`1048`
`#[rustc_diagnostic_item = "slice_iter"]
`
`1048`
``
`-
pub fn iter(&self) -> Iter<'_, T> {
`
``
`1049`
`+
pub const fn iter(&self) -> Iter<'_, T> {
`
`1049`
`1050`
`Iter::new(self)
`
`1050`
`1051`
`}
`
`1051`
`1052`
``
`@@ -1062,9 +1063,10 @@ impl<T> [T] {
`
`1062`
`1063`
`/// }
`
`1063`
`1064`
`/// assert_eq!(x, &[3, 4, 6]);
`
`1064`
`1065`
```` /// ```
``
1066
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
1065
1067
`#[stable(feature = "rust1", since = "1.0.0")]
`
1066
1068
`#[inline]
`
1067
``
`-
pub fn iter_mut(&mut self) -> IterMut<'_, T> {
`
``
1069
`+
pub const fn iter_mut(&mut self) -> IterMut<'_, T> {
`
1068
1070
`IterMut::new(self)
`
1069
1071
`}
`
1070
1072
``
`@@ -1116,9 +1118,10 @@ impl [T] {
`
1116
1118
`/// assert_eq!(array, ['s', 't', ' ', '2', '0', '1', '5', 'u', 'R']);
`
1117
1119
```` /// ```
`1118`
`1120`
`#[stable(feature = "rust1", since = "1.0.0")]
`
``
`1121`
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
`1119`
`1122`
`#[inline]
`
`1120`
`1123`
`#[track_caller]
`
`1121`
``
`-
pub fn windows(&self, size: usize) -> Windows<'_, T> {
`
``
`1124`
`+
pub const fn windows(&self, size: usize) -> Windows<'_, T> {
`
`1122`
`1125`
`let size = NonZero::new(size).expect("window size must be non-zero");
`
`1123`
`1126`
`Windows::new(self, size)
`
`1124`
`1127`
`}
`
`@@ -1151,9 +1154,10 @@ impl<T> [T] {
`
`1151`
`1154`
`` /// [`chunks_exact`]: slice::chunks_exact
``
`1152`
`1155`
`` /// [`rchunks`]: slice::rchunks
``
`1153`
`1156`
`#[stable(feature = "rust1", since = "1.0.0")]
`
``
`1157`
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
`1154`
`1158`
`#[inline]
`
`1155`
`1159`
`#[track_caller]
`
`1156`
``
`-
pub fn chunks(&self, chunk_size: usize) -> Chunks<'_, T> {
`
``
`1160`
`+
pub const fn chunks(&self, chunk_size: usize) -> Chunks<'_, T> {
`
`1157`
`1161`
`assert!(chunk_size != 0, "chunk size must be non-zero");
`
`1158`
`1162`
`Chunks::new(self, chunk_size)
`
`1159`
`1163`
`}
`
`@@ -1190,9 +1194,10 @@ impl<T> [T] {
`
`1190`
`1194`
`` /// [`chunks_exact_mut`]: slice::chunks_exact_mut
``
`1191`
`1195`
`` /// [`rchunks_mut`]: slice::rchunks_mut
``
`1192`
`1196`
`#[stable(feature = "rust1", since = "1.0.0")]
`
``
`1197`
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
`1193`
`1198`
`#[inline]
`
`1194`
`1199`
`#[track_caller]
`
`1195`
``
`-
pub fn chunks_mut(&mut self, chunk_size: usize) -> ChunksMut<'_, T> {
`
``
`1200`
`+
pub const fn chunks_mut(&mut self, chunk_size: usize) -> ChunksMut<'_, T> {
`
`1196`
`1201`
`assert!(chunk_size != 0, "chunk size must be non-zero");
`
`1197`
`1202`
`ChunksMut::new(self, chunk_size)
`
`1198`
`1203`
`}
`
`@@ -1228,9 +1233,10 @@ impl<T> [T] {
`
`1228`
`1233`
`` /// [`chunks`]: slice::chunks
``
`1229`
`1234`
`` /// [`rchunks_exact`]: slice::rchunks_exact
``
`1230`
`1235`
`#[stable(feature = "chunks_exact", since = "1.31.0")]
`
``
`1236`
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
`1231`
`1237`
`#[inline]
`
`1232`
`1238`
`#[track_caller]
`
`1233`
``
`-
pub fn chunks_exact(&self, chunk_size: usize) -> ChunksExact<'_, T> {
`
``
`1239`
`+
pub const fn chunks_exact(&self, chunk_size: usize) -> ChunksExact<'_, T> {
`
`1234`
`1240`
`assert!(chunk_size != 0, "chunk size must be non-zero");
`
`1235`
`1241`
`ChunksExact::new(self, chunk_size)
`
`1236`
`1242`
`}
`
`@@ -1271,9 +1277,10 @@ impl<T> [T] {
`
`1271`
`1277`
`` /// [`chunks_mut`]: slice::chunks_mut
``
`1272`
`1278`
`` /// [`rchunks_exact_mut`]: slice::rchunks_exact_mut
``
`1273`
`1279`
`#[stable(feature = "chunks_exact", since = "1.31.0")]
`
``
`1280`
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
`1274`
`1281`
`#[inline]
`
`1275`
`1282`
`#[track_caller]
`
`1276`
``
`-
pub fn chunks_exact_mut(&mut self, chunk_size: usize) -> ChunksExactMut<'_, T> {
`
``
`1283`
`+
pub const fn chunks_exact_mut(&mut self, chunk_size: usize) -> ChunksExactMut<'_, T> {
`
`1277`
`1284`
`assert!(chunk_size != 0, "chunk size must be non-zero");
`
`1278`
`1285`
`ChunksExactMut::new(self, chunk_size)
`
`1279`
`1286`
`}
`
`@@ -1429,9 +1436,10 @@ impl<T> [T] {
`
`1429`
`1436`
`///
`
`1430`
`1437`
`` /// [`chunks_exact`]: slice::chunks_exact
``
`1431`
`1438`
`#[unstable(feature = "array_chunks", issue = "74985")]
`
``
`1439`
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
`1432`
`1440`
`#[inline]
`
`1433`
`1441`
`#[track_caller]
`
`1434`
``
`-
pub fn array_chunks<const N: usize>(&self) -> ArrayChunks<'_, T, N> {
`
``
`1442`
`+
pub const fn array_chunks<const N: usize>(&self) -> ArrayChunks<'_, T, N> {
`
`1435`
`1443`
`assert!(N != 0, "chunk size must be non-zero");
`
`1436`
`1444`
`ArrayChunks::new(self)
`
`1437`
`1445`
`}
`
`@@ -1592,9 +1600,10 @@ impl<T> [T] {
`
`1592`
`1600`
`///
`
`1593`
`1601`
`` /// [`chunks_exact_mut`]: slice::chunks_exact_mut
``
`1594`
`1602`
`#[unstable(feature = "array_chunks", issue = "74985")]
`
``
`1603`
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
`1595`
`1604`
`#[inline]
`
`1596`
`1605`
`#[track_caller]
`
`1597`
``
`-
pub fn array_chunks_mut<const N: usize>(&mut self) -> ArrayChunksMut<'_, T, N> {
`
``
`1606`
`+
pub const fn array_chunks_mut<const N: usize>(&mut self) -> ArrayChunksMut<'_, T, N> {
`
`1598`
`1607`
`assert!(N != 0, "chunk size must be non-zero");
`
`1599`
`1608`
`ArrayChunksMut::new(self)
`
`1600`
`1609`
`}
`
`@@ -1625,9 +1634,10 @@ impl<T> [T] {
`
`1625`
`1634`
`///
`
`1626`
`1635`
`` /// [`windows`]: slice::windows
``
`1627`
`1636`
`#[unstable(feature = "array_windows", issue = "75027")]
`
``
`1637`
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
`1628`
`1638`
`#[inline]
`
`1629`
`1639`
`#[track_caller]
`
`1630`
``
`-
pub fn array_windows<const N: usize>(&self) -> ArrayWindows<'_, T, N> {
`
``
`1640`
`+
pub const fn array_windows<const N: usize>(&self) -> ArrayWindows<'_, T, N> {
`
`1631`
`1641`
`assert!(N != 0, "window size must be non-zero");
`
`1632`
`1642`
`ArrayWindows::new(self)
`
`1633`
`1643`
`}
`
`@@ -1660,9 +1670,10 @@ impl<T> [T] {
`
`1660`
`1670`
`` /// [`rchunks_exact`]: slice::rchunks_exact
``
`1661`
`1671`
`` /// [`chunks`]: slice::chunks
``
`1662`
`1672`
`#[stable(feature = "rchunks", since = "1.31.0")]
`
``
`1673`
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
`1663`
`1674`
`#[inline]
`
`1664`
`1675`
`#[track_caller]
`
`1665`
``
`-
pub fn rchunks(&self, chunk_size: usize) -> RChunks<'_, T> {
`
``
`1676`
`+
pub const fn rchunks(&self, chunk_size: usize) -> RChunks<'_, T> {
`
`1666`
`1677`
`assert!(chunk_size != 0, "chunk size must be non-zero");
`
`1667`
`1678`
`RChunks::new(self, chunk_size)
`
`1668`
`1679`
`}
`
`@@ -1699,9 +1710,10 @@ impl<T> [T] {
`
`1699`
`1710`
`` /// [`rchunks_exact_mut`]: slice::rchunks_exact_mut
``
`1700`
`1711`
`` /// [`chunks_mut`]: slice::chunks_mut
``
`1701`
`1712`
`#[stable(feature = "rchunks", since = "1.31.0")]
`
``
`1713`
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
`1702`
`1714`
`#[inline]
`
`1703`
`1715`
`#[track_caller]
`
`1704`
``
`-
pub fn rchunks_mut(&mut self, chunk_size: usize) -> RChunksMut<'_, T> {
`
``
`1716`
`+
pub const fn rchunks_mut(&mut self, chunk_size: usize) -> RChunksMut<'_, T> {
`
`1705`
`1717`
`assert!(chunk_size != 0, "chunk size must be non-zero");
`
`1706`
`1718`
`RChunksMut::new(self, chunk_size)
`
`1707`
`1719`
`}
`
`@@ -1739,9 +1751,10 @@ impl<T> [T] {
`
`1739`
`1751`
`` /// [`rchunks`]: slice::rchunks
``
`1740`
`1752`
`` /// [`chunks_exact`]: slice::chunks_exact
``
`1741`
`1753`
`#[stable(feature = "rchunks", since = "1.31.0")]
`
``
`1754`
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
`1742`
`1755`
`#[inline]
`
`1743`
`1756`
`#[track_caller]
`
`1744`
``
`-
pub fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact<'_, T> {
`
``
`1757`
`+
pub const fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact<'_, T> {
`
`1745`
`1758`
`assert!(chunk_size != 0, "chunk size must be non-zero");
`
`1746`
`1759`
`RChunksExact::new(self, chunk_size)
`
`1747`
`1760`
`}
`
`@@ -1783,9 +1796,10 @@ impl<T> [T] {
`
`1783`
`1796`
`` /// [`rchunks_mut`]: slice::rchunks_mut
``
`1784`
`1797`
`` /// [`chunks_exact_mut`]: slice::chunks_exact_mut
``
`1785`
`1798`
`#[stable(feature = "rchunks", since = "1.31.0")]
`
``
`1799`
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
`1786`
`1800`
`#[inline]
`
`1787`
`1801`
`#[track_caller]
`
`1788`
``
`-
pub fn rchunks_exact_mut(&mut self, chunk_size: usize) -> RChunksExactMut<'_, T> {
`
``
`1802`
`+
pub const fn rchunks_exact_mut(&mut self, chunk_size: usize) -> RChunksExactMut<'_, T> {
`
`1789`
`1803`
`assert!(chunk_size != 0, "chunk size must be non-zero");
`
`1790`
`1804`
`RChunksExactMut::new(self, chunk_size)
`
`1791`
`1805`
`}
`
`@@ -1823,8 +1837,9 @@ impl<T> [T] {
`
`1823`
`1837`
`/// assert_eq!(iter.next(), None);
`
`1824`
`1838`
```` /// ```
1825
1839
`#[stable(feature = "slice_group_by", since = "1.77.0")]
`
``
1840
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
1826
1841
`#[inline]
`
1827
``
`-
pub fn chunk_by(&self, pred: F) -> ChunkBy<'_, T, F>
`
``
1842
`+
pub const fn chunk_by(&self, pred: F) -> ChunkBy<'_, T, F>
`
1828
1843
`where
`
1829
1844
`F: FnMut(&T, &T) -> bool,
`
1830
1845
`{
`
`@@ -1864,8 +1879,9 @@ impl [T] {
`
1864
1879
`/// assert_eq!(iter.next(), None);
`
1865
1880
```` /// ```
````
1866
1881
`#[stable(feature = "slice_group_by", since = "1.77.0")]
`
``
1882
`+
#[rustc_const_unstable(feature = "const_slice_make_iter", issue = "137737")]
`
1867
1883
`#[inline]
`
1868
``
`-
pub fn chunk_by_mut(&mut self, pred: F) -> ChunkByMut<'_, T, F>
`
``
1884
`+
pub const fn chunk_by_mut(&mut self, pred: F) -> ChunkByMut<'_, T, F>
`
1869
1885
`where
`
1870
1886
`F: FnMut(&T, &T) -> bool,
`
1871
1887
`{
`