about summary refs log tree commit diff
path: root/compiler/rustc_parse/src
diff options
context:
space:
mode:
authorNoah Lev <camelidcamel@gmail.com>2022-02-17 12:28:07 -0800
committerNoah Lev <camelidcamel@gmail.com>2022-03-23 22:31:57 -0700
commit67a9adbb541f7c62e993d05ff3687a8695d5d349 (patch)
tree3a957fdbde1fdef634d6ea682feaf686f0015616 /compiler/rustc_parse/src
parent80e57e223e98f7075cc4af83fa0eef948493d0df (diff)
downloadrust-67a9adbb541f7c62e993d05ff3687a8695d5d349.tar.gz
rust-67a9adbb541f7c62e993d05ff3687a8695d5d349.zip
Refactor, handle fields better, add field tests
Diffstat (limited to 'compiler/rustc_parse/src')
-rw-r--r--compiler/rustc_parse/src/parser/diagnostics.rs20
-rw-r--r--compiler/rustc_parse/src/parser/expr.rs16
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)),
         }
     }