Skip to content

Commit 48e1307

Browse files
authored
Unrolled build for rust-lang#117678
Rollup merge of rust-lang#117678 - niklasf:stabilize-slice_group_by, r=dtolnay Stabilize `slice_group_by` Renamed "group by" to "chunk by" a per rust-lang#80552. Newly stable items: * `core::slice::ChunkBy` * `core::slice::ChunkByMut` * `[T]::chunk` * `[T]::chunk_by` Closes rust-lang#80552.
2 parents cdd4ff8 + 97a720b commit 48e1307

File tree

10 files changed

+62
-74
lines changed

10 files changed

+62
-74
lines changed

compiler/rustc_codegen_cranelift/patches/0027-coretests-128bit-atomic-operations.patch

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ index 897a5e9..331f66f 100644
2121
-#![cfg_attr(target_has_atomic = "128", feature(integer_atomics))]
2222
#![cfg_attr(test, feature(cfg_match))]
2323
#![feature(int_roundings)]
24-
#![feature(slice_group_by)]
24+
#![feature(split_array)]
2525
diff --git a/atomic.rs b/atomic.rs
2626
index b735957..ea728b6 100644
2727
--- a/atomic.rs

compiler/rustc_passes/src/dead.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -917,7 +917,7 @@ impl<'tcx> DeadVisitor<'tcx> {
917917
return;
918918
}
919919
dead_codes.sort_by_key(|v| v.level);
920-
for group in dead_codes[..].group_by(|a, b| a.level == b.level) {
920+
for group in dead_codes[..].chunk_by(|a, b| a.level == b.level) {
921921
self.lint_at_single_level(&group, participle, Some(def_id), report_on);
922922
}
923923
}

compiler/rustc_passes/src/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
#![feature(let_chains)]
1212
#![feature(map_try_insert)]
1313
#![feature(min_specialization)]
14-
#![feature(slice_group_by)]
1514
#![feature(try_blocks)]
1615
#![deny(rustc::untranslatable_diagnostic)]
1716
#![deny(rustc::diagnostic_outside_of_impl)]

library/alloc/src/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@
149149
#![feature(set_ptr_value)]
150150
#![feature(sized_type_properties)]
151151
#![feature(slice_from_ptr_range)]
152-
#![feature(slice_group_by)]
153152
#![feature(slice_ptr_get)]
154153
#![feature(slice_ptr_len)]
155154
#![feature(slice_range)]

library/alloc/src/slice.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -51,14 +51,14 @@ pub use core::slice::{from_mut, from_ref};
5151
pub use core::slice::{from_mut_ptr_range, from_ptr_range};
5252
#[stable(feature = "rust1", since = "1.0.0")]
5353
pub use core::slice::{from_raw_parts, from_raw_parts_mut};
54+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
55+
pub use core::slice::{ChunkBy, ChunkByMut};
5456
#[stable(feature = "rust1", since = "1.0.0")]
5557
pub use core::slice::{Chunks, Windows};
5658
#[stable(feature = "chunks_exact", since = "1.31.0")]
5759
pub use core::slice::{ChunksExact, ChunksExactMut};
5860
#[stable(feature = "rust1", since = "1.0.0")]
5961
pub use core::slice::{ChunksMut, Split, SplitMut};
60-
#[unstable(feature = "slice_group_by", issue = "80552")]
61-
pub use core::slice::{GroupBy, GroupByMut};
6262
#[stable(feature = "rust1", since = "1.0.0")]
6363
pub use core::slice::{Iter, IterMut};
6464
#[stable(feature = "rchunks", since = "1.31.0")]

library/alloc/tests/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
#![feature(iter_advance_by)]
3030
#![feature(iter_next_chunk)]
3131
#![feature(round_char_boundary)]
32-
#![feature(slice_group_by)]
3332
#![feature(slice_partition_dedup)]
3433
#![feature(string_remove_matches)]
3534
#![feature(const_btree_len)]

library/alloc/tests/slice.rs

+8-8
Original file line numberDiff line numberDiff line change
@@ -1614,26 +1614,26 @@ fn subslice_patterns() {
16141614
}
16151615

