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] {