about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2019-01-20 15:16:36 -0800
committerEsteban Küber <esteban@kuber.com.ar>2019-01-20 15:16:36 -0800
commitdefa61f3fb2612358b57c206c5e16da2751e6deb (patch)
tree16dda63e86fa58940291a5a176918e1e9efe92ed /src/libsyntax
parent15bad8bbfd3125b1e94d04f274910e24d0bb63eb (diff)
downloadrust-defa61f3fb2612358b57c206c5e16da2751e6deb.tar.gz
rust-defa61f3fb2612358b57c206c5e16da2751e6deb.zip
Tweak field parse error recovery
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/parse/parser.rs25
1 files changed, 6 insertions, 19 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 038d949d24a..a2d3595b472 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -2695,28 +2695,12 @@ impl<'a> Parser<'a> {
                 break;
             }
 
-            let mut recovery_field = None;
-            if let token::Ident(ident, _) = self.token {
-                if !self.token.is_reserved_ident() {
-                    let mut ident = ident.clone();
-                    ident.span = self.span;
-                    recovery_field = Some(ast::Field {
-                        ident,
-                        span: self.span,
-                        expr: self.mk_expr(self.span, ExprKind::Err, ThinVec::new()),
-                        is_shorthand: true,
-                        attrs: ThinVec::new(),
-                    });
-                }
-            }
+            let mut parsed_field = None;
             match self.parse_field() {
-                Ok(f) => fields.push(f),
+                Ok(f) => parsed_field = Some(f),
                 Err(mut e) => {
                     e.span_label(struct_sp, "while parsing this struct");
                     e.emit();
-                    if let Some(f) = recovery_field {
-                        fields.push(f);
-                    }
 
                     // If the next token is a comma, then try to parse
                     // what comes next as additional fields, rather than
@@ -2732,7 +2716,10 @@ impl<'a> Parser<'a> {
 
             match self.expect_one_of(&[token::Comma],
                                      &[token::CloseDelim(token::Brace)]) {
-                Ok(()) => {}
+                Ok(()) => if let Some(f) = parsed_field {
+                    // only include the field if there's no parse error
+                    fields.push(f);
+                }
                 Err(mut e) => {
                     e.span_label(struct_sp, "while parsing this struct");
                     e.emit();