diff options
| author | Lieselotte <52315535+she3py@users.noreply.github.com> | 2024-01-28 16:12:21 +0100 |
|---|---|---|
| committer | Lieselotte <52315535+she3py@users.noreply.github.com> | 2024-01-28 16:12:21 +0100 |
| commit | 6f014a81b2466c2abdae4c06ff81fae7e1bc006c (patch) | |
| tree | 338c16a2576e619cc2d21a902423541a0d30b88a /compiler/rustc_parse/src/parser/expr.rs | |
| parent | 635124704849eeead4e3a7bb6e663c5351571d93 (diff) | |
| download | rust-6f014a81b2466c2abdae4c06ff81fae7e1bc006c.tar.gz rust-6f014a81b2466c2abdae4c06ff81fae7e1bc006c.zip | |
Handle methodcalls & operators in patterns
Diffstat (limited to 'compiler/rustc_parse/src/parser/expr.rs')
| -rw-r--r-- | compiler/rustc_parse/src/parser/expr.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/compiler/rustc_parse/src/parser/expr.rs b/compiler/rustc_parse/src/parser/expr.rs index b789b65797b..c395decab12 100644 --- a/compiler/rustc_parse/src/parser/expr.rs +++ b/compiler/rustc_parse/src/parser/expr.rs @@ -444,6 +444,19 @@ impl<'a> Parser<'a> { ) if self.restrictions.contains(Restrictions::CONST_EXPR) => { return None; } + // When recovering patterns as expressions, stop parsing when encountering an assignment `=`, an alternative `|`, or a range `..`. + ( + Some( + AssocOp::Assign + | AssocOp::AssignOp(_) + | AssocOp::BitOr + | AssocOp::DotDot + | AssocOp::DotDotEq, + ), + _, + ) if self.restrictions.contains(Restrictions::IS_PAT) => { + return None; + } (Some(op), _) => (op, self.token.span), (None, Some((Ident { name: sym::and, span }, false))) if self.may_recover() => { self.dcx().emit_err(errors::InvalidLogicalOperator { |
