|
1 | 1 | use super::{Parser, PResult, Restrictions, PrevTokenKind, TokenType, PathStyle}; |
2 | 2 | use super::{BlockMode, SemiColonMode}; |
3 | 3 | use super::{SeqSep, TokenExpectType}; |
| 4 | +use super::pat::{GateOr, PARAM_EXPECTED}; |
4 | 5 |
|
5 | 6 | use crate::maybe_recover_from_interpolated_ty_qpath; |
6 | 7 | use crate::ptr::P; |
@@ -1175,7 +1176,7 @@ impl<'a> Parser<'a> { |
1175 | 1176 | fn parse_fn_block_arg(&mut self) -> PResult<'a, Arg> { |
1176 | 1177 | let lo = self.token.span; |
1177 | 1178 | let attrs = self.parse_arg_attributes()?; |
1178 | | - let pat = self.parse_pat(Some("argument name"))?; |
| 1179 | + let pat = self.parse_pat(PARAM_EXPECTED)?; |
1179 | 1180 | let t = if self.eat(&token::Colon) { |
1180 | 1181 | self.parse_ty()? |
1181 | 1182 | } else { |
@@ -1241,19 +1242,20 @@ impl<'a> Parser<'a> { |
1241 | 1242 | Ok(cond) |
1242 | 1243 | } |
1243 | 1244 |
|
1244 | | - /// Parses a `let $pats = $expr` pseudo-expression. |
| 1245 | + /// Parses a `let $pat = $expr` pseudo-expression. |
1245 | 1246 | /// The `let` token has already been eaten. |
1246 | 1247 | fn parse_let_expr(&mut self, attrs: ThinVec<Attribute>) -> PResult<'a, P<Expr>> { |
1247 | 1248 | let lo = self.prev_span; |
1248 | | - let pats = self.parse_pats()?; |
| 1249 | + // FIXME(or_patterns, Centril | dlrobertson): use `parse_top_pat` instead. |
| 1250 | + let pat = self.parse_top_pat_unpack(GateOr::No)?; |
1249 | 1251 | self.expect(&token::Eq)?; |
1250 | 1252 | let expr = self.with_res( |
1251 | 1253 | Restrictions::NO_STRUCT_LITERAL, |
1252 | 1254 | |this| this.parse_assoc_expr_with(1 + prec_let_scrutinee_needs_par(), None.into()) |
1253 | 1255 | )?; |
1254 | 1256 | let span = lo.to(expr.span); |
1255 | 1257 | self.sess.gated_spans.let_chains.borrow_mut().push(span); |
1256 | | - Ok(self.mk_expr(span, ExprKind::Let(pats, expr), attrs)) |
| 1258 | + Ok(self.mk_expr(span, ExprKind::Let(pat, expr), attrs)) |
1257 | 1259 | } |
1258 | 1260 |
|
1259 | 1261 | /// `else` token already eaten |
@@ -1283,7 +1285,7 @@ impl<'a> Parser<'a> { |
1283 | 1285 | _ => None, |
1284 | 1286 | }; |
1285 | 1287 |
|
1286 | | - let pat = self.parse_top_level_pat()?; |
| 1288 | + let pat = self.parse_top_pat(GateOr::Yes)?; |
1287 | 1289 | if !self.eat_keyword(kw::In) { |
1288 | 1290 | let in_span = self.prev_span.between(self.token.span); |
1289 | 1291 | self.struct_span_err(in_span, "missing `in` in `for` loop") |
@@ -1387,7 +1389,8 @@ impl<'a> Parser<'a> { |
1387 | 1389 | crate fn parse_arm(&mut self) -> PResult<'a, Arm> { |
1388 | 1390 | let attrs = self.parse_outer_attributes()?; |
1389 | 1391 | let lo = self.token.span; |
1390 | | - let pats = self.parse_pats()?; |
| 1392 | + // FIXME(or_patterns, Centril | dlrobertson): use `parse_top_pat` instead. |
| 1393 | + let pat = self.parse_top_pat_unpack(GateOr::No)?; |
1391 | 1394 | let guard = if self.eat_keyword(kw::If) { |
1392 | 1395 | Some(self.parse_expr()?) |
1393 | 1396 | } else { |
@@ -1448,7 +1451,7 @@ impl<'a> Parser<'a> { |
1448 | 1451 |
|
1449 | 1452 | Ok(ast::Arm { |
1450 | 1453 | attrs, |
1451 | | - pats, |
| 1454 | + pats: pat, // FIXME(or_patterns, Centril | dlrobertson): this should just be `pat,`. |
1452 | 1455 | guard, |
1453 | 1456 | body: expr, |
1454 | 1457 | span: lo.to(hi), |
|
0 commit comments