Skip to content

Commit 082de5e

Browse files
committed
Remove MacCall special cases from Parser::parse_full_stmt
It is impossible for expr here to be a braced macro call. Expr comes from `parse_stmt_without_recovery`, in which macro calls are parsed by `parse_stmt_mac`. See this part: let kind = if (style == MacStmtStyle::Braces && self.token != token::Dot && self.token != token::Question) || self.token == token::Semi || self.token == token::Eof { StmtKind::MacCall(P(MacCallStmt { mac, style, attrs, tokens: None })) } else { // Since none of the above applied, this is an expression statement macro. let e = self.mk_expr(lo.to(hi), ExprKind::MacCall(mac)); let e = self.maybe_recover_from_bad_qpath(e)?; let e = self.parse_expr_dot_or_call_with(e, lo, attrs)?; let e = self.parse_expr_assoc_with( 0, LhsExpr::AlreadyParsed { expr: e, starts_statement: false }, )?; StmtKind::Expr(e) }; A braced macro call at the head of a statement is always either extended into ExprKind::Field / MethodCall / Await / Try / Binary, or else returned as StmtKind::MacCall. We can never get a StmtKind::Expr containing ExprKind::MacCall containing brace delimiter.
1 parent e0fb2ba commit 082de5e

File tree

1 file changed

+3
-9
lines changed
  • compiler/rustc_parse/src/parser

1 file changed

+3
-9
lines changed

compiler/rustc_parse/src/parser/stmt.rs

+3-9
Original file line numberDiff line numberDiff line change
@@ -649,10 +649,8 @@ impl<'a> Parser<'a> {
649649
match &mut stmt.kind {
650650
// Expression without semicolon.
651651
StmtKind::Expr(expr)
652-
if match expr.kind {
653-
ExprKind::MacCall(_) => true,
654-
_ => classify::expr_requires_semi_to_be_stmt(expr),
655-
} && !expr.attrs.is_empty()
652+
if classify::expr_requires_semi_to_be_stmt(expr)
653+
&& !expr.attrs.is_empty()
656654
&& ![token::Eof, token::Semi, token::CloseDelim(Delimiter::Brace)]
657655
.contains(&self.token.kind) =>
658656
{
@@ -665,11 +663,7 @@ impl<'a> Parser<'a> {
665663

666664
// Expression without semicolon.
667665
StmtKind::Expr(expr)
668-
if self.token != token::Eof
669-
&& match expr.kind {
670-
ExprKind::MacCall(_) => true,
671-
_ => classify::expr_requires_semi_to_be_stmt(expr),
672-
} =>
666+
if self.token != token::Eof && classify::expr_requires_semi_to_be_stmt(expr) =>
673667
{
674668
// Just check for errors and recover; do not eat semicolon yet.
675669

0 commit comments

Comments
 (0)