Force token collection to run when parsing nonterminals
Fixes #81007 Previously, we would fail to collect tokens in the proper place when only builtin attributes were present. As a result, we would end up with attribute tokens in the collected `TokenStream`, leading to duplication when we attempted to prepend the attributes from the AST node. We now explicitly track when token collection must be performed due to nomterminal parsing.
This commit is contained in:
@@ -472,7 +472,11 @@ impl<'a> Parser<'a> {
|
||||
/// Parses a prefix-unary-operator expr.
|
||||
fn parse_prefix_expr(&mut self, attrs: Option<AttrVec>) -> PResult<'a, P<Expr>> {
|
||||
let attrs = self.parse_or_use_outer_attributes(attrs)?;
|
||||
let needs_tokens = super::attr::maybe_needs_tokens(&attrs);
|
||||
// FIXME: Use super::attr::maybe_needs_tokens(&attrs) once we come up
|
||||
// with a good way of passing `force_tokens` through from `parse_nonterminal`.
|
||||
// Checking !attrs.is_empty() is correct, but will cause us to unnecessarily
|
||||
// capture tokens in some circumstances.
|
||||
let needs_tokens = !attrs.is_empty();
|
||||
let do_parse = |this: &mut Parser<'a>| {
|
||||
let lo = this.token.span;
|
||||
// Note: when adding new unary operators, don't forget to adjust TokenKind::can_begin_expr()
|
||||
|
||||
Reference in New Issue
Block a user