|
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