From 52cc6fde4b73a3013ce2185052f9492ae3728367 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Thu, 18 Oct 2018 18:48:02 +0300 Subject: [PATCH] Stabilize slice::rchunks(), rchunks_mut(), rchunks_exact(), rchunk_exact_mut() Fixes #55177 --- src/liballoc/lib.rs | 1 - src/liballoc/slice.rs | 2 +- src/liballoc/tests/lib.rs | 1 - src/libcore/slice/mod.rs | 72 +++++++++++++++++---------------------- src/libcore/tests/lib.rs | 1 - 5 files changed, 33 insertions(+), 44 deletions(-) diff --git a/src/liballoc/lib.rs b/src/liballoc/lib.rs index 540a17774e5..84ca7c4fec9 100644 --- a/src/liballoc/lib.rs +++ b/src/liballoc/lib.rs @@ -119,7 +119,6 @@ #![feature(const_vec_new)] #![feature(slice_partition_dedup)] #![feature(maybe_uninit)] -#![feature(rchunks)] // Allow testing this library diff --git a/src/liballoc/slice.rs b/src/liballoc/slice.rs index 8ffc043d816..1eaff7410ea 100644 --- a/src/liballoc/slice.rs +++ b/src/liballoc/slice.rs @@ -125,7 +125,7 @@ pub use core::slice::SliceIndex; #[stable(feature = "chunks_exact", since = "1.31.0")] pub use core::slice::{ChunksExact, ChunksExactMut}; -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] pub use core::slice::{RChunks, RChunksMut, RChunksExact, RChunksExactMut}; //////////////////////////////////////////////////////////////////////////////// diff --git a/src/liballoc/tests/lib.rs b/src/liballoc/tests/lib.rs index 5a21976d75d..6d1cfb10859 100644 --- a/src/liballoc/tests/lib.rs +++ b/src/liballoc/tests/lib.rs @@ -19,7 +19,6 @@ #![feature(str_escape)] #![feature(try_reserve)] #![feature(unboxed_closures)] -#![feature(rchunks)] #![feature(repeat_generic_slice)] extern crate alloc_system; diff --git a/src/libcore/slice/mod.rs b/src/libcore/slice/mod.rs index 628d5542ac0..8a6b212020b 100644 --- a/src/libcore/slice/mod.rs +++ b/src/libcore/slice/mod.rs @@ -795,8 +795,6 @@ pub fn chunks_exact_mut(&mut self, chunk_size: usize) -> ChunksExactMut { /// # Examples /// /// ``` - /// #![feature(rchunks)] - /// /// let slice = ['l', 'o', 'r', 'e', 'm']; /// let mut iter = slice.rchunks(2); /// assert_eq!(iter.next().unwrap(), &['e', 'm']); @@ -807,7 +805,7 @@ pub fn chunks_exact_mut(&mut self, chunk_size: usize) -> ChunksExactMut { /// /// [`rchunks_exact`]: #method.rchunks_exact /// [`chunks`]: #method.chunks - #[unstable(feature = "rchunks", issue = "55177")] + #[stable(feature = "rchunks", since = "1.31.0")] #[inline] pub fn rchunks(&self, chunk_size: usize) -> RChunks { assert!(chunk_size != 0); @@ -831,8 +829,6 @@ pub fn rchunks(&self, chunk_size: usize) -> RChunks { /// # Examples /// /// ``` - /// #![feature(rchunks)] - /// /// let v = &mut [0, 0, 0, 0, 0]; /// let mut count = 1; /// @@ -847,7 +843,7 @@ pub fn rchunks(&self, chunk_size: usize) -> RChunks { /// /// [`rchunks_exact_mut`]: #method.rchunks_exact_mut /// [`chunks_mut`]: #method.chunks_mut - #[unstable(feature = "rchunks", issue = "55177")] + #[stable(feature = "rchunks", since = "1.31.0")] #[inline] pub fn rchunks_mut(&mut self, chunk_size: usize) -> RChunksMut { assert!(chunk_size != 0); @@ -875,8 +871,6 @@ pub fn rchunks_mut(&mut self, chunk_size: usize) -> RChunksMut { /// # Examples /// /// ``` - /// #![feature(rchunks)] - /// /// let slice = ['l', 'o', 'r', 'e', 'm']; /// let mut iter = slice.rchunks_exact(2); /// assert_eq!(iter.next().unwrap(), &['e', 'm']); @@ -887,7 +881,7 @@ pub fn rchunks_mut(&mut self, chunk_size: usize) -> RChunksMut { /// /// [`rchunks`]: #method.rchunks /// [`chunks_exact`]: #method.chunks_exact - #[unstable(feature = "rchunks", issue = "55177")] + #[stable(feature = "rchunks", since = "1.31.0")] #[inline] pub fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact { assert!(chunk_size != 0); @@ -917,8 +911,6 @@ pub fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact { /// # Examples /// /// ``` - /// #![feature(rchunks)] - /// /// let v = &mut [0, 0, 0, 0, 0]; /// let mut count = 1; /// @@ -933,7 +925,7 @@ pub fn rchunks_exact(&self, chunk_size: usize) -> RChunksExact { /// /// [`rchunks_mut`]: #method.rchunks_mut /// [`chunks_exact_mut`]: #method.chunks_exact_mut - #[unstable(feature = "rchunks", issue = "55177")] + #[stable(feature = "rchunks", since = "1.31.0")] #[inline] pub fn rchunks_exact_mut(&mut self, chunk_size: usize) -> RChunksExactMut { assert!(chunk_size != 0); @@ -4256,14 +4248,14 @@ fn may_have_side_effect() -> bool { false } /// [`rchunks`]: ../../std/primitive.slice.html#method.rchunks /// [slices]: ../../std/primitive.slice.html #[derive(Debug)] -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] pub struct RChunks<'a, T:'a> { v: &'a [T], chunk_size: usize } // FIXME(#26925) Remove in favor of `#[derive(Clone)]` -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> Clone for RChunks<'a, T> { fn clone(&self) -> RChunks<'a, T> { RChunks { @@ -4273,7 +4265,7 @@ fn clone(&self) -> RChunks<'a, T> { } } -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> Iterator for RChunks<'a, T> { type Item = &'a [T]; @@ -4337,7 +4329,7 @@ fn last(self) -> Option { } } -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> DoubleEndedIterator for RChunks<'a, T> { #[inline] fn next_back(&mut self) -> Option<&'a [T]> { @@ -4353,17 +4345,17 @@ fn next_back(&mut self) -> Option<&'a [T]> { } } -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> ExactSizeIterator for RChunks<'a, T> {} #[unstable(feature = "trusted_len", issue = "37572")] unsafe impl<'a, T> TrustedLen for RChunks<'a, T> {} -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> FusedIterator for RChunks<'a, T> {} #[doc(hidden)] -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] unsafe impl<'a, T> TrustedRandomAccess for RChunks<'a, T> { unsafe fn get_unchecked(&mut self, i: usize) -> &'a [T] { let end = self.v.len() - i * self.chunk_size; @@ -4387,13 +4379,13 @@ fn may_have_side_effect() -> bool { false } /// [`rchunks_mut`]: ../../std/primitive.slice.html#method.rchunks_mut /// [slices]: ../../std/primitive.slice.html #[derive(Debug)] -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] pub struct RChunksMut<'a, T:'a> { v: &'a mut [T], chunk_size: usize } -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> Iterator for RChunksMut<'a, T> { type Item = &'a mut [T]; @@ -4461,7 +4453,7 @@ fn last(self) -> Option { } } -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> DoubleEndedIterator for RChunksMut<'a, T> { #[inline] fn next_back(&mut self) -> Option<&'a mut [T]> { @@ -4478,17 +4470,17 @@ fn next_back(&mut self) -> Option<&'a mut [T]> { } } -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> ExactSizeIterator for RChunksMut<'a, T> {} #[unstable(feature = "trusted_len", issue = "37572")] unsafe impl<'a, T> TrustedLen for RChunksMut<'a, T> {} -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> FusedIterator for RChunksMut<'a, T> {} #[doc(hidden)] -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] unsafe impl<'a, T> TrustedRandomAccess for RChunksMut<'a, T> { unsafe fn get_unchecked(&mut self, i: usize) -> &'a mut [T] { let end = self.v.len() - i * self.chunk_size; @@ -4514,25 +4506,25 @@ fn may_have_side_effect() -> bool { false } /// [`remainder`]: ../../std/slice/struct.ChunksExact.html#method.remainder /// [slices]: ../../std/primitive.slice.html #[derive(Debug)] -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] pub struct RChunksExact<'a, T:'a> { v: &'a [T], rem: &'a [T], chunk_size: usize } -#[unstable(feature = "rchunks", issue = "55177")] impl<'a, T> RChunksExact<'a, T> { /// Return the remainder of the original slice that is not going to be /// returned by the iterator. The returned slice has at most `chunk_size-1` /// elements. + #[stable(feature = "rchunks", since = "1.31.0")] pub fn remainder(&self) -> &'a [T] { self.rem } } // FIXME(#26925) Remove in favor of `#[derive(Clone)]` -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> Clone for RChunksExact<'a, T> { fn clone(&self) -> RChunksExact<'a, T> { RChunksExact { @@ -4543,7 +4535,7 @@ fn clone(&self) -> RChunksExact<'a, T> { } } -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> Iterator for RChunksExact<'a, T> { type Item = &'a [T]; @@ -4588,7 +4580,7 @@ fn last(mut self) -> Option { } } -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> DoubleEndedIterator for RChunksExact<'a, T> { #[inline] fn next_back(&mut self) -> Option<&'a [T]> { @@ -4602,7 +4594,7 @@ fn next_back(&mut self) -> Option<&'a [T]> { } } -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> ExactSizeIterator for RChunksExact<'a, T> { fn is_empty(&self) -> bool { self.v.is_empty() @@ -4612,11 +4604,11 @@ fn is_empty(&self) -> bool { #[unstable(feature = "trusted_len", issue = "37572")] unsafe impl<'a, T> TrustedLen for RChunksExact<'a, T> {} -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> FusedIterator for RChunksExact<'a, T> {} #[doc(hidden)] -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] unsafe impl<'a, T> TrustedRandomAccess for RChunksExact<'a, T> { unsafe fn get_unchecked(&mut self, i: usize) -> &'a [T] { let end = self.v.len() - i * self.chunk_size; @@ -4639,24 +4631,24 @@ fn may_have_side_effect() -> bool { false } /// [`into_remainder`]: ../../std/slice/struct.ChunksExactMut.html#method.into_remainder /// [slices]: ../../std/primitive.slice.html #[derive(Debug)] -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] pub struct RChunksExactMut<'a, T:'a> { v: &'a mut [T], rem: &'a mut [T], chunk_size: usize } -#[unstable(feature = "rchunks", issue = "55177")] impl<'a, T> RChunksExactMut<'a, T> { /// Return the remainder of the original slice that is not going to be /// returned by the iterator. The returned slice has at most `chunk_size-1` /// elements. + #[stable(feature = "rchunks", since = "1.31.0")] pub fn into_remainder(self) -> &'a mut [T] { self.rem } } -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> Iterator for RChunksExactMut<'a, T> { type Item = &'a mut [T]; @@ -4705,7 +4697,7 @@ fn last(mut self) -> Option { } } -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> DoubleEndedIterator for RChunksExactMut<'a, T> { #[inline] fn next_back(&mut self) -> Option<&'a mut [T]> { @@ -4720,7 +4712,7 @@ fn next_back(&mut self) -> Option<&'a mut [T]> { } } -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> ExactSizeIterator for RChunksExactMut<'a, T> { fn is_empty(&self) -> bool { self.v.is_empty() @@ -4730,11 +4722,11 @@ fn is_empty(&self) -> bool { #[unstable(feature = "trusted_len", issue = "37572")] unsafe impl<'a, T> TrustedLen for RChunksExactMut<'a, T> {} -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] impl<'a, T> FusedIterator for RChunksExactMut<'a, T> {} #[doc(hidden)] -#[unstable(feature = "rchunks", issue = "55177")] +#[stable(feature = "rchunks", since = "1.31.0")] unsafe impl<'a, T> TrustedRandomAccess for RChunksExactMut<'a, T> { unsafe fn get_unchecked(&mut self, i: usize) -> &'a mut [T] { let end = self.v.len() - i * self.chunk_size; diff --git a/src/libcore/tests/lib.rs b/src/libcore/tests/lib.rs index affcdbea9d3..965bd545eed 100644 --- a/src/libcore/tests/lib.rs +++ b/src/libcore/tests/lib.rs @@ -34,7 +34,6 @@ #![feature(trusted_len)] #![feature(try_from)] #![feature(try_trait)] -#![feature(rchunks)] #![feature(align_offset)] #![feature(reverse_bits)] #![feature(inner_deref)] -- 2.44.0