Skip to content

Commit 16c70fe

Browse files
committed
Auto merge of #13762 - jonas-schievink:underscore-expr-first, r=jonas-schievink
fix: Fix parsing of `_ = x` in closure body Fixes #13757
2 parents 21e61be + ed48bd8 commit 16c70fe

File tree

4 files changed

+36
-1
lines changed

4 files changed

+36
-1
lines changed

crates/parser/src/grammar/expressions.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ fn expr_bp(
288288
}
289289

290290
const LHS_FIRST: TokenSet =
291-
atom::ATOM_EXPR_FIRST.union(TokenSet::new(&[T![&], T![*], T![!], T![.], T![-]]));
291+
atom::ATOM_EXPR_FIRST.union(TokenSet::new(&[T![&], T![*], T![!], T![.], T![-], T![_]]));
292292

293293
fn lhs(p: &mut Parser<'_>, r: Restrictions) -> Option<(CompletedMarker, BlockLike)> {
294294
let m;

crates/parser/src/grammar/expressions/atom.rs

+2
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,8 @@ fn closure_expr(p: &mut Parser<'_>) -> CompletedMarker {
278278
// fn main() { || -> i32 { 92 }(); }
279279
block_expr(p);
280280
} else if p.at_ts(EXPR_FIRST) {
281+
// test closure_body_underscore_assignment
282+
// fn main() { || _ = 0; }
281283
expr(p);
282284
} else {
283285
p.error("expected expression");
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
SOURCE_FILE
2+
FN
3+
FN_KW "fn"
4+
WHITESPACE " "
5+
NAME
6+
IDENT "main"
7+
PARAM_LIST
8+
L_PAREN "("
9+
R_PAREN ")"
10+
WHITESPACE " "
11+
BLOCK_EXPR
12+
STMT_LIST
13+
L_CURLY "{"
14+
WHITESPACE " "
15+
EXPR_STMT
16+
CLOSURE_EXPR
17+
PARAM_LIST
18+
PIPE "|"
19+
PIPE "|"
20+
WHITESPACE " "
21+
BIN_EXPR
22+
UNDERSCORE_EXPR
23+
UNDERSCORE "_"
24+
WHITESPACE " "
25+
EQ "="
26+
WHITESPACE " "
27+
LITERAL
28+
INT_NUMBER "0"
29+
SEMICOLON ";"
30+
WHITESPACE " "
31+
R_CURLY "}"
32+
WHITESPACE "\n"
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fn main() { || _ = 0; }

0 commit comments

Comments
 (0)