16161616
#[test]
1617-
fn test_group_by() {
1617+
fn test_chunk_by() {
16181618
let slice = &[1, 1, 1, 3, 3, 2, 2, 2, 1, 0];
16191619

1620-
let mut iter = slice.group_by(|a, b| a == b);
1620+
let mut iter = slice.chunk_by(|a, b| a == b);
16211621
assert_eq!(iter.next(), Some(&[1, 1, 1][..]));
16221622
assert_eq!(iter.next(), Some(&[3, 3][..]));
16231623
assert_eq!(iter.next(), Some(&[2, 2, 2][..]));
16241624
assert_eq!(iter.next(), Some(&[1][..]));
16251625
assert_eq!(iter.next(), Some(&[0][..]));
16261626
assert_eq!(iter.next(), None);
16271627

1628-
let mut iter = slice.group_by(|a, b| a == b);
1628+
let mut iter = slice.chunk_by(|a, b| a == b);
16291629
assert_eq!(iter.next_back(), Some(&[0][..]));
16301630
assert_eq!(iter.next_back(), Some(&[1][..]));
16311631
assert_eq!(iter.next_back(), Some(&[2, 2, 2][..]));
16321632
assert_eq!(iter.next_back(), Some(&[3, 3][..]));
16331633
assert_eq!(iter.next_back(), Some(&[1, 1, 1][..]));
16341634
assert_eq!(iter.next_back(), None);
16351635

1636-
let mut iter = slice.group_by(|a, b| a == b);
1636+
let mut iter = slice.chunk_by(|a, b| a == b);
16371637
assert_eq!(iter.next(), Some(&[1, 1, 1][..]));
16381638
assert_eq!(iter.next_back(), Some(&[0][..]));
16391639
assert_eq!(iter.next(), Some(&[3, 3][..]));
@@ -1643,26 +1643,26 @@ fn test_group_by() {
16431643
}
16441644

16451645
#[test]
1646-
fn test_group_by_mut() {
1646+
fn test_chunk_by_mut() {
16471647
let slice = &mut [1, 1, 1, 3, 3, 2, 2, 2, 1, 0];
16481648

1649-
let mut iter = slice.group_by_mut(|a, b| a == b);
1649+
let mut iter = slice.chunk_by_mut(|a, b| a == b);
16501650
assert_eq!(iter.next(), Some(&mut [1, 1, 1][..]));
16511651
assert_eq!(iter.next(), Some(&mut [3, 3][..]));
16521652
assert_eq!(iter.next(), Some(&mut [2, 2, 2][..]));
16531653
assert_eq!(iter.next(), Some(&mut [1][..]));
16541654
assert_eq!(iter.next(), Some(&mut [0][..]));
16551655
assert_eq!(iter.next(), None);
16561656

1657-
let mut iter = slice.group_by_mut(|a, b| a == b);
1657+
let mut iter = slice.chunk_by_mut(|a, b| a == b);
16581658
assert_eq!(iter.next_back(), Some(&mut [0][..]));
16591659
assert_eq!(iter.next_back(), Some(&mut [1][..]));
16601660
assert_eq!(iter.next_back(), Some(&mut [2, 2, 2][..]));
16611661
assert_eq!(iter.next_back(), Some(&mut [3, 3][..]));
16621662
assert_eq!(iter.next_back(), Some(&mut [1, 1, 1][..]));
16631663
assert_eq!(iter.next_back(), None);
16641664

1665-
let mut iter = slice.group_by_mut(|a, b| a == b);
1665+
let mut iter = slice.chunk_by_mut(|a, b| a == b);
16661666
assert_eq!(iter.next(), Some(&mut [1, 1, 1][..]));
16671667
assert_eq!(iter.next_back(), Some(&mut [0][..]));
16681668
assert_eq!(iter.next(), Some(&mut [3, 3][..]));

library/core/src/slice/iter.rs

+32-32
Original file line numberDiff line numberDiff line change
@@ -3248,26 +3248,26 @@ unsafe impl<'a, T> TrustedRandomAccessNoCoerce for IterMut<'a, T> {
32483248

32493249
/// An iterator over slice in (non-overlapping) chunks separated by a predicate.
32503250
///
3251-
/// This struct is created by the [`group_by`] method on [slices].
3251+
/// This struct is created by the [`chunk_by`] method on [slices].
32523252
///
3253-
/// [`group_by`]: slice::group_by
3253+
/// [`chunk_by`]: slice::chunk_by
32543254
/// [slices]: slice
3255-
#[unstable(feature = "slice_group_by", issue = "80552")]
3255+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
32563256
#[must_use = "iterators are lazy and do nothing unless consumed"]
3257-
pub struct GroupBy<'a, T: 'a, P> {
3257+
pub struct ChunkBy<'a, T: 'a, P> {
32583258
slice: &'a [T],
32593259
predicate: P,
32603260
}
32613261

3262-
#[unstable(feature = "slice_group_by", issue = "80552")]
3263-
impl<'a, T: 'a, P> GroupBy<'a, T, P> {
3262+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
3263+
impl<'a, T: 'a, P> ChunkBy<'a, T, P> {
32643264
pub(super) fn new(slice: &'a [T], predicate: P) -> Self {
3265-
GroupBy { slice, predicate }
3265+
ChunkBy { slice, predicate }
32663266
}
32673267
}
32683268

3269-
#[unstable(feature = "slice_group_by", issue = "80552")]
3270-
impl<'a, T: 'a, P> Iterator for GroupBy<'a, T, P>
3269+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
3270+
impl<'a, T: 'a, P> Iterator for ChunkBy<'a, T, P>
32713271
where
32723272
P: FnMut(&T, &T) -> bool,
32733273
{
@@ -3300,8 +3300,8 @@ where
33003300
}
33013301
}
33023302

3303-
#[unstable(feature = "slice_group_by", issue = "80552")]
3304-
impl<'a, T: 'a, P> DoubleEndedIterator for GroupBy<'a, T, P>
3303+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
3304+
impl<'a, T: 'a, P> DoubleEndedIterator for ChunkBy<'a, T, P>
33053305
where
33063306
P: FnMut(&T, &T) -> bool,
33073307
{
@@ -3322,39 +3322,39 @@ where
33223322
}
33233323
}
33243324

3325-
#[unstable(feature = "slice_group_by", issue = "80552")]
3326-
impl<'a, T: 'a, P> FusedIterator for GroupBy<'a, T, P> where P: FnMut(&T, &T) -> bool {}
3325+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
3326+
impl<'a, T: 'a, P> FusedIterator for ChunkBy<'a, T, P> where P: FnMut(&T, &T) -> bool {}
33273327

3328-
#[unstable(feature = "slice_group_by", issue = "80552")]
3329-
impl<'a, T: 'a + fmt::Debug, P> fmt::Debug for GroupBy<'a, T, P> {
3328+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
3329+
impl<'a, T: 'a + fmt::Debug, P> fmt::Debug for ChunkBy<'a, T, P> {
33303330
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
3331-
f.debug_struct("GroupBy").field("slice", &self.slice).finish()
3331+
f.debug_struct("ChunkBy").field("slice", &self.slice).finish()
33323332
}
33333333
}
33343334

33353335
/// An iterator over slice in (non-overlapping) mutable chunks separated
33363336
/// by a predicate.
33373337
///
3338-
/// This struct is created by the [`group_by_mut`] method on [slices].
3338+
/// This struct is created by the [`chunk_by_mut`] method on [slices].
33393339
///
3340-
/// [`group_by_mut`]: slice::group_by_mut
3340+
/// [`chunk_by_mut`]: slice::chunk_by_mut
33413341
/// [slices]: slice
3342-
#[unstable(feature = "slice_group_by", issue = "80552")]
3342+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
33433343
#[must_use = "iterators are lazy and do nothing unless consumed"]
3344-
pub struct GroupByMut<'a, T: 'a, P> {
3344+
pub struct ChunkByMut<'a, T: 'a, P> {
33453345
slice: &'a mut [T],
33463346
predicate: P,
33473347
}
33483348

3349-
#[unstable(feature = "slice_group_by", issue = "80552")]
3350-
impl<'a, T: 'a, P> GroupByMut<'a, T, P> {
3349+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
3350+
impl<'a, T: 'a, P> ChunkByMut<'a, T, P> {
33513351
pub(super) fn new(slice: &'a mut [T], predicate: P) -> Self {
3352-
GroupByMut { slice, predicate }
3352+
ChunkByMut { slice, predicate }
33533353
}
33543354
}
33553355

3356-
#[unstable(feature = "slice_group_by", issue = "80552")]
3357-
impl<'a, T: 'a, P> Iterator for GroupByMut<'a, T, P>
3356+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
3357+
impl<'a, T: 'a, P> Iterator for ChunkByMut<'a, T, P>
33583358
where
33593359
P: FnMut(&T, &T) -> bool,
33603360
{
@@ -3388,8 +3388,8 @@ where
33883388
}
33893389
}
33903390

3391-
#[unstable(feature = "slice_group_by", issue = "80552")]
3392-
impl<'a, T: 'a, P> DoubleEndedIterator for GroupByMut<'a, T, P>
3391+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
3392+
impl<'a, T: 'a, P> DoubleEndedIterator for ChunkByMut<'a, T, P>
33933393
where
33943394
P: FnMut(&T, &T) -> bool,
33953395
{
@@ -3411,12 +3411,12 @@ where
34113411
}
34123412
}
34133413

3414-
#[unstable(feature = "slice_group_by", issue = "80552")]
3415-
impl<'a, T: 'a, P> FusedIterator for GroupByMut<'a, T, P> where P: FnMut(&T, &T) -> bool {}
3414+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
3415+
impl<'a, T: 'a, P> FusedIterator for ChunkByMut<'a, T, P> where P: FnMut(&T, &T) -> bool {}
34163416

3417-
#[unstable(feature = "slice_group_by", issue = "80552")]
3418-
impl<'a, T: 'a + fmt::Debug, P> fmt::Debug for GroupByMut<'a, T, P> {
3417+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
3418+
impl<'a, T: 'a + fmt::Debug, P> fmt::Debug for ChunkByMut<'a, T, P> {
34193419
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
3420-
f.debug_struct("GroupByMut").field("slice", &self.slice).finish()
3420+
f.debug_struct("ChunkByMut").field("slice", &self.slice).finish()
34213421
}
34223422
}

library/core/src/slice/mod.rs

+18-26
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,8 @@ pub use iter::{ArrayChunks, ArrayChunksMut};
6868
#[unstable(feature = "array_windows", issue = "75027")]
6969
pub use iter::ArrayWindows;
7070

71-
#[unstable(feature = "slice_group_by", issue = "80552")]
72-
pub use iter::{GroupBy, GroupByMut};
71+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
72+
pub use iter::{ChunkBy, ChunkByMut};
7373

7474
#[stable(feature = "split_inclusive", since = "1.51.0")]
7575
pub use iter::{SplitInclusive, SplitInclusiveMut};
@@ -1748,18 +1748,16 @@ impl<T> [T] {
17481748
/// Returns an iterator over the slice producing non-overlapping runs
17491749
/// of elements using the predicate to separate them.
17501750
///
1751-
/// The predicate is called on two elements following themselves,
1752-
/// it means the predicate is called on `slice[0]` and `slice[1]`
1753-
/// then on `slice[1]` and `slice[2]` and so on.
1751+
/// The predicate is called for every pair of consecutive elements,
1752+
/// meaning that it is called on `slice[0]` and `slice[1]`,
1753+
/// followed by `slice[1]` and `slice[2]`, and so on.
17541754
///
17551755
/// # Examples
17561756
///
17571757
/// ```
1758-
/// #![feature(slice_group_by)]
1759-
///
17601758
/// let slice = &[1, 1, 1, 3, 3, 2, 2, 2];
17611759
///
1762-
/// let mut iter = slice.group_by(|a, b| a == b);
1760+
/// let mut iter = slice.chunk_by(|a, b| a == b);
17631761
///
17641762
/// assert_eq!(iter.next(), Some(&[1, 1, 1][..]));
17651763
/// assert_eq!(iter.next(), Some(&[3, 3][..]));
@@ -1770,41 +1768,37 @@ impl<T> [T] {
17701768
/// This method can be used to extract the sorted subslices:
17711769
///
17721770
/// ```
1773-
/// #![feature(slice_group_by)]
1774-
///
17751771
/// let slice = &[1, 1, 2, 3, 2, 3, 2, 3, 4];
17761772
///
1777-
/// let mut iter = slice.group_by(|a, b| a <= b);
1773+
/// let mut iter = slice.chunk_by(|a, b| a <= b);
17781774
///
17791775
/// assert_eq!(iter.next(), Some(&[1, 1, 2, 3][..]));
17801776
/// assert_eq!(iter.next(), Some(&[2, 3][..]));
17811777
/// assert_eq!(iter.next(), Some(&[2, 3, 4][..]));
17821778
/// assert_eq!(iter.next(), None);
17831779
/// ```
1784-
#[unstable(feature = "slice_group_by", issue = "80552")]
1780+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
17851781
#[inline]
1786-
pub fn group_by<F>(&self, pred: F) -> GroupBy<'_, T, F>
1782+
pub fn chunk_by<F>(&self, pred: F) -> ChunkBy<'_, T, F>
17871783
where
17881784
F: FnMut(&T, &T) -> bool,
17891785
{
1790-
GroupBy::new(self, pred)
1786+
ChunkBy::new(self, pred)
17911787
}
17921788

17931789
/// Returns an iterator over the slice producing non-overlapping mutable
17941790
/// runs of elements using the predicate to separate them.
17951791
///
1796-
/// The predicate is called on two elements following themselves,
1797-
/// it means the predicate is called on `slice[0]` and `slice[1]`
1798-
/// then on `slice[1]` and `slice[2]` and so on.
1792+
/// The predicate is called for every pair of consecutive elements,
1793+
/// meaning that it is called on `slice[0]` and `slice[1]`,
1794+
/// followed by `slice[1]` and `slice[2]`, and so on.
17991795
///
18001796
/// # Examples
18011797
///
18021798
/// ```
1803-
/// #![feature(slice_group_by)]
1804-
///
18051799
/// let slice = &mut [1, 1, 1, 3, 3, 2, 2, 2];
18061800
///
1807-
/// let mut iter = slice.group_by_mut(|a, b| a == b);
1801+
/// let mut iter = slice.chunk_by_mut(|a, b| a == b);
18081802
///
18091803
/// assert_eq!(iter.next(), Some(&mut [1, 1, 1][..]));
18101804
/// assert_eq!(iter.next(), Some(&mut [3, 3][..]));
@@ -1815,24 +1809,22 @@ impl<T> [T] {
18151809
/// This method can be used to extract the sorted subslices:
18161810
///
18171811
/// ```
1818-
/// #![feature(slice_group_by)]
1819-
///
18201812
/// let slice = &mut [1, 1, 2, 3, 2, 3, 2, 3, 4];
18211813
///
1822-
/// let mut iter = slice.group_by_mut(|a, b| a <= b);
1814+
/// let mut iter = slice.chunk_by_mut(|a, b| a <= b);
18231815
///
18241816
/// assert_eq!(iter.next(), Some(&mut [1, 1, 2, 3][..]));
18251817
/// assert_eq!(iter.next(), Some(&mut [2, 3][..]));
18261818
/// assert_eq!(iter.next(), Some(&mut [2, 3, 4][..]));
18271819
/// assert_eq!(iter.next(), None);
18281820
/// ```
1829-
#[unstable(feature = "slice_group_by", issue = "80552")]
1821+
#[stable(feature = "slice_group_by", since = "CURRENT_RUSTC_VERSION")]
18301822
#[inline]
1831-
pub fn group_by_mut<F>(&mut self, pred: F) -> GroupByMut<'_, T, F>
1823+
pub fn chunk_by_mut<F>(&mut self, pred: F) -> ChunkByMut<'_, T, F>
18321824
where
18331825
F: FnMut(&T, &T) -> bool,
18341826
{
1835-
GroupByMut::new(self, pred)
1827+
ChunkByMut::new(self, pred)
18361828
}
18371829

18381830
/// Divides one slice into two at an index.

library/core/tests/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@
101101
#![cfg_attr(target_has_atomic = "128", feature(integer_atomics))]
102102
#![cfg_attr(test, feature(cfg_match))]
103103
#![feature(int_roundings)]
104-
#![feature(slice_group_by)]
105104
#![feature(split_array)]
106105
#![feature(strict_provenance)]
107106
#![feature(strict_provenance_atomic_ptr)]

0 commit comments

Comments
 (0)