Skip to content

Commit 3ab2914

Browse files
Dan Rubelcommit-bot@chromium.org
Dan Rubel
authored andcommitted
Add fasta parser cascade recovery
Change-Id: I1cf32604acf2124a9d61621fbb4cfb9343d98d33 Reviewed-on: https://dart-review.googlesource.com/28840 Reviewed-by: Johnni Winther <[email protected]> Reviewed-by: Brian Wilkerson <[email protected]> Commit-Queue: Dan Rubel <[email protected]>
1 parent f189bb5 commit 3ab2914

File tree

5 files changed

+16
-7
lines changed

5 files changed

+16
-7
lines changed

pkg/analyzer/test/src/fasta/recovery/missing_code_test.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,18 @@ f() {
7676
testUserDefinableOperatorWithSuper('|');
7777
}
7878

79+
void test_cascade_missingRight() {
80+
testRecovery('''
81+
f(x) {
82+
x..
83+
}
84+
''', [ParserErrorCode.MISSING_IDENTIFIER, ParserErrorCode.EXPECTED_TOKEN], '''
85+
f(x) {
86+
x.. _s_;
87+
}
88+
''');
89+
}
90+
7991
void test_classDeclaration_missingName() {
8092
testRecovery('''
8193
class {}

pkg/compiler/lib/src/diagnostics/messages.dart

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2668,8 +2668,7 @@ main() {}
26682668
MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD: const MessageTemplate(
26692669
MessageKind.EXPECTED_IDENTIFIER_NOT_RESERVED_WORD,
26702670
"'#{keyword}' is a reserved word and can't be used here.",
2671-
howToFix: "Try using a different name.",
2672-
examples: const ["do() {} main() {}"]),
2671+
howToFix: "Try using a different name."),
26732672

26742673
MessageKind.NAMED_FUNCTION_EXPRESSION: const MessageTemplate(
26752674
MessageKind.NAMED_FUNCTION_EXPRESSION,

pkg/front_end/lib/src/fasta/fasta_codes_generated.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1323,7 +1323,7 @@ const Template<Message Function(Token token)> templateExpectedIdentifier =
13231323
const Code<Message Function(Token token)> codeExpectedIdentifier =
13241324
const Code<Message Function(Token token)>(
13251325
"ExpectedIdentifier", templateExpectedIdentifier,
1326-
analyzerCode: "MISSING_IDENTIFIER", dart2jsCode: "EXPECTED_IDENTIFIER");
1326+
analyzerCode: "MISSING_IDENTIFIER", dart2jsCode: "*fatal*");
13271327

13281328
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
13291329
Message _withArgumentsExpectedIdentifier(Token token) {

pkg/front_end/lib/src/fasta/parser/parser.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4459,11 +4459,9 @@ class Parser {
44594459
listener.beginCascade(cascadeOperator);
44604460
if (optional('[', token.next)) {
44614461
token = parseArgumentOrIndexStar(token, null);
4462-
} else if (token.next.isIdentifier) {
4462+
} else {
44634463
token = parseSend(token, IdentifierContext.expressionContinuation);
44644464
listener.endBinaryExpression(cascadeOperator);
4465-
} else {
4466-
return reportUnexpectedToken(token.next);
44674465
}
44684466
Token next = token.next;
44694467
Token mark;

pkg/front_end/messages.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ ExpectedHexDigit:
236236
ExpectedIdentifier:
237237
template: "Expected an identifier, but got '#lexeme'."
238238
analyzerCode: MISSING_IDENTIFIER
239-
dart2jsCode: EXPECTED_IDENTIFIER
239+
dart2jsCode: "*fatal*"
240240
script: "do() {} main() {}"
241241

242242
EqualityCannotBeEqualityOperand:

0 commit comments

Comments
 (0)