diff options
| author | Aaron Hill <aa1ronham@gmail.com> | 2020-08-21 18:37:34 -0400 |
|---|---|---|
| committer | Aaron Hill <aa1ronham@gmail.com> | 2020-09-10 17:33:06 -0400 |
| commit | 3815e91ccd8c7c8ed564476425bca6f1dc5e9607 (patch) | |
| tree | 69467a8cbf355feb3ffed3f14e06e7f33dc5e180 /compiler/rustc_parse/src/parser | |
| parent | d5a04a9927d1685d63f1d59039ea7dd03ee090a5 (diff) | |
| download | rust-3815e91ccd8c7c8ed564476425bca6f1dc5e9607.tar.gz rust-3815e91ccd8c7c8ed564476425bca6f1dc5e9607.zip | |
Attach tokens to `NtMeta` (`ast::AttrItem`)
An `AttrItem` does not have outer attributes, so we only capture tokens when parsing a `macro_rules!` matcher
Diffstat (limited to 'compiler/rustc_parse/src/parser')
| -rw-r--r-- | compiler/rustc_parse/src/parser/attr.rs | 2 | ||||
| -rw-r--r-- | compiler/rustc_parse/src/parser/nonterminal.rs | 9 |
2 files changed, 9 insertions, 2 deletions
diff --git a/compiler/rustc_parse/src/parser/attr.rs b/compiler/rustc_parse/src/parser/attr.rs index 4e4429e461f..98f94098bfc 100644 --- a/compiler/rustc_parse/src/parser/attr.rs +++ b/compiler/rustc_parse/src/parser/attr.rs @@ -162,7 +162,7 @@ impl<'a> Parser<'a> { } else { let path = self.parse_path(PathStyle::Mod)?; let args = self.parse_attr_args()?; - ast::AttrItem { path, args } + ast::AttrItem { path, args, tokens: None } }) } diff --git a/compiler/rustc_parse/src/parser/nonterminal.rs b/compiler/rustc_parse/src/parser/nonterminal.rs index 516c2c77213..8717f4b9245 100644 --- a/compiler/rustc_parse/src/parser/nonterminal.rs +++ b/compiler/rustc_parse/src/parser/nonterminal.rs @@ -169,7 +169,14 @@ impl<'a> Parser<'a> { } } NonterminalKind::Path => token::NtPath(self.parse_path(PathStyle::Type)?), - NonterminalKind::Meta => token::NtMeta(P(self.parse_attr_item()?)), + NonterminalKind::Meta => { + let (mut attr, tokens) = self.collect_tokens(|this| this.parse_attr_item())?; + // We may have eaten a nonterminal, which could already have tokens + if attr.tokens.is_none() { + attr.tokens = Some(tokens); + } + token::NtMeta(P(attr)) + } NonterminalKind::TT => token::NtTT(self.parse_token_tree()), NonterminalKind::Vis => token::NtVis(self.parse_visibility(FollowedByType::Yes)?), NonterminalKind::Lifetime => { |
