Skip to content

Commit dcd332e

Browse files
committed
Delete deprecated & unstable range-specific step_by
Replacement: 41439 Deprecation: 42310 for 1.19 Fixes 41477
1 parent 05b5797 commit dcd332e

File tree

8 files changed

+20
-251
lines changed

8 files changed

+20
-251
lines changed

src/liballoc/tests/vec_deque.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -510,8 +510,7 @@ fn test_from_iter() {
510510
let u: Vec<_> = deq.iter().cloned().collect();
511511
assert_eq!(u, v);
512512

513-
// FIXME #27741: Remove `.skip(0)` when Range::step_by is fully removed
514-
let seq = (0..).skip(0).step_by(2).take(256);
513+
let seq = (0..).step_by(2).take(256);
515514
let deq: VecDeque<_> = seq.collect();
516515
for (i, &x) in deq.iter().enumerate() {
517516
assert_eq!(2 * i, x);

src/libcore/iter/mod.rs

-6
Original file line numberDiff line numberDiff line change
@@ -314,12 +314,6 @@ pub use self::iterator::Iterator;
314314
reason = "likely to be replaced by finer-grained traits",
315315
issue = "42168")]
316316
pub use self::range::Step;
317-
#[unstable(feature = "step_by", reason = "recent addition",
318-
issue = "27741")]
319-
#[rustc_deprecated(since = "1.19.0",
320-
reason = "replaced by `iter::StepBy`")]
321-
#[allow(deprecated)]
322-
pub use self::range::StepBy as DeprecatedStepBy;
323317

324318
#[stable(feature = "rust1", since = "1.0.0")]
325319
pub use self::sources::{Repeat, repeat};

src/libcore/iter/range.rs

-213
Original file line numberDiff line numberDiff line change
@@ -244,219 +244,6 @@ step_impl_signed!(i64);
244244
step_impl_no_between!(u64 i64);
245245
step_impl_no_between!(u128 i128);
246246

247-
/// An adapter for stepping range iterators by a custom amount.
248-
///
249-
/// The resulting iterator handles overflow by stopping. The `A`
250-
/// parameter is the type being iterated over, while `R` is the range
251-
/// type (usually one of `std::ops::{Range, RangeFrom, RangeInclusive}`.
252-
#[derive(Clone, Debug)]
253-
#[unstable(feature = "step_by", reason = "recent addition",
254-
issue = "27741")]
255-
#[rustc_deprecated(since = "1.19.0",
256-
reason = "replaced by `iter::StepBy`")]
257-
#[allow(deprecated)]
258-
pub struct StepBy<A, R> {
259-
step_by: A,
260-
range: R,
261-
}
262-
263-
impl<A: Step> ops::RangeFrom<A> {
264-
/// Creates an iterator starting at the same point, but stepping by
265-
/// the given amount at each iteration.
266-
///
267-
/// # Examples
268-
///
269-
/// ```
270-
/// #![feature(step_by)]
271-
/// fn main() {
272-
/// let result: Vec<_> = (0..).step_by(2).take(5).collect();
273-
/// assert_eq!(result, vec![0, 2, 4, 6, 8]);
274-
/// }
275-
/// ```
276-
#[unstable(feature = "step_by", reason = "recent addition",
277-
issue = "27741")]
278-
#[rustc_deprecated(since = "1.19.0",
279-
reason = "replaced by `Iterator::step_by`")]
280-
#[allow(deprecated)]
281-
pub fn step_by(self, by: A) -> StepBy<A, Self> {
282-
StepBy {
283-
step_by: by,
284-
range: self
285-
}
286-
}
287-
}
288-
289-
impl<A: Step> ops::Range<A> {
290-
/// Creates an iterator with the same range, but stepping by the
291-
/// given amount at each iteration.
292-
///
293-
/// The resulting iterator handles overflow by stopping.
294-
///
295-
/// # Examples
296-
///
297-
/// ```
298-
/// #![feature(step_by)]
299-
/// fn main() {
300-
/// let result: Vec<_> = (0..10).step_by(2).collect();
301-
/// assert_eq!(result, vec![0, 2, 4, 6, 8]);
302-
/// }
303-
/// ```
304-
#[unstable(feature = "step_by", reason = "recent addition",
305-
issue = "27741")]
306-
#[rustc_deprecated(since = "1.19.0",
307-
reason = "replaced by `Iterator::step_by`")]
308-
#[allow(deprecated)]
309-
pub fn step_by(self, by: A) -> StepBy<A, Self> {
310-
StepBy {
311-
step_by: by,
312-
range: self
313-
}
314-
}
315-
}
316-
317-
impl<A: Step> ops::RangeInclusive<A> {
318-
/// Creates an iterator with the same range, but stepping by the
319-
/// given amount at each iteration.
320-
///
321-
/// The resulting iterator handles overflow by stopping.
322-
///
323-
/// # Examples
324-
///
325-
/// ```
326-
/// #![feature(step_by, inclusive_range_syntax)]
327-
///
328-
/// let result: Vec<_> = (0...10).step_by(2).collect();
329-
/// assert_eq!(result, vec![0, 2, 4, 6, 8, 10]);
330-
/// ```
331-
#[unstable(feature = "step_by", reason = "recent addition",
332-
issue = "27741")]
333-
#[rustc_deprecated(since = "1.19.0",
334-
reason = "replaced by `Iterator::step_by`")]
335-
#[allow(deprecated)]
336-
pub fn step_by(self, by: A) -> StepBy<A, Self> {
337-
StepBy {
338-
step_by: by,
339-
range: self
340-
}
341-
}
342-
}
343-
344-
#[unstable(feature = "step_by", reason = "recent addition",
345-
issue = "27741")]
346-
#[allow(deprecated)]
347-
impl<A> Iterator for StepBy<A, ops::RangeFrom<A>> where
348-
A: Clone,
349-
for<'a> &'a A: Add<&'a A, Output = A>
350-
{
351-
type Item = A;
352-
353-
#[inline]
354-
fn next(&mut self) -> Option<A> {
355-
let mut n = &self.range.start + &self.step_by;
356-
mem::swap(&mut n, &mut self.range.start);
357-
Some(n)
358-
}
359-
360-
#[inline]
361-
fn size_hint(&self) -> (usize, Option<usize>) {
362-
(usize::MAX, None) // Too bad we can't specify an infinite lower bound
363-
}
364-
}
365-
366-
#[unstable(feature = "fused", issue = "35602")]
367-
#[allow(deprecated)]
368-
impl<A> FusedIterator for StepBy<A, ops::RangeFrom<A>>
369-
where A: Clone, for<'a> &'a A: Add<&'a A, Output = A> {}
370-
371-
#[unstable(feature = "step_by", reason = "recent addition",
372-
issue = "27741")]
373-
#[allow(deprecated)]
374-
impl<A: Step + Clone> Iterator for StepBy<A, ops::Range<A>> {
375-
type Item = A;
376-
377-
#[inline]
378-
fn next(&mut self) -> Option<A> {
379-
let rev = self.step_by.is_negative();
380-
if (rev && self.range.start > self.range.end) ||
381-
(!rev && self.range.start < self.range.end)
382-
{
383-
match self.range.start.step(&self.step_by) {
384-
Some(mut n) => {
385-
mem::swap(&mut self.range.start, &mut n);
386-
Some(n)
387-
},
388-
None => {
389-
let mut n = self.range.end.clone();
390-
mem::swap(&mut self.range.start, &mut n);
391-
Some(n)
392-
}
393-
}
394-
} else {
395-
None
396-
}
397-
}
398-
399-
#[inline]
400-
fn size_hint(&self) -> (usize, Option<usize>) {
401-
match Step::steps_between(&self.range.start,
402-
&self.range.end,
403-
&self.step_by) {
404-
Some(hint) => (hint, Some(hint)),
405-
None => (0, None)
406-
}
407-
}
408-
}
409-
410-
#[unstable(feature = "fused", issue = "35602")]
411-
#[allow(deprecated)]
412-
impl<A: Step + Clone> FusedIterator for StepBy<A, ops::Range<A>> {}
413-
414-
#[unstable(feature = "inclusive_range",
415-
reason = "recently added, follows RFC",
416-
issue = "28237")]
417-
#[allow(deprecated)]
418-
impl<A: Step + Clone> Iterator for StepBy<A, ops::RangeInclusive<A>> {
419-
type Item = A;
420-
421-
#[inline]
422-
fn next(&mut self) -> Option<A> {
423-
let rev = self.step_by.is_negative();
424-
425-
if (rev && self.range.start >= self.range.end) ||
426-
(!rev && self.range.start <= self.range.end)
427-
{
428-
match self.range.start.step(&self.step_by) {
429-
Some(n) => {
430-
Some(mem::replace(&mut self.range.start, n))
431-
},
432-
None => {
433-
let last = self.range.start.replace_one();
434-
self.range.end.replace_zero();
435-
self.step_by.replace_one();
436-
Some(last)
437-
},
438-
}
439-
}
440-
else {
441-
None
442-
}
443-
}
444-
445-
#[inline]
446-
fn size_hint(&self) -> (usize, Option<usize>) {
447-
match Step::steps_between(&self.range.start,
448-
&self.range.end,
449-
&self.step_by) {
450-
Some(hint) => (hint.saturating_add(1), hint.checked_add(1)),
451-
None => (0, None)
452-
}
453-
}
454-
}
455-
456-
#[unstable(feature = "fused", issue = "35602")]
457-
#[allow(deprecated)]
458-
impl<A: Step + Clone> FusedIterator for StepBy<A, ops::RangeInclusive<A>> {}
459-
460247
macro_rules! range_exact_iter_impl {
461248
($($t:ty)*) => ($(
462249
#[stable(feature = "rust1", since = "1.0.0")]

src/libcore/tests/iter.rs

+16-26
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,6 @@ use core::iter::*;
1212
use core::{i8, i16, isize};
1313
use core::usize;
1414

15-
// FIXME #27741: This is here to simplify calling Iterator::step_by. Remove
16-
// once Range::step_by is completely gone (not just deprecated).
17-
trait IterEx: Sized {
18-
fn iter_step_by(self, n: usize) -> StepBy<Self>;
19-
}
20-
impl<I:Iterator> IterEx for I {
21-
fn iter_step_by(self, n: usize) -> StepBy<Self> { self.step_by(n) }
22-
}
23-
2415
#[test]
2516
fn test_lt() {
2617
let empty: [isize; 0] = [];
@@ -76,7 +67,7 @@ fn test_multi_iter() {
7667

7768
#[test]
7869
fn test_counter_from_iter() {
79-
let it = (0..).iter_step_by(5).take(10);
70+
let it = (0..).step_by(5).take(10);
8071
let xs: Vec<isize> = FromIterator::from_iter(it);
8172
assert_eq!(xs, [0, 5, 10, 15, 20, 25, 30, 35, 40, 45]);
8273
}
@@ -94,7 +85,7 @@ fn test_iterator_chain() {
9485
}
9586
assert_eq!(i, expected.len());
9687

97-
let ys = (30..).iter_step_by(10).take(4);
88+
let ys = (30..).step_by(10).take(4);
9889
let it = xs.iter().cloned().chain(ys);
9990
let mut i = 0;
10091
for x in it {
@@ -156,13 +147,13 @@ fn test_iterator_chain_find() {
156147
#[test]
157148
fn test_iterator_step_by() {
158149
// Identity
159-
let mut it = (0..).iter_step_by(1).take(3);
150+
let mut it = (0..).step_by(1).take(3);
160151
assert_eq!(it.next(), Some(0));
161152
assert_eq!(it.next(), Some(1));
162153
assert_eq!(it.next(), Some(2));
163154
assert_eq!(it.next(), None);
164155

165-
let mut it = (0..).iter_step_by(3).take(4);
156+
let mut it = (0..).step_by(3).take(4);
166157
assert_eq!(it.next(), Some(0));
167158
assert_eq!(it.next(), Some(3));
168159
assert_eq!(it.next(), Some(6));
@@ -173,7 +164,7 @@ fn test_iterator_step_by() {
173164
#[test]
174165
#[should_panic]
175166
fn test_iterator_step_by_zero() {
176-
let mut it = (0..).iter_step_by(0);
167+
let mut it = (0..).step_by(0);
177168
it.next();
178169
}
179170

@@ -252,7 +243,7 @@ fn test_iterator_step_by_size_hint() {
252243

253244
#[test]
254245
fn test_filter_map() {
255-
let it = (0..).iter_step_by(1).take(10)
246+
let it = (0..).step_by(1).take(10)
256247
.filter_map(|x| if x % 2 == 0 { Some(x*x) } else { None });
257248
assert_eq!(it.collect::<Vec<usize>>(), [0*0, 2*2, 4*4, 6*6, 8*8]);
258249
}
@@ -654,7 +645,7 @@ fn test_iterator_scan() {
654645
fn test_iterator_flat_map() {
655646
let xs = [0, 3, 6];
656647
let ys = [0, 1, 2, 3, 4, 5, 6, 7, 8];
657-
let it = xs.iter().flat_map(|&x| (x..).iter_step_by(1).take(3));
648+
let it = xs.iter().flat_map(|&x| (x..).step_by(1).take(3));
658649
let mut i = 0;
659650
for x in it {
660651
assert_eq!(x, ys[i]);
@@ -680,13 +671,13 @@ fn test_inspect() {
680671
#[test]
681672
fn test_cycle() {
682673
let cycle_len = 3;
683-
let it = (0..).iter_step_by(1).take(cycle_len).cycle();
674+
let it = (0..).step_by(1).take(cycle_len).cycle();
684675
assert_eq!(it.size_hint(), (usize::MAX, None));
685676
for (i, x) in it.take(100).enumerate() {
686677
assert_eq!(i % cycle_len, x);
687678
}
688679

689-
let mut it = (0..).iter_step_by(1).take(0).cycle();
680+
let mut it = (0..).step_by(1).take(0).cycle();
690681
assert_eq!(it.size_hint(), (0, Some(0)));
691682
assert_eq!(it.next(), None);
692683
}
@@ -765,7 +756,7 @@ fn test_iterator_min() {
765756

766757
#[test]
767758
fn test_iterator_size_hint() {
768-
let c = (0..).iter_step_by(1);
759+
let c = (0..).step_by(1);
769760
let v: &[_] = &[0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
770761
let v2 = &[10, 11, 12];
771762
let vi = v.iter();
@@ -1090,22 +1081,21 @@ fn test_range_step() {
10901081
#![allow(deprecated)]
10911082

10921083
assert_eq!((0..20).step_by(5).collect::<Vec<isize>>(), [0, 5, 10, 15]);
1093-
assert_eq!((20..0).step_by(-5).collect::<Vec<isize>>(), [20, 15, 10, 5]);
1094-
assert_eq!((20..0).step_by(-6).collect::<Vec<isize>>(), [20, 14, 8, 2]);
1084+
assert_eq!((1..21).rev().step_by(5).collect::<Vec<isize>>(), [20, 15, 10, 5]);
1085+
assert_eq!((1..21).rev().step_by(6).collect::<Vec<isize>>(), [20, 14, 8, 2]);
10951086
assert_eq!((200..255).step_by(50).collect::<Vec<u8>>(), [200, 250]);
10961087
assert_eq!((200..-5).step_by(1).collect::<Vec<isize>>(), []);
10971088
assert_eq!((200..200).step_by(1).collect::<Vec<isize>>(), []);
10981089

10991090
assert_eq!((0..20).step_by(1).size_hint(), (20, Some(20)));
11001091
assert_eq!((0..20).step_by(21).size_hint(), (1, Some(1)));
11011092
assert_eq!((0..20).step_by(5).size_hint(), (4, Some(4)));
1102-
assert_eq!((20..0).step_by(-5).size_hint(), (4, Some(4)));
1103-
assert_eq!((20..0).step_by(-6).size_hint(), (4, Some(4)));
1093+
assert_eq!((1..21).rev().step_by(5).size_hint(), (4, Some(4)));
1094+
assert_eq!((1..21).rev().step_by(6).size_hint(), (4, Some(4)));
11041095
assert_eq!((20..-5).step_by(1).size_hint(), (0, Some(0)));
11051096
assert_eq!((20..20).step_by(1).size_hint(), (0, Some(0)));
1106-
assert_eq!((0..1).step_by(0).size_hint(), (0, None));
1107-
assert_eq!((i8::MAX..i8::MIN).step_by(i8::MIN).size_hint(), (2, Some(2)));
1108-
assert_eq!((i16::MIN..i16::MAX).step_by(i16::MAX).size_hint(), (3, Some(3)));
1097+
assert_eq!((i8::MIN..i8::MAX).step_by(-(i8::MIN as i32) as usize).size_hint(), (2, Some(2)));
1098+
assert_eq!((i16::MIN..i16::MAX).step_by(i16::MAX as usize).size_hint(), (3, Some(3)));
11091099
assert_eq!((isize::MIN..isize::MAX).step_by(1).size_hint(), (usize::MAX, Some(usize::MAX)));
11101100
}
11111101

src/libcore/tests/lib.rs

-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
#![feature(sort_internals)]
3737
#![feature(sort_unstable)]
3838
#![feature(specialization)]
39-
#![feature(step_by)]
4039
#![feature(step_trait)]
4140
#![feature(test)]
4241
#![feature(trusted_len)]

src/librand/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
issue = "27703")]
3232
#![feature(core_intrinsics)]
3333
#![feature(staged_api)]
34-
#![feature(step_by)]
34+
#![feature(iterator_step_by)]
3535
#![feature(custom_attribute)]
3636
#![feature(specialization)]
3737
#![allow(unused_attributes)]

src/test/run-pass/range_inclusive.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
// Test inclusive range syntax.
1212

13-
#![feature(inclusive_range_syntax, inclusive_range, step_by)]
13+
#![feature(inclusive_range_syntax, inclusive_range, iterator_step_by)]
1414

1515
use std::ops::{RangeInclusive, RangeToInclusive};
1616

0 commit comments

Comments
 (0)