Merge pull request #117 from dtolnay/extend2
impl Extend<TokenStream> for TokenStream
diff --git a/src/lib.rs b/src/lib.rs
index 299f9b8..d261209 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -169,6 +169,13 @@
}
}
+impl Extend<TokenStream> for TokenStream {
+ fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I) {
+ self.inner
+ .extend(streams.into_iter().map(|stream| stream.inner))
+ }
+}
+
/// Collects a number of token trees into a single stream.
impl FromIterator<TokenTree> for TokenStream {
fn from_iter<I: IntoIterator<Item = TokenTree>>(streams: I) -> Self {
diff --git a/src/stable.rs b/src/stable.rs
index 0efc32c..30b8e77 100644
--- a/src/stable.rs
+++ b/src/stable.rs
@@ -160,6 +160,13 @@
}
}
+impl Extend<TokenStream> for TokenStream {
+ fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I) {
+ self.inner
+ .extend(streams.into_iter().flat_map(|stream| stream));
+ }
+}
+
pub type TokenTreeIter = vec::IntoIter<TokenTree>;
impl IntoIterator for TokenStream {
diff --git a/src/unstable.rs b/src/unstable.rs
index 1292edf..66158ec 100644
--- a/src/unstable.rs
+++ b/src/unstable.rs
@@ -61,6 +61,13 @@
TokenStream::Stable(_) => mismatch(),
}
}
+
+ fn unwrap_stable(self) -> stable::TokenStream {
+ match self {
+ TokenStream::Nightly(_) => mismatch(),
+ TokenStream::Stable(s) => s,
+ }
+ }
}
impl FromStr for TokenStream {
@@ -171,6 +178,19 @@
}
}
+impl Extend<TokenStream> for TokenStream {
+ fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I) {
+ match self {
+ TokenStream::Nightly(tts) => {
+ tts.extend(streams.into_iter().map(|stream| stream.unwrap_nightly()))
+ }
+ TokenStream::Stable(tts) => {
+ tts.extend(streams.into_iter().map(|stream| stream.unwrap_stable()))
+ }
+ }
+ }
+}
+
impl fmt::Debug for TokenStream {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {