mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-30 03:57:37 +00:00
Deprecate range, range_step, count, distributions
This commit deprecates the `count`, `range` and `range_step` functions in `iter`, in favor of range notation. To recover all existing functionality, a new `step_by` adapter is provided directly on `ops::Range` and `ops::RangeFrom`. [breaking-change]
This commit is contained in:
parent
ee7696383f
commit
1d5983aded
@ -33,6 +33,7 @@
|
|||||||
#![feature(unsafe_destructor)]
|
#![feature(unsafe_destructor)]
|
||||||
#![feature(unique)]
|
#![feature(unique)]
|
||||||
#![feature(unsafe_no_drop_flag)]
|
#![feature(unsafe_no_drop_flag)]
|
||||||
|
#![feature(step_by)]
|
||||||
#![cfg_attr(test, feature(rand, rustc_private, test))]
|
#![cfg_attr(test, feature(rand, rustc_private, test))]
|
||||||
#![cfg_attr(test, allow(deprecated))] // rand
|
#![cfg_attr(test, allow(deprecated))] // rand
|
||||||
|
|
||||||
|
@ -92,7 +92,7 @@ use core::clone::Clone;
|
|||||||
use core::cmp::Ordering::{self, Greater, Less};
|
use core::cmp::Ordering::{self, Greater, Less};
|
||||||
use core::cmp::{self, Ord, PartialEq};
|
use core::cmp::{self, Ord, PartialEq};
|
||||||
use core::iter::{Iterator, IteratorExt};
|
use core::iter::{Iterator, IteratorExt};
|
||||||
use core::iter::{range_step, MultiplicativeIterator};
|
use core::iter::MultiplicativeIterator;
|
||||||
use core::marker::Sized;
|
use core::marker::Sized;
|
||||||
use core::mem::size_of;
|
use core::mem::size_of;
|
||||||
use core::mem;
|
use core::mem;
|
||||||
@ -1387,7 +1387,7 @@ fn merge_sort<T, F>(v: &mut [T], mut compare: F) where F: FnMut(&T, &T) -> Order
|
|||||||
// We could hardcode the sorting comparisons here, and we could
|
// We could hardcode the sorting comparisons here, and we could
|
||||||
// manipulate/step the pointers themselves, rather than repeatedly
|
// manipulate/step the pointers themselves, rather than repeatedly
|
||||||
// .offset-ing.
|
// .offset-ing.
|
||||||
for start in range_step(0, len, insertion) {
|
for start in (0.. len).step_by(insertion) {
|
||||||
// start <= i < len;
|
// start <= i < len;
|
||||||
for i in start..cmp::min(start + insertion, len) {
|
for i in start..cmp::min(start + insertion, len) {
|
||||||
// j satisfies: start <= j <= i;
|
// j satisfies: start <= j <= i;
|
||||||
@ -1427,7 +1427,7 @@ fn merge_sort<T, F>(v: &mut [T], mut compare: F) where F: FnMut(&T, &T) -> Order
|
|||||||
// a time, placing the result in `buf_tmp`.
|
// a time, placing the result in `buf_tmp`.
|
||||||
|
|
||||||
// 0 <= start <= len.
|
// 0 <= start <= len.
|
||||||
for start in range_step(0, len, 2 * width) {
|
for start in (0..len).step_by(2 * width) {
|
||||||
// manipulate pointers directly for speed (rather than
|
// manipulate pointers directly for speed (rather than
|
||||||
// using a `for` loop with `range` and `.offset` inside
|
// using a `for` loop with `range` and `.offset` inside
|
||||||
// that loop).
|
// that loop).
|
||||||
|
@ -65,7 +65,7 @@ use default::Default;
|
|||||||
use marker;
|
use marker;
|
||||||
use mem;
|
use mem;
|
||||||
use num::{ToPrimitive, Int};
|
use num::{ToPrimitive, Int};
|
||||||
use ops::{Add, Deref, FnMut};
|
use ops::{Add, Deref, FnMut, RangeFrom};
|
||||||
use option::Option;
|
use option::Option;
|
||||||
use option::Option::{Some, None};
|
use option::Option::{Some, None};
|
||||||
use marker::Sized;
|
use marker::Sized;
|
||||||
@ -2366,34 +2366,101 @@ impl<A, St, F> Iterator for Unfold<St, F> where F: FnMut(&mut St) -> Option<A> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An infinite iterator starting at `start` and advancing by `step` with each
|
/// An adapter for stepping range iterators by a custom amount.
|
||||||
/// iteration
|
///
|
||||||
|
/// The resulting iterator handles overflow by stopping. The `A`
|
||||||
|
/// parameter is the type being iterated over, while `R` is the range
|
||||||
|
/// type (usually one of `std::ops::{Range, RangeFrom}`.
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
#[unstable(feature = "core",
|
#[unstable(feature = "step_by", reason = "recent addition")]
|
||||||
reason = "may be renamed or replaced by range notation adapters")]
|
pub struct StepBy<A, R> {
|
||||||
pub struct Counter<A> {
|
step_by: A,
|
||||||
/// The current state the counter is at (next value to be yielded)
|
range: R,
|
||||||
state: A,
|
|
||||||
/// The amount that this iterator is stepping by
|
|
||||||
step: A,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a new counter with the specified start/step
|
impl<A: Add> RangeFrom<A> {
|
||||||
|
/// Creates an iterator starting at the same point, but stepping by
|
||||||
|
/// the given amount at each iteration.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```ignore
|
||||||
|
/// for i in (0u8..).step_by(2) {
|
||||||
|
/// println!("{}", i);
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// This prints all even `u8` values.
|
||||||
|
#[unstable(feature = "step_by", reason = "recent addition")]
|
||||||
|
pub fn step_by(self, by: A) -> StepBy<A, Self> {
|
||||||
|
StepBy {
|
||||||
|
step_by: by,
|
||||||
|
range: self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<A: Int> ::ops::Range<A> {
|
||||||
|
/// Creates an iterator with the same range, but stepping by the
|
||||||
|
/// given amount at each iteration.
|
||||||
|
///
|
||||||
|
/// The resulting iterator handles overflow by stopping.
|
||||||
|
///
|
||||||
|
/// # Examples
|
||||||
|
///
|
||||||
|
/// ```
|
||||||
|
/// # #![feature(step_by, core)]
|
||||||
|
/// for i in (0..10).step_by(2) {
|
||||||
|
/// println!("{}", i);
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// This prints:
|
||||||
|
///
|
||||||
|
/// ```text
|
||||||
|
/// 0
|
||||||
|
/// 2
|
||||||
|
/// 4
|
||||||
|
/// 6
|
||||||
|
/// 8
|
||||||
|
/// ```
|
||||||
|
#[unstable(feature = "step_by", reason = "recent addition")]
|
||||||
|
pub fn step_by(self, by: A) -> StepBy<A, Self> {
|
||||||
|
StepBy {
|
||||||
|
step_by: by,
|
||||||
|
range: self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// An infinite iterator starting at `start` and advancing by `step` with each
|
||||||
|
/// iteration
|
||||||
|
#[unstable(feature = "core",
|
||||||
|
reason = "may be renamed or replaced by range notation adapters")]
|
||||||
|
#[deprecated(since = "1.0.0-beta", reason = "use range notation and step_by")]
|
||||||
|
pub type Counter<A> = StepBy<A, RangeFrom<A>>;
|
||||||
|
|
||||||
|
/// Deprecated: use `(start..).step_by(step)` instead.
|
||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "core",
|
#[unstable(feature = "core",
|
||||||
reason = "may be renamed or replaced by range notation adapters")]
|
reason = "may be renamed or replaced by range notation adapters")]
|
||||||
|
#[deprecated(since = "1.0.0-beta", reason = "use (start..).step_by(step) instead")]
|
||||||
|
#[allow(deprecated)]
|
||||||
pub fn count<A>(start: A, step: A) -> Counter<A> {
|
pub fn count<A>(start: A, step: A) -> Counter<A> {
|
||||||
Counter{state: start, step: step}
|
StepBy {
|
||||||
|
range: RangeFrom { start: start },
|
||||||
|
step_by: step,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[stable(feature = "rust1", since = "1.0.0")]
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
impl<A: Add<Output=A> + Clone> Iterator for Counter<A> {
|
impl<A: Add<Output=A> + Clone> Iterator for StepBy<A, RangeFrom<A>> {
|
||||||
type Item = A;
|
type Item = A;
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn next(&mut self) -> Option<A> {
|
fn next(&mut self) -> Option<A> {
|
||||||
let result = self.state.clone();
|
let result = self.range.start.clone();
|
||||||
self.state = self.state.clone() + self.step.clone();
|
self.range.start = result.clone() + self.step_by.clone();
|
||||||
Some(result)
|
Some(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2404,31 +2471,22 @@ impl<A: Add<Output=A> + Clone> Iterator for Counter<A> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// An iterator over the range [start, stop)
|
/// An iterator over the range [start, stop)
|
||||||
|
#[allow(deprecated)]
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
#[unstable(feature = "core",
|
#[unstable(feature = "core",
|
||||||
reason = "will be replaced by range notation")]
|
reason = "will be replaced by range notation")]
|
||||||
|
#[deprecated(since = "1.0.0-beta", reason = "use range notation")]
|
||||||
pub struct Range<A> {
|
pub struct Range<A> {
|
||||||
state: A,
|
state: A,
|
||||||
stop: A,
|
stop: A,
|
||||||
one: A,
|
one: A,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns an iterator over the given range [start, stop) (that is, starting
|
/// Deprecated: use `(start..stop)` instead.
|
||||||
/// at start (inclusive), and ending at stop (exclusive)).
|
|
||||||
///
|
|
||||||
/// # Examples
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// let array = [0, 1, 2, 3, 4];
|
|
||||||
///
|
|
||||||
/// for i in range(0, 5) {
|
|
||||||
/// println!("{}", i);
|
|
||||||
/// assert_eq!(i, array[i]);
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "core",
|
#[unstable(feature = "core", reason = "will be replaced by range notation")]
|
||||||
reason = "will be replaced by range notation")]
|
#[deprecated(since = "1.0.0-beta", reason = "use (start..stop) instead")]
|
||||||
|
#[allow(deprecated)]
|
||||||
pub fn range<A: Int>(start: A, stop: A) -> Range<A> {
|
pub fn range<A: Int>(start: A, stop: A) -> Range<A> {
|
||||||
Range {
|
Range {
|
||||||
state: start,
|
state: start,
|
||||||
@ -2440,6 +2498,8 @@ pub fn range<A: Int>(start: A, stop: A) -> Range<A> {
|
|||||||
// FIXME: #10414: Unfortunate type bound
|
// FIXME: #10414: Unfortunate type bound
|
||||||
#[unstable(feature = "core",
|
#[unstable(feature = "core",
|
||||||
reason = "will be replaced by range notation")]
|
reason = "will be replaced by range notation")]
|
||||||
|
#[deprecated(since = "1.0.0-beta", reason = "use range notation")]
|
||||||
|
#[allow(deprecated)]
|
||||||
impl<A: Int + ToPrimitive> Iterator for Range<A> {
|
impl<A: Int + ToPrimitive> Iterator for Range<A> {
|
||||||
type Item = A;
|
type Item = A;
|
||||||
|
|
||||||
@ -2491,6 +2551,8 @@ impl<A: Int + ToPrimitive> Iterator for Range<A> {
|
|||||||
/// the direction it is consumed.
|
/// the direction it is consumed.
|
||||||
#[unstable(feature = "core",
|
#[unstable(feature = "core",
|
||||||
reason = "will be replaced by range notation")]
|
reason = "will be replaced by range notation")]
|
||||||
|
#[deprecated(since = "1.0.0-beta", reason = "use range notation")]
|
||||||
|
#[allow(deprecated)]
|
||||||
impl<A: Int + ToPrimitive> DoubleEndedIterator for Range<A> {
|
impl<A: Int + ToPrimitive> DoubleEndedIterator for Range<A> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn next_back(&mut self) -> Option<A> {
|
fn next_back(&mut self) -> Option<A> {
|
||||||
@ -2507,6 +2569,7 @@ impl<A: Int + ToPrimitive> DoubleEndedIterator for Range<A> {
|
|||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
#[unstable(feature = "core",
|
#[unstable(feature = "core",
|
||||||
reason = "likely to be replaced by range notation and adapters")]
|
reason = "likely to be replaced by range notation and adapters")]
|
||||||
|
#[allow(deprecated)]
|
||||||
pub struct RangeInclusive<A> {
|
pub struct RangeInclusive<A> {
|
||||||
range: Range<A>,
|
range: Range<A>,
|
||||||
done: bool,
|
done: bool,
|
||||||
@ -2516,6 +2579,7 @@ pub struct RangeInclusive<A> {
|
|||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "core",
|
#[unstable(feature = "core",
|
||||||
reason = "likely to be replaced by range notation and adapters")]
|
reason = "likely to be replaced by range notation and adapters")]
|
||||||
|
#[allow(deprecated)]
|
||||||
pub fn range_inclusive<A: Int>(start: A, stop: A) -> RangeInclusive<A> {
|
pub fn range_inclusive<A: Int>(start: A, stop: A) -> RangeInclusive<A> {
|
||||||
RangeInclusive {
|
RangeInclusive {
|
||||||
range: range(start, stop),
|
range: range(start, stop),
|
||||||
@ -2525,6 +2589,7 @@ pub fn range_inclusive<A: Int>(start: A, stop: A) -> RangeInclusive<A> {
|
|||||||
|
|
||||||
#[unstable(feature = "core",
|
#[unstable(feature = "core",
|
||||||
reason = "likely to be replaced by range notation and adapters")]
|
reason = "likely to be replaced by range notation and adapters")]
|
||||||
|
#[allow(deprecated)]
|
||||||
impl<A: Int + ToPrimitive> Iterator for RangeInclusive<A> {
|
impl<A: Int + ToPrimitive> Iterator for RangeInclusive<A> {
|
||||||
type Item = A;
|
type Item = A;
|
||||||
|
|
||||||
@ -2561,6 +2626,7 @@ impl<A: Int + ToPrimitive> Iterator for RangeInclusive<A> {
|
|||||||
|
|
||||||
#[unstable(feature = "core",
|
#[unstable(feature = "core",
|
||||||
reason = "likely to be replaced by range notation and adapters")]
|
reason = "likely to be replaced by range notation and adapters")]
|
||||||
|
#[allow(deprecated)]
|
||||||
impl<A: Int + ToPrimitive> DoubleEndedIterator for RangeInclusive<A> {
|
impl<A: Int + ToPrimitive> DoubleEndedIterator for RangeInclusive<A> {
|
||||||
#[inline]
|
#[inline]
|
||||||
fn next_back(&mut self) -> Option<A> {
|
fn next_back(&mut self) -> Option<A> {
|
||||||
@ -2578,61 +2644,39 @@ impl<A: Int + ToPrimitive> DoubleEndedIterator for RangeInclusive<A> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// An iterator over the range [start, stop) by `step`. It handles overflow by stopping.
|
/// An iterator over the range [start, stop) by `step`. It handles overflow by stopping.
|
||||||
#[derive(Clone)]
|
|
||||||
#[unstable(feature = "core",
|
#[unstable(feature = "core",
|
||||||
reason = "likely to be replaced by range notation and adapters")]
|
reason = "likely to be replaced by range notation and adapters")]
|
||||||
pub struct RangeStep<A> {
|
#[deprecated(since = "1.0.0-beta", reason = "use range notation and step_by")]
|
||||||
state: A,
|
pub type RangeStep<A> = StepBy<A, ::ops::Range<A>>;
|
||||||
stop: A,
|
|
||||||
step: A,
|
|
||||||
rev: bool,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Return an iterator over the range [start, stop) by `step`.
|
/// Deprecated: use `(start..stop).step_by(step)` instead.
|
||||||
///
|
|
||||||
/// It handles overflow by stopping.
|
|
||||||
///
|
|
||||||
/// # Examples
|
|
||||||
///
|
|
||||||
/// ```
|
|
||||||
/// use std::iter::range_step;
|
|
||||||
///
|
|
||||||
/// for i in range_step(0, 10, 2) {
|
|
||||||
/// println!("{}", i);
|
|
||||||
/// }
|
|
||||||
/// ```
|
|
||||||
///
|
|
||||||
/// This prints:
|
|
||||||
///
|
|
||||||
/// ```text
|
|
||||||
/// 0
|
|
||||||
/// 2
|
|
||||||
/// 4
|
|
||||||
/// 6
|
|
||||||
/// 8
|
|
||||||
/// ```
|
|
||||||
#[inline]
|
#[inline]
|
||||||
#[unstable(feature = "core",
|
#[unstable(feature = "core",
|
||||||
reason = "likely to be replaced by range notation and adapters")]
|
reason = "likely to be replaced by range notation and adapters")]
|
||||||
|
#[deprecated(since = "1.0.0-beta",
|
||||||
|
reason = "use `(start..stop).step_by(step)` instead")]
|
||||||
|
#[allow(deprecated)]
|
||||||
pub fn range_step<A: Int>(start: A, stop: A, step: A) -> RangeStep<A> {
|
pub fn range_step<A: Int>(start: A, stop: A, step: A) -> RangeStep<A> {
|
||||||
let rev = step < Int::zero();
|
StepBy {
|
||||||
RangeStep{state: start, stop: stop, step: step, rev: rev}
|
step_by: step,
|
||||||
|
range: ::ops::Range { start: start, end: stop },
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[unstable(feature = "core",
|
#[stable(feature = "rust1", since = "1.0.0")]
|
||||||
reason = "likely to be replaced by range notation and adapters")]
|
impl<A: Int> Iterator for StepBy<A, ::ops::Range<A>> {
|
||||||
impl<A: Int> Iterator for RangeStep<A> {
|
|
||||||
type Item = A;
|
type Item = A;
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn next(&mut self) -> Option<A> {
|
fn next(&mut self) -> Option<A> {
|
||||||
if (self.rev && self.state > self.stop) || (!self.rev && self.state < self.stop) {
|
let rev = self.step_by < Int::zero();
|
||||||
let result = self.state;
|
let start = self.range.start;
|
||||||
match self.state.checked_add(self.step) {
|
if (rev && start > self.range.end) || (!rev && start < self.range.end) {
|
||||||
Some(x) => self.state = x,
|
match start.checked_add(self.step_by) {
|
||||||
None => self.state = self.stop.clone()
|
Some(x) => self.range.start = x,
|
||||||
|
None => self.range.start = self.range.end.clone()
|
||||||
}
|
}
|
||||||
Some(result)
|
Some(start)
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
@ -29,6 +29,7 @@ pub use marker::{Copy, Send, Sized, Sync};
|
|||||||
pub use ops::{Drop, Fn, FnMut, FnOnce};
|
pub use ops::{Drop, Fn, FnMut, FnOnce};
|
||||||
|
|
||||||
// Reexported functions
|
// Reexported functions
|
||||||
|
#[allow(deprecated)]
|
||||||
pub use iter::range;
|
pub use iter::range;
|
||||||
pub use mem::drop;
|
pub use mem::drop;
|
||||||
|
|
||||||
|
@ -775,12 +775,12 @@ fn test_range_inclusive() {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_range_step() {
|
fn test_range_step() {
|
||||||
assert_eq!(range_step(0, 20, 5).collect::<Vec<int>>(), [0, 5, 10, 15]);
|
assert_eq!((0..20).step_by(5).collect::<Vec<int>>(), [0, 5, 10, 15]);
|
||||||
assert_eq!(range_step(20, 0, -5).collect::<Vec<int>>(), [20, 15, 10, 5]);
|
assert_eq!((20..0).step_by(-5).collect::<Vec<int>>(), [20, 15, 10, 5]);
|
||||||
assert_eq!(range_step(20, 0, -6).collect::<Vec<int>>(), [20, 14, 8, 2]);
|
assert_eq!((20..0).step_by(-6).collect::<Vec<int>>(), [20, 14, 8, 2]);
|
||||||
assert_eq!(range_step(200, 255, 50).collect::<Vec<u8>>(), [200, 250]);
|
assert_eq!((200..255).step_by(50).collect::<Vec<u8>>(), [200, 250]);
|
||||||
assert_eq!(range_step(200, -5, 1).collect::<Vec<int>>(), []);
|
assert_eq!((200..-5).step_by(1).collect::<Vec<int>>(), []);
|
||||||
assert_eq!(range_step(200, 200, 1).collect::<Vec<int>>(), []);
|
assert_eq!((200..200).step_by(1).collect::<Vec<int>>(), []);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -17,8 +17,6 @@
|
|||||||
//! internally. The `IndependentSample` trait is for generating values
|
//! internally. The `IndependentSample` trait is for generating values
|
||||||
//! that do not need to record state.
|
//! that do not need to record state.
|
||||||
|
|
||||||
#![unstable(feature = "rand")]
|
|
||||||
|
|
||||||
use core::prelude::*;
|
use core::prelude::*;
|
||||||
use core::num::{Float, Int};
|
use core::num::{Float, Int};
|
||||||
use core::marker::PhantomData;
|
use core::marker::PhantomData;
|
||||||
|
@ -154,7 +154,7 @@ pub trait Combine<'tcx> : Sized {
|
|||||||
b_tys.len())));
|
b_tys.len())));
|
||||||
}
|
}
|
||||||
|
|
||||||
range(0, a_tys.len()).map(|i| {
|
(0.. a_tys.len()).map(|i| {
|
||||||
let a_ty = a_tys[i];
|
let a_ty = a_tys[i];
|
||||||
let b_ty = b_tys[i];
|
let b_ty = b_tys[i];
|
||||||
let v = variances.map_or(ty::Invariant, |v| v[i]);
|
let v = variances.map_or(ty::Invariant, |v| v[i]);
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
#![feature(path_ext)]
|
#![feature(path_ext)]
|
||||||
#![feature(std_misc)]
|
#![feature(std_misc)]
|
||||||
#![feature(path_relative_from)]
|
#![feature(path_relative_from)]
|
||||||
|
#![feature(step_by)]
|
||||||
|
|
||||||
extern crate syntax;
|
extern crate syntax;
|
||||||
extern crate serialize;
|
extern crate serialize;
|
||||||
|
@ -48,7 +48,6 @@
|
|||||||
|
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::hash::{Hash, SipHasher, Hasher};
|
use std::hash::{Hash, SipHasher, Hasher};
|
||||||
use std::iter::range_step;
|
|
||||||
use syntax::ast;
|
use syntax::ast;
|
||||||
use syntax::visit;
|
use syntax::visit;
|
||||||
|
|
||||||
@ -103,7 +102,7 @@ impl Svh {
|
|||||||
|
|
||||||
let hash = state.finish();
|
let hash = state.finish();
|
||||||
return Svh {
|
return Svh {
|
||||||
hash: range_step(0, 64, 4).map(|i| hex(hash >> i)).collect()
|
hash: (0..64).step_by(4).map(|i| hex(hash >> i)).collect()
|
||||||
};
|
};
|
||||||
|
|
||||||
fn hex(b: u64) -> char {
|
fn hex(b: u64) -> char {
|
||||||
|
@ -21,7 +21,6 @@ use libc;
|
|||||||
use flate;
|
use flate;
|
||||||
|
|
||||||
use std::ffi::CString;
|
use std::ffi::CString;
|
||||||
use std::iter;
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::num::Int;
|
use std::num::Int;
|
||||||
|
|
||||||
@ -62,7 +61,7 @@ pub fn run(sess: &session::Session, llmod: ModuleRef,
|
|||||||
let file = path.file_name().unwrap().to_str().unwrap();
|
let file = path.file_name().unwrap().to_str().unwrap();
|
||||||
let file = &file[3..file.len() - 5]; // chop off lib/.rlib
|
let file = &file[3..file.len() - 5]; // chop off lib/.rlib
|
||||||
debug!("reading {}", file);
|
debug!("reading {}", file);
|
||||||
for i in iter::count(0, 1) {
|
for i in 0.. {
|
||||||
let bc_encoded = time(sess.time_passes(),
|
let bc_encoded = time(sess.time_passes(),
|
||||||
&format!("check for {}.{}.bytecode.deflate", name, i),
|
&format!("check for {}.{}.bytecode.deflate", name, i),
|
||||||
(),
|
(),
|
||||||
@ -213,4 +212,3 @@ fn read_from_le_bytes<T: Int>(bytes: &[u8], position_in_bytes: uint) -> T {
|
|||||||
|
|
||||||
Int::from_le(data)
|
Int::from_le(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,8 +16,8 @@
|
|||||||
|
|
||||||
use prelude::v1::*;
|
use prelude::v1::*;
|
||||||
|
|
||||||
|
use ops::Range;
|
||||||
use mem;
|
use mem;
|
||||||
use iter::Range;
|
|
||||||
|
|
||||||
/// Extension methods for ASCII-subset only operations on owned strings
|
/// Extension methods for ASCII-subset only operations on owned strings
|
||||||
#[unstable(feature = "std_misc",
|
#[unstable(feature = "std_misc",
|
||||||
@ -270,7 +270,7 @@ pub fn escape_default(c: u8) -> EscapeDefault {
|
|||||||
_ => ([b'\\', b'x', hexify(c >> 4), hexify(c & 0xf)], 4),
|
_ => ([b'\\', b'x', hexify(c >> 4), hexify(c & 0xf)], 4),
|
||||||
};
|
};
|
||||||
|
|
||||||
return EscapeDefault { range: range(0, len), data: data };
|
return EscapeDefault { range: (0.. len), data: data };
|
||||||
|
|
||||||
fn hexify(b: u8) -> u8 {
|
fn hexify(b: u8) -> u8 {
|
||||||
match b {
|
match b {
|
||||||
|
@ -359,7 +359,7 @@ impl fmt::Display for Ipv6Addr {
|
|||||||
let mut cur_span_len = 0;
|
let mut cur_span_len = 0;
|
||||||
let mut cur_span_at = 0;
|
let mut cur_span_at = 0;
|
||||||
|
|
||||||
for i in range(0, 8) {
|
for i in 0..8 {
|
||||||
if segments[i] == 0 {
|
if segments[i] == 0 {
|
||||||
if cur_span_len == 0 {
|
if cur_span_len == 0 {
|
||||||
cur_span_at = i;
|
cur_span_at = i;
|
||||||
|
@ -586,7 +586,6 @@ pub fn get_exit_status() -> int {
|
|||||||
unsafe fn load_argc_and_argv(argc: int,
|
unsafe fn load_argc_and_argv(argc: int,
|
||||||
argv: *const *const c_char) -> Vec<Vec<u8>> {
|
argv: *const *const c_char) -> Vec<Vec<u8>> {
|
||||||
use ffi::CStr;
|
use ffi::CStr;
|
||||||
use iter::range;
|
|
||||||
|
|
||||||
(0..argc).map(|i| {
|
(0..argc).map(|i| {
|
||||||
CStr::from_ptr(*argv.offset(i)).to_bytes().to_vec()
|
CStr::from_ptr(*argv.offset(i)).to_bytes().to_vec()
|
||||||
|
@ -57,6 +57,7 @@
|
|||||||
// NB: remove when I/O reform lands
|
// NB: remove when I/O reform lands
|
||||||
#[doc(no_inline)] pub use old_io::{Buffer, Writer, Reader, Seek, BufferPrelude};
|
#[doc(no_inline)] pub use old_io::{Buffer, Writer, Reader, Seek, BufferPrelude};
|
||||||
// NB: remove when range syntax lands
|
// NB: remove when range syntax lands
|
||||||
|
#[allow(deprecated)]
|
||||||
#[doc(no_inline)] pub use iter::range;
|
#[doc(no_inline)] pub use iter::range;
|
||||||
|
|
||||||
#[doc(no_inline)] pub use num::wrapping::{Wrapping, WrappingOps};
|
#[doc(no_inline)] pub use num::wrapping::{Wrapping, WrappingOps};
|
||||||
|
@ -286,7 +286,7 @@ pub fn args() -> Args {
|
|||||||
let vec = unsafe {
|
let vec = unsafe {
|
||||||
let (argc, argv) = (*_NSGetArgc() as isize,
|
let (argc, argv) = (*_NSGetArgc() as isize,
|
||||||
*_NSGetArgv() as *const *const c_char);
|
*_NSGetArgv() as *const *const c_char);
|
||||||
range(0, argc as isize).map(|i| {
|
(0.. argc as isize).map(|i| {
|
||||||
let bytes = CStr::from_ptr(*argv.offset(i)).to_bytes().to_vec();
|
let bytes = CStr::from_ptr(*argv.offset(i)).to_bytes().to_vec();
|
||||||
OsStringExt::from_vec(bytes)
|
OsStringExt::from_vec(bytes)
|
||||||
}).collect::<Vec<_>>()
|
}).collect::<Vec<_>>()
|
||||||
|
@ -77,7 +77,6 @@ use owned_slice::OwnedSlice;
|
|||||||
|
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
use std::io::prelude::*;
|
use std::io::prelude::*;
|
||||||
use std::iter;
|
|
||||||
use std::mem;
|
use std::mem;
|
||||||
use std::num::Float;
|
use std::num::Float;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
@ -749,7 +748,7 @@ impl<'a> Parser<'a> {
|
|||||||
// would encounter a `>` and stop. This lets the parser handle trailing
|
// would encounter a `>` and stop. This lets the parser handle trailing
|
||||||
// commas in generic parameters, because it can stop either after
|
// commas in generic parameters, because it can stop either after
|
||||||
// parsing a type or after parsing a comma.
|
// parsing a type or after parsing a comma.
|
||||||
for i in iter::count(0, 1) {
|
for i in 0.. {
|
||||||
if self.check(&token::Gt)
|
if self.check(&token::Gt)
|
||||||
|| self.token == token::BinOp(token::Shr)
|
|| self.token == token::BinOp(token::Shr)
|
||||||
|| self.token == token::Ge
|
|| self.token == token::Ge
|
||||||
|
Loading…
Reference in New Issue
Block a user