diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2017-07-19 21:54:01 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2017-07-20 21:27:22 -0700 |
| commit | e99d309c5695a2b5ad1ab44c06fd32ec506cebaa (patch) | |
| tree | 3f19403fe2ff9c67b2abb6f33c5730cf62abbed7 /src/libsyntax/tokenstream.rs | |
| parent | cc800531cc79b76b37a1e0f1f58f807ea7aee68b (diff) | |
| download | rust-e99d309c5695a2b5ad1ab44c06fd32ec506cebaa.tar.gz rust-e99d309c5695a2b5ad1ab44c06fd32ec506cebaa.zip | |
Use the macro structure spans instead of the invocation
Diffstat (limited to 'src/libsyntax/tokenstream.rs')
| -rw-r--r-- | src/libsyntax/tokenstream.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/libsyntax/tokenstream.rs b/src/libsyntax/tokenstream.rs index 8eee25405df..0014fd5e937 100644 --- a/src/libsyntax/tokenstream.rs +++ b/src/libsyntax/tokenstream.rs @@ -131,6 +131,15 @@ impl TokenTree { } } + /// Modify the `TokenTree`'s span inplace. + pub fn set_span(&mut self, span: Span) { + match *self { + TokenTree::Token(ref mut sp, _) | TokenTree::Delimited(ref mut sp, _) => { + *sp = span; + } + } + } + /// Indicates if the stream is a token that is equal to the provided token. pub fn eq_token(&self, t: Token) -> bool { match *self { @@ -190,6 +199,14 @@ impl PartialEq<TokenStream> for TokenStream { } impl TokenStream { + pub fn len(&self) -> usize { + if let TokenStreamKind::Stream(ref slice) = self.kind { + slice.len() + } else { + 0 + } + } + pub fn empty() -> TokenStream { TokenStream { kind: TokenStreamKind::Empty } } @@ -241,6 +258,21 @@ impl TokenStream { } } + pub fn map_pos<F: FnMut(usize, TokenTree) -> TokenTree>(self, mut f: F) -> TokenStream { + let mut trees = self.into_trees(); + let mut result = Vec::new(); + let mut i = 0; + while let Some(stream) = trees.next_as_stream() { + result.push(match stream.kind { + TokenStreamKind::Tree(tree) => f(i, tree).into(), + TokenStreamKind::JointTree(tree) => f(i, tree).joint(), + _ => unreachable!() + }); + i += 1; + } + TokenStream::concat(result) + } + pub fn map<F: FnMut(TokenTree) -> TokenTree>(self, mut f: F) -> TokenStream { let mut trees = self.into_trees(); let mut result = Vec::new(); |
