Skip to content

Commit 5463bb1

Browse files
authored
Merge pull request #117 from dtolnay/extend2
impl Extend<TokenStream> for TokenStream
2 parents c764f68 + 5c58c53 commit 5463bb1

File tree

3 files changed

+34
-0
lines changed

3 files changed

+34
-0
lines changed

src/lib.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,13 @@ impl Extend<TokenTree> for TokenStream {
169169
}
170170
}
171171

172+
impl Extend<TokenStream> for TokenStream {
173+
fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I) {
174+
self.inner
175+
.extend(streams.into_iter().map(|stream| stream.inner))
176+
}
177+
}
178+
172179
/// Collects a number of token trees into a single stream.
173180
impl FromIterator<TokenTree> for TokenStream {
174181
fn from_iter<I: IntoIterator<Item = TokenTree>>(streams: I) -> Self {

src/stable.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,13 @@ impl Extend<TokenTree> for TokenStream {
160160
}
161161
}
162162

163+
impl Extend<TokenStream> for TokenStream {
164+
fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I) {
165+
self.inner
166+
.extend(streams.into_iter().flat_map(|stream| stream));
167+
}
168+
}
169+
163170
pub type TokenTreeIter = vec::IntoIter<TokenTree>;
164171

165172
impl IntoIterator for TokenStream {

src/unstable.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ impl TokenStream {
6161
TokenStream::Stable(_) => mismatch(),
6262
}
6363
}
64+
65+
fn unwrap_stable(self) -> stable::TokenStream {
66+
match self {
67+
TokenStream::Nightly(_) => mismatch(),
68+
TokenStream::Stable(s) => s,
69+
}
70+
}
6471
}
6572

6673
impl FromStr for TokenStream {
@@ -171,6 +178,19 @@ impl Extend<TokenTree> for TokenStream {
171178
}
172179
}
173180

181+
impl Extend<TokenStream> for TokenStream {
182+
fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I) {
183+
match self {
184+
TokenStream::Nightly(tts) => {
185+
tts.extend(streams.into_iter().map(|stream| stream.unwrap_nightly()))
186+
}
187+
TokenStream::Stable(tts) => {
188+
tts.extend(streams.into_iter().map(|stream| stream.unwrap_stable()))
189+
}
190+
}
191+
}
192+
}
193+
174194
impl fmt::Debug for TokenStream {
175195
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
176196
match self {

0 commit comments

Comments
 (0)