diff options
Diffstat (limited to 'compiler/rustc_parse/src')
| -rw-r--r-- | compiler/rustc_parse/src/parser/diagnostics.rs | 20 | ||||
| -rw-r--r-- | compiler/rustc_parse/src/parser/expr.rs | 16 |
2 files changed, 18 insertions, 18 deletions
diff --git a/compiler/rustc_parse/src/parser/diagnostics.rs b/compiler/rustc_parse/src/parser/diagnostics.rs index 89cb1c89f81..38e67790d74 100644 --- a/compiler/rustc_parse/src/parser/diagnostics.rs +++ b/compiler/rustc_parse/src/parser/diagnostics.rs @@ -156,10 +156,15 @@ impl AttemptLocalParseRecovery { } } +/// Information for emitting suggestions and recovering from +/// C-style `i++`, `--i`, etc. #[derive(Debug, Copy, Clone)] struct IncDecRecovery { + /// This increment/decrement is not a subexpression. standalone: bool, + /// Is this an increment or decrement? op: IncOrDec, + /// Is this pre- or postfix? fixity: UnaryFixity, } @@ -1278,20 +1283,16 @@ impl<'a> Parser<'a> { } if kind.standalone { - self.inc_dec_standalone_recovery(base, err, kind, ident, spans) + self.inc_dec_standalone_recovery(base, err, kind, spans) } else { match kind.fixity { - UnaryFixity::Pre => { - self.prefix_inc_dec_suggest_and_recover(base, err, kind, ident, spans) - } - UnaryFixity::Post => { - self.postfix_inc_dec_suggest_and_recover(base, err, kind, ident, spans) - } + UnaryFixity::Pre => self.prefix_inc_dec_suggest(base, err, kind, ident, spans), + UnaryFixity::Post => self.postfix_inc_dec_suggest(base, err, kind, ident, spans), } } } - fn prefix_inc_dec_suggest_and_recover( + fn prefix_inc_dec_suggest( &mut self, _base: P<Expr>, mut err: DiagnosticBuilder<'a>, @@ -1310,7 +1311,7 @@ impl<'a> Parser<'a> { Err(err) } - fn postfix_inc_dec_suggest_and_recover( + fn postfix_inc_dec_suggest( &mut self, _base: P<Expr>, mut err: DiagnosticBuilder<'a>, @@ -1334,7 +1335,6 @@ impl<'a> Parser<'a> { _base: P<Expr>, mut err: DiagnosticBuilder<'a>, kind: IncDecRecovery, - _ident: Ident, (pre_span, post_span): (Span, Span), ) -> PResult<'a, P<Expr>> { err.multipart_suggestion( diff --git a/compiler/rustc_parse/src/parser/expr.rs b/compiler/rustc_parse/src/parser/expr.rs index 39d96b8a9e3..34ccd167e4e 100644 --- a/compiler/rustc_parse/src/parser/expr.rs +++ b/compiler/rustc_parse/src/parser/expr.rs @@ -592,13 +592,7 @@ impl<'a> Parser<'a> { this.bump(); this.parse_prefix_expr(None) } // `+expr` - token::Ident(..) if this.token.is_keyword(kw::Box) => { - make_it!(this, attrs, |this, _| this.parse_box_expr(lo)) - } - token::Ident(..) if this.is_mistaken_not_ident_negation() => { - make_it!(this, attrs, |this, _| this.recover_not_expr(lo)) - } - // Recover from `++x` + // Recover from `++x`: token::BinOp(token::Plus) if this.look_ahead(1, |t| *t == token::BinOp(token::Plus)) => { @@ -608,9 +602,15 @@ impl<'a> Parser<'a> { this.bump(); this.bump(); - let operand_expr = this.parse_path_start_expr(Default::default())?; + let operand_expr = this.parse_dot_or_call_expr(Default::default())?; this.maybe_recover_from_prefix_increment(operand_expr, pre_span, prev_is_semi) } + token::Ident(..) if this.token.is_keyword(kw::Box) => { + make_it!(this, attrs, |this, _| this.parse_box_expr(lo)) + } + token::Ident(..) if this.is_mistaken_not_ident_negation() => { + make_it!(this, attrs, |this, _| this.recover_not_expr(lo)) + } _ => return this.parse_dot_or_call_expr(Some(attrs)), } } |
