diff options
| author | Esteban Küber <esteban@kuber.com.ar> | 2018-05-29 16:37:06 -0700 |
|---|---|---|
| committer | Esteban Küber <esteban@kuber.com.ar> | 2018-06-05 08:48:54 -0700 |
| commit | 8f4a5429c2cf7ce1f0a63f821484744024b364f1 (patch) | |
| tree | b4dc63aebe37b459597be25fad53c4fd2f08e5e4 /src/libsyntax | |
| parent | 41affd03eb169830773cd1b11efda562ab81fad0 (diff) | |
| download | rust-8f4a5429c2cf7ce1f0a63f821484744024b364f1.tar.gz rust-8f4a5429c2cf7ce1f0a63f821484744024b364f1.zip | |
Accept `..` in incorrect position to avoid further errors
We currently give a specific message when encountering a `..` anywhere other than the end of a pattern. Modify the parser to accept it (while still emitting the error) so that we don't also trigger "missing fields in pattern" errors afterwards.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 28f93328e95..5b5ecc4147b 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -3749,6 +3749,16 @@ impl<'a> Parser<'a> { err.span_label(self.span, "`..` must be in the last position, \ and cannot have a trailing comma"); + if self.look_ahead(1, |t| { + t == &token::CloseDelim(token::Brace) || t.is_ident() + }) { + // If the struct looks otherwise well formed, recover and continue. + // This way we avoid "pattern missing fields" errors afterwards. + err.emit(); + self.bump(); + etc = true; + break; + } } else { err.span_label(self.span, "expected `}`"); } |
