about summary refs log tree commit diff
path: root/crates/parser/src
diff options
context:
space:
mode:
authorJonas Schievink <jonas.schievink@ferrous-systems.com>2022-12-12 12:57:29 +0100
committerJonas Schievink <jonas.schievink@ferrous-systems.com>2022-12-12 12:57:29 +0100
commited48bd8b9ddef0f57e54de2deb46c41d6b6ec4e3 (patch)
tree3dfaa7b23434f89a7eb162f5bd5b12cc9886dbf9 /crates/parser/src
parent21e61bee8b74e93f14205f4a6c316db08f811e38 (diff)
downloadrust-ed48bd8b9ddef0f57e54de2deb46c41d6b6ec4e3.tar.gz
rust-ed48bd8b9ddef0f57e54de2deb46c41d6b6ec4e3.zip
Fix parsing of `_ = x` in closure body
Diffstat (limited to 'crates/parser/src')
-rw-r--r--crates/parser/src/grammar/expressions.rs2
-rw-r--r--crates/parser/src/grammar/expressions/atom.rs2
2 files changed, 3 insertions, 1 deletions
diff --git a/crates/parser/src/grammar/expressions.rs b/crates/parser/src/grammar/expressions.rs
index dcaceade652..8932330b825 100644
--- a/crates/parser/src/grammar/expressions.rs
+++ b/crates/parser/src/grammar/expressions.rs
@@ -288,7 +288,7 @@ fn expr_bp(
 }
 
 const LHS_FIRST: TokenSet =
-    atom::ATOM_EXPR_FIRST.union(TokenSet::new(&[T![&], T![*], T![!], T![.], T![-]]));
+    atom::ATOM_EXPR_FIRST.union(TokenSet::new(&[T![&], T![*], T![!], T![.], T![-], T![_]]));
 
 fn lhs(p: &mut Parser<'_>, r: Restrictions) -> Option<(CompletedMarker, BlockLike)> {
     let m;
diff --git a/crates/parser/src/grammar/expressions/atom.rs b/crates/parser/src/grammar/expressions/atom.rs
index 99f42a26623..81027a7bf33 100644
--- a/crates/parser/src/grammar/expressions/atom.rs
+++ b/crates/parser/src/grammar/expressions/atom.rs
@@ -278,6 +278,8 @@ fn closure_expr(p: &mut Parser<'_>) -> CompletedMarker {
         // fn main() { || -> i32 { 92 }(); }
         block_expr(p);
     } else if p.at_ts(EXPR_FIRST) {
+        // test closure_body_underscore_assignment
+        // fn main() { || _ = 0; }
         expr(p);
     } else {
         p.error("expected expression");