diff --git a/src/libstd/iterator.rs b/src/libstd/iterator.rs index 46e059355941..d96191f296d7 100644 --- a/src/libstd/iterator.rs +++ b/src/libstd/iterator.rs @@ -20,7 +20,7 @@ implementing the `Iterator` trait. #[allow(default_methods)]; // solid enough for the use case here use cmp; -use iter::{FromIter, Times}; +use iter::Times; use num::{Zero, One}; use option::{Option, Some, None}; use ops::{Add, Mul}; @@ -240,7 +240,7 @@ pub trait IteratorUtil { fn advance(&mut self, f: &fn(A) -> bool) -> bool; /// Loops through the entire iterator, collecting all of the elements into - /// a container implementing `FromIter`. + /// a container implementing `FromIterator`. /// /// # Example /// @@ -249,7 +249,7 @@ pub trait IteratorUtil { /// let b: ~[int] = a.iter().transform(|&x| x).collect(); /// assert!(a == b); /// ~~~ - fn collect>(&mut self) -> B; + fn collect>(&mut self) -> B; /// Loops through `n` iterations, returning the `n`th element of the /// iterator. @@ -411,8 +411,8 @@ impl> IteratorUtil for T { } #[inline] - fn collect>(&mut self) -> B { - FromIter::from_iter::(|f| self.advance(f)) + fn collect>(&mut self) -> B { + FromIterator::from_iterator(self) } /// Return the `n`th item yielded by an iterator. diff --git a/src/libstd/vec.rs b/src/libstd/vec.rs index aeb5b000747f..dd3c23d1084e 100644 --- a/src/libstd/vec.rs +++ b/src/libstd/vec.rs @@ -2500,6 +2500,17 @@ impl FromIter for ~[T]{ } } +#[cfg(stage0)] +impl> FromIterator for ~[A] { + pub fn from_iterator(iterator: &mut T) -> ~[A] { + let mut xs = ~[]; + for iterator.advance |x| { + xs.push(x); + } + xs + } +} + #[cfg(not(stage0))] impl> FromIterator for ~[A] { pub fn from_iterator(iterator: &mut T) -> ~[A] {