Skip to content

Commit

Permalink
Change how parse_expr_force_collect works.
Browse files Browse the repository at this point in the history
It now parses outer attributes before collecting tokens. This avoids the
problem where the outer attribute tokens were being stored twice -- for
the attribute tokesn, and also for the expression tokens.

Fixes rust-lang#86055.
  • Loading branch information
nnethercote committed Jun 19, 2024
1 parent 8170acb commit 64c2e9e
Show file tree
Hide file tree
Showing 2 changed files with 6 additions and 28 deletions.
7 changes: 5 additions & 2 deletions compiler/rustc_parse/src/parser/expr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -98,9 +98,12 @@ impl<'a> Parser<'a> {
self.parse_expr_res(Restrictions::empty(), attrs)
}

/// Parses an expression, forcing tokens to be collected
/// Parses an expression, forcing tokens to be collected.
pub fn parse_expr_force_collect(&mut self) -> PResult<'a, P<Expr>> {
self.collect_tokens_no_attrs(|this| this.parse_expr())
self.current_closure.take();

let attrs = self.parse_outer_attributes()?;
self.collect_tokens_no_attrs(|this| this.parse_expr_res(Restrictions::empty(), attrs))
}

pub fn parse_expr_anon_const(&mut self) -> PResult<'a, AnonConst> {
Expand Down
27 changes: 1 addition & 26 deletions tests/ui/proc-macro/expr-stmt-nonterminal-tokens.stdout
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
PRINT-DERIVE INPUT (DISPLAY): enum E { V = { let _ = #[allow(warnings)] #[allow(warnings)] 0; 0 }, }
PRINT-DERIVE INPUT (DISPLAY): enum E { V = { let _ = #[allow(warnings)] 0; 0 }, }
PRINT-DERIVE INPUT (DEBUG): TokenStream [
Ident {
ident: "enum",
Expand Down Expand Up @@ -39,31 +39,6 @@ PRINT-DERIVE INPUT (DEBUG): TokenStream [
Group {
delimiter: None,
stream: TokenStream [
Punct {
ch: '#',
spacing: Alone,
span: #0 bytes(543..544),
},
Group {
delimiter: Bracket,
stream: TokenStream [
Ident {
ident: "allow",
span: #0 bytes(545..550),
},
Group {
delimiter: Parenthesis,
stream: TokenStream [
Ident {
ident: "warnings",
span: #0 bytes(551..559),
},
],
span: #0 bytes(550..560),
},
],
span: #0 bytes(544..561),
},
Punct {
ch: '#',
spacing: Alone,
Expand Down

0 comments on commit 64c2e9e

Please sign in to comment.