diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-12-03 11:07:05 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-12-03 11:07:05 +0100 |
| commit | cf937fa84d98d04642fd855d8daf65430ae48bb3 (patch) | |
| tree | d078e53e048e0c7a216faaf4227787d08b22e675 /src/libsyntax/tokenstream.rs | |
| parent | 01345d65c119f48aa5e62acd9a88c7079186024e (diff) | |
| parent | 498737c8e9cf52be1bde3bef7ffa24a3d0540257 (diff) | |
| download | rust-cf937fa84d98d04642fd855d8daf65430ae48bb3.tar.gz rust-cf937fa84d98d04642fd855d8daf65430ae48bb3.zip | |
Rollup merge of #66935 - petrochenkov:attrtok2, r=Centril
syntax: Unify macro and attribute arguments in AST The unified form (`ast::MacArgs`) represents parsed arguments instead of an unstructured token stream that was previously used for attributes. It also tracks some spans and delimiter kinds better for fn-like macros and macro definitions. I've been talking about implementing this with @nnethercote in https://github.com/rust-lang/rust/pull/65750#issuecomment-546517322. The parsed representation is closer to `MetaItem` and requires less token juggling during conversions, so it potentially may be faster. r? @Centril
Diffstat (limited to 'src/libsyntax/tokenstream.rs')
| -rw-r--r-- | src/libsyntax/tokenstream.rs | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/libsyntax/tokenstream.rs b/src/libsyntax/tokenstream.rs index 6a0523dd655..491b9a9ade4 100644 --- a/src/libsyntax/tokenstream.rs +++ b/src/libsyntax/tokenstream.rs @@ -225,6 +225,14 @@ impl TokenStream { self.0.len() } + pub fn span(&self) -> Option<Span> { + match &**self.0 { + [] => None, + [(tt, _)] => Some(tt.span()), + [(tt_start, _), .., (tt_end, _)] => Some(tt_start.span().to(tt_end.span())), + } + } + pub fn from_streams(mut streams: SmallVec<[TokenStream; 2]>) -> TokenStream { match streams.len() { 0 => TokenStream::default(), |
