Update parser to find token on which to report the error
... before checking if the token is an ErrorToken
Also address comments in https://dart-review.googlesource.com/c/sdk/+/75960
Change-Id: Ia0d33e2f7879026d07937c6d709e23c9c14f5c16
Reviewed-on: https://dart-review.googlesource.com/75961
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Dan Rubel <danrubel@google.com>
diff --git a/pkg/analyzer/lib/src/fasta/ast_builder.dart b/pkg/analyzer/lib/src/fasta/ast_builder.dart
index 28ec606..3740609 100644
--- a/pkg/analyzer/lib/src/fasta/ast_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_builder.dart
@@ -1304,7 +1304,7 @@
: optional(':', colonAfterDefault));
debugEvent("SwitchCase");
- List<Statement> statements = popTypedList<Statement>(statementCount);
+ List<Statement> statements = popTypedList(statementCount);
List<SwitchMember> members;
if (labelCount == 0 && defaultKeyword == null) {
@@ -1325,8 +1325,7 @@
members = new List<SwitchMember>(expressionCount);
}
for (int index = expressionCount - 1; index >= 0; --index) {
- SwitchMember member;
- member = pop();
+ SwitchMember member = pop();
while (peek() is Label) {
member.labels.insert(0, pop());
--labelCount;
diff --git a/pkg/front_end/lib/src/fasta/parser/parser.dart b/pkg/front_end/lib/src/fasta/parser/parser.dart
index b12f4fe..760424c 100644
--- a/pkg/front_end/lib/src/fasta/parser/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser/parser.dart
@@ -5819,22 +5819,22 @@
}
void reportRecoverableError(Token token, Message message) {
+ // Find a non-synthetic token on which to report the error.
+ token = findNonZeroLengthToken(token);
if (token is ErrorToken) {
reportErrorToken(token);
} else {
- // Find a non-synthetic token on which to report the error.
- token = findNonZeroLengthToken(token);
listener.handleRecoverableError(message, token, token);
}
}
void reportRecoverableErrorWithToken(
Token token, Template<_MessageWithArgument<Token>> template) {
+ // Find a non-synthetic token on which to report the error.
+ token = findNonZeroLengthToken(token);
if (token is ErrorToken) {
reportErrorToken(token);
} else {
- // Find a non-synthetic token on which to report the error.
- token = findNonZeroLengthToken(token);
listener.handleRecoverableError(
template.withArguments(token), token, token);
}