1
Fork 0

Collect tokens when handling :literal matcher

An `NtLiteral` just wraps an `Expr`, so we don't need to add a new `tokens`
field to an AST struct.
This commit is contained in:
Aaron Hill 2020-08-21 18:28:47 -04:00
parent 1823dea7df
commit d5a04a9927
No known key found for this signature in database
GPG key ID: B4087E510E98B164
2 changed files with 10 additions and 2 deletions

View file

@ -140,7 +140,15 @@ impl<'a> Parser<'a> {
}
token::NtExpr(expr)
}
NonterminalKind::Literal => token::NtLiteral(self.parse_literal_maybe_minus()?),
NonterminalKind::Literal => {
let (mut lit, tokens) =
self.collect_tokens(|this| this.parse_literal_maybe_minus())?;
// We have have eaten a nonterminal, which could already have tokens
if lit.tokens.is_none() {
lit.tokens = Some(tokens);
}
token::NtLiteral(lit)
}
NonterminalKind::Ty => {
let (mut ty, tokens) = self.collect_tokens(|this| this.parse_ty())?;
// We have an eaten an NtTy, which could already have tokens