Chromium Code Reviews| Index: pkg/front_end/lib/src/fasta/parser/parser.dart |
| diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart |
| index f7e2e1f90c1ca2e2ecc07d131512ef7aaa3a7661..9560cd4aa3454ee6af4fcd7a7beee9bf97405d01 100644 |
| --- a/pkg/front_end/lib/src/fasta/parser/parser.dart |
| +++ b/pkg/front_end/lib/src/fasta/parser/parser.dart |
| @@ -20,6 +20,8 @@ import '../../scanner/token.dart' |
| EQUALITY_PRECEDENCE, |
| POSTFIX_PRECEDENCE, |
| RELATIONAL_PRECEDENCE, |
| + SyntheticStringToken, |
| + SyntheticToken, |
| TokenType; |
| import '../scanner/token.dart' show isUserDefinableOperator; |
| @@ -356,13 +358,12 @@ class Parser { |
| Token exportKeyword = token; |
| listener.beginExport(exportKeyword); |
| assert(optional('export', token)); |
| - token = parseLiteralStringOrRecoverExpression(token.next); |
| + token = ensureParseLiteralString(token.next); |
| token = parseConditionalUris(token); |
| token = parseCombinators(token); |
| - Token semicolon = token; |
| - token = expect(';', token); |
| + Token semicolon = ensureSemicolon(token); |
| listener.endExport(exportKeyword, semicolon); |
| - return token; |
| + return semicolon.next; |
| } |
| Token parseCombinators(Token token) { |
| @@ -1922,6 +1923,24 @@ class Parser { |
| return token; |
| } |
| + Token ensureParseLiteralString(Token token) { |
| + if (!identical(token.kind, STRING_TOKEN)) { |
|
ahe
2017/08/21 12:51:37
Don't need to use identical on int.
danrubel
2017/08/21 14:51:02
Fair enough. I was just following what you already
|
| + reportRecoverableErrorWithToken(token, fasta.templateExpectedString); |
| + token = listener.rewriter.insertTokenBefore( |
|
ahe
2017/08/21 12:51:37
Something is off here. If the parser does the rewr
danrubel
2017/08/21 14:51:02
Yeah. I had the parser holding onto the rewriter b
|
| + new SyntheticStringToken(TokenType.STRING, '""', token.charOffset, 0), |
| + token); |
| + } |
| + return parseLiteralString(token); |
| + } |
| + |
| + Token ensureSemicolon(Token token) { |
| + if (optional(';', token)) return token; |
| + reportRecoverableError( |
| + token, fasta.templateExpectedButGot.withArguments(';')); |
| + return listener.rewriter.insertTokenBefore( |
| + new SyntheticToken(TokenType.SEMICOLON, token.charOffset), token); |
| + } |
| + |
| Token parseLiteralStringOrRecoverExpression(Token token) { |
| if (identical(token.kind, STRING_TOKEN)) { |
| return parseLiteralString(token); |