Skip to content

Commit 9262b3d

Browse files
committed
make Extend use IntoIterator
This breaks all implementors of Extend, as they must now accept IntoIterator instead of Iterator. The fix for this is generally trivial (change the bound, and maybe call into_iter() on the argument to get the old argument). Users of Extend should be unaffected because Iterators are IntoIterator. [breaking-change]
1 parent dfc5c0f commit 9262b3d

File tree

16 files changed

+32
-26
lines changed

16 files changed

+32
-26
lines changed

src/libcollections/binary_heap.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -677,7 +677,8 @@ impl<'a, T> IntoIterator for &'a BinaryHeap<T> where T: Ord {
677677

678678
#[stable(feature = "rust1", since = "1.0.0")]
679679
impl<T: Ord> Extend<T> for BinaryHeap<T> {
680-
fn extend<Iter: Iterator<Item=T>>(&mut self, iter: Iter) {
680+
fn extend<I: IntoIterator<Item=T>>(&mut self, iterable: I) {
681+
let iter = iterable.into_iter();
681682
let (lower, _) = iter.size_hint();
682683

683684
self.reserve(lower);

src/libcollections/bit.rs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -934,7 +934,8 @@ impl FromIterator<bool> for Bitv {
934934
#[stable(feature = "rust1", since = "1.0.0")]
935935
impl Extend<bool> for Bitv {
936936
#[inline]
937-
fn extend<I: Iterator<Item=bool>>(&mut self, iterator: I) {
937+
fn extend<I: IntoIterator<Item=bool>>(&mut self, iterable: I) {
938+
let iterator = iterable.into_iter();
938939
let (min, _) = iterator.size_hint();
939940
self.reserve(min);
940941
for element in iterator {
@@ -1143,8 +1144,8 @@ impl FromIterator<usize> for BitvSet {
11431144
#[stable(feature = "rust1", since = "1.0.0")]
11441145
impl Extend<usize> for BitvSet {
11451146
#[inline]
1146-
fn extend<I: Iterator<Item=usize>>(&mut self, iterator: I) {
1147-
for i in iterator {
1147+
fn extend<I: IntoIterator<Item=usize>>(&mut self, iter: I) {
1148+
for i in iter {
11481149
self.insert(i);
11491150
}
11501151
}

src/libcollections/btree/map.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -836,7 +836,7 @@ impl<K: Ord, V> FromIterator<(K, V)> for BTreeMap<K, V> {
836836
#[stable(feature = "rust1", since = "1.0.0")]
837837
impl<K: Ord, V> Extend<(K, V)> for BTreeMap<K, V> {
838838
#[inline]
839-
fn extend<T: Iterator<Item=(K, V)>>(&mut self, iter: T) {
839+
fn extend<T: IntoIterator<Item=(K, V)>>(&mut self, iter: T) {
840840
for (k, v) in iter {
841841
self.insert(k, v);
842842
}

src/libcollections/btree/set.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -503,7 +503,7 @@ impl<'a, T> IntoIterator for &'a BTreeSet<T> {
503503
#[stable(feature = "rust1", since = "1.0.0")]
504504
impl<T: Ord> Extend<T> for BTreeSet<T> {
505505
#[inline]
506-
fn extend<Iter: Iterator<Item=T>>(&mut self, iter: Iter) {
506+
fn extend<Iter: IntoIterator<Item=T>>(&mut self, iter: Iter) {
507507
for elem in iter {
508508
self.insert(elem);
509509
}

src/libcollections/dlist.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -868,8 +868,8 @@ impl<'a, T> IntoIterator for &'a mut DList<T> {
868868

869869
#[stable(feature = "rust1", since = "1.0.0")]
870870
impl<A> Extend<A> for DList<A> {
871-
fn extend<T: Iterator<Item=A>>(&mut self, iterator: T) {
872-
for elt in iterator { self.push_back(elt); }
871+
fn extend<T: IntoIterator<Item=A>>(&mut self, iter: T) {
872+
for elt in iter { self.push_back(elt); }
873873
}
874874
}
875875

src/libcollections/enum_set.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -268,8 +268,8 @@ impl<'a, E> IntoIterator for &'a EnumSet<E> where E: CLike {
268268
}
269269

270270
impl<E:CLike> Extend<E> for EnumSet<E> {
271-
fn extend<I: Iterator<Item=E>>(&mut self, iterator: I) {
272-
for element in iterator {
271+
fn extend<I: IntoIterator<Item=E>>(&mut self, iter: I) {
272+
for element in iter {
273273
self.insert(element);
274274
}
275275
}

src/libcollections/ring_buf.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1736,8 +1736,8 @@ impl<'a, T> IntoIterator for &'a mut RingBuf<T> {
17361736

17371737
#[stable(feature = "rust1", since = "1.0.0")]
17381738
impl<A> Extend<A> for RingBuf<A> {
1739-
fn extend<T: Iterator<Item=A>>(&mut self, iterator: T) {
1740-
for elt in iterator {
1739+
fn extend<T: IntoIterator<Item=A>>(&mut self, iter: T) {
1740+
for elt in iter {
17411741
self.push_back(elt);
17421742
}
17431743
}

src/libcollections/string.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use core::default::Default;
2121
use core::error::Error;
2222
use core::fmt;
2323
use core::hash;
24-
use core::iter::FromIterator;
24+
use core::iter::{IntoIterator, FromIterator};
2525
use core::mem;
2626
use core::ops::{self, Deref, Add, Index};
2727
use core::ptr;
@@ -728,7 +728,8 @@ impl<'a> FromIterator<&'a str> for String {
728728
#[unstable(feature = "collections",
729729
reason = "waiting on Extend stabilization")]
730730
impl Extend<char> for String {
731-
fn extend<I:Iterator<Item=char>>(&mut self, iterator: I) {
731+
fn extend<I: IntoIterator<Item=char>>(&mut self, iterable: I) {
732+
let iterator = iterable.into_iter();
732733
let (lower_bound, _) = iterator.size_hint();
733734
self.reserve(lower_bound);
734735
for ch in iterator {
@@ -740,7 +741,8 @@ impl Extend<char> for String {
740741
#[unstable(feature = "collections",
741742
reason = "waiting on Extend stabilization")]
742743
impl<'a> Extend<&'a str> for String {
743-
fn extend<I: Iterator<Item=&'a str>>(&mut self, iterator: I) {
744+
fn extend<I: IntoIterator<Item=&'a str>>(&mut self, iterable: I) {
745+
let iterator = iterable.into_iter();
744746
// A guess that at least one byte per iterator element will be needed.
745747
let (lower_bound, _) = iterator.size_hint();
746748
self.reserve(lower_bound);

src/libcollections/vec.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1480,7 +1480,8 @@ impl<'a, T> IntoIterator for &'a mut Vec<T> {
14801480
#[unstable(feature = "collections", reason = "waiting on Extend stability")]
14811481
impl<T> Extend<T> for Vec<T> {
14821482
#[inline]
1483-
fn extend<I: Iterator<Item=T>>(&mut self, iterator: I) {
1483+
fn extend<I: IntoIterator<Item=T>>(&mut self, iterable: I) {
1484+
let iterator = iterable.into_iter();
14841485
let (lower, _) = iterator.size_hint();
14851486
self.reserve(lower);
14861487
for element in iterator {

src/libcollections/vec_map.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -700,7 +700,7 @@ impl<'a, T> IntoIterator for &'a mut VecMap<T> {
700700

701701
#[stable(feature = "rust1", since = "1.0.0")]
702702
impl<V> Extend<(usize, V)> for VecMap<V> {
703-
fn extend<Iter: Iterator<Item=(usize, V)>>(&mut self, iter: Iter) {
703+
fn extend<I: IntoIterator<Item=(usize, V)>>(&mut self, iter: I) {
704704
for (k, v) in iter {
705705
self.insert(k, v);
706706
}

src/libcore/iter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ impl<I: Iterator> IntoIterator for I {
147147
pub trait Extend<A> {
148148
/// Extend a container with the elements yielded by an arbitrary iterator
149149
#[stable(feature = "rust1", since = "1.0.0")]
150-
fn extend<T: Iterator<Item=A>>(&mut self, iterator: T);
150+
fn extend<T: IntoIterator<Item=A>>(&mut self, iterable: T);
151151
}
152152

153153
/// An extension trait providing numerous methods applicable to all iterators.

src/libstd/collections/hash/map.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1570,7 +1570,7 @@ impl<K, V, S, H> Extend<(K, V)> for HashMap<K, V, S>
15701570
S: HashState<Hasher=H>,
15711571
H: hash::Hasher<Output=u64>
15721572
{
1573-
fn extend<T: Iterator<Item=(K, V)>>(&mut self, iter: T) {
1573+
fn extend<T: IntoIterator<Item=(K, V)>>(&mut self, iter: T) {
15741574
for (k, v) in iter {
15751575
self.insert(k, v);
15761576
}

src/libstd/collections/hash/set.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ impl<T, S, H> Extend<T> for HashSet<T, S>
636636
S: HashState<Hasher=H>,
637637
H: hash::Hasher<Output=u64>
638638
{
639-
fn extend<I: Iterator<Item=T>>(&mut self, iter: I) {
639+
fn extend<I: IntoIterator<Item=T>>(&mut self, iter: I) {
640640
for k in iter {
641641
self.insert(k);
642642
}

src/libstd/path.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ use core::prelude::*;
110110
use ascii::*;
111111
use borrow::BorrowFrom;
112112
use cmp;
113-
use iter;
113+
use iter::{self, IntoIterator};
114114
use mem;
115115
use ops::{self, Deref};
116116
use string::CowString;
@@ -961,7 +961,7 @@ impl<'a, P: ?Sized + 'a> iter::FromIterator<&'a P> for PathBuf where P: AsPath {
961961
}
962962

963963
impl<'a, P: ?Sized + 'a> iter::Extend<&'a P> for PathBuf where P: AsPath {
964-
fn extend<I: Iterator<Item = &'a P>>(&mut self, iter: I) {
964+
fn extend<I: IntoIterator<Item = &'a P>>(&mut self, iter: I) {
965965
for p in iter {
966966
self.push(p)
967967
}

src/libstd/sys/common/wtf8.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ use borrow::Cow;
3232
use cmp;
3333
use fmt;
3434
use hash::{Hash, Writer, Hasher};
35-
use iter::FromIterator;
35+
use iter::{FromIterator, IntoIterator};
3636
use mem;
3737
use num::Int;
3838
use ops;
@@ -368,7 +368,8 @@ impl FromIterator<CodePoint> for Wtf8Buf {
368368
/// This replaces surrogate code point pairs with supplementary code points,
369369
/// like concatenating ill-formed UTF-16 strings effectively would.
370370
impl Extend<CodePoint> for Wtf8Buf {
371-
fn extend<T: Iterator<Item=CodePoint>>(&mut self, iterator: T) {
371+
fn extend<T: IntoIterator<Item=CodePoint>>(&mut self, iterable: T) {
372+
let iterator = iterable.into_iter();
372373
let (low, _high) = iterator.size_hint();
373374
// Lower bound of one byte per code point (ASCII only)
374375
self.bytes.reserve(low);

src/libsyntax/util/small_vector.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
use self::SmallVectorRepr::*;
1212
use self::IntoIterRepr::*;
1313

14-
use std::iter::FromIterator;
14+
use std::iter::{IntoIterator, FromIterator};
1515
use std::mem;
1616
use std::slice;
1717
use std::vec;
@@ -38,7 +38,7 @@ impl<T> FromIterator<T> for SmallVector<T> {
3838
}
3939

4040
impl<T> Extend<T> for SmallVector<T> {
41-
fn extend<I: Iterator<Item=T>>(&mut self, iter: I) {
41+
fn extend<I: IntoIterator<Item=T>>(&mut self, iter: I) {
4242
for val in iter {
4343
self.push(val);
4444
}

0 commit comments

Comments
 (0)