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 {