Index: pkg/fasta/lib/src/kernel/body_builder.dart |
diff --git a/pkg/fasta/lib/src/kernel/body_builder.dart b/pkg/fasta/lib/src/kernel/body_builder.dart |
index 2d7004d76b9b5cdb1336c3a6ac17d47a17ae3cb9..62ac65faa4be204b81ebe114eefdf4805c06f824 100644 |
--- a/pkg/fasta/lib/src/kernel/body_builder.dart |
+++ b/pkg/fasta/lib/src/kernel/body_builder.dart |
@@ -27,7 +27,6 @@ import 'package:kernel/core_types.dart' show |
import 'package:dart_scanner/src/token.dart' show |
BeginGroupToken, |
- ErrorToken, |
Token, |
isBinaryOperator, |
isMinusOperator; |
@@ -2121,8 +2120,8 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
@override |
- void reportErrorHelper(Token token, ErrorKind kind, Map arguments) { |
- super.reportErrorHelper(token, kind, arguments); |
+ void handleRecoverableError(Token token, ErrorKind kind, Map arguments) { |
+ super.handleRecoverableError(token, kind, arguments); |
if (!hasParserError) { |
print("$uri:${recoverableErrors.last}"); |
} |
@@ -2130,39 +2129,17 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
@override |
- Token expectedExpression(Token token) { |
- if (token is ErrorToken) { |
- reportErrorToken(token); |
- push(new Throw(new StringLiteral("${recoverableErrors.last}"))); |
- do { |
- token = token.next; |
- } while (token is ErrorToken); |
- return token; |
- } else { |
- push(new InvalidExpression()); |
- return super.expectedExpression(token); |
- } |
- } |
- |
- @override |
- Token expected(String string, Token token) { |
- if (token is ErrorToken) { |
- reportErrorToken(token); |
- do { |
- token = token.next; |
- } while (token is ErrorToken); |
- return token; |
- } |
- const List<String> trailing = const <String>[")", "}", ";", ","]; |
- if (trailing.contains(token.stringValue) && trailing.contains(string)) { |
- // We're just trying to get out an error. |
- if (recoverableErrors.isNotEmpty) { |
- reportError(token, ErrorKind.Unspecified, |
- {"text": "Expected: '$string', but got '${token.value}'"}); |
+ Token handleUnrecoverableError(Token token, ErrorKind kind, Map arguments) { |
+ if (kind == ErrorKind.UnexpectedToken) { |
+ String expected = arguments["expected"]; |
+ const List<String> trailing = const <String>[")", "}", ";", ","]; |
+ if (trailing.contains(token.stringValue) && trailing.contains(expected)) { |
+ arguments.putIfAbsent("actual", () => token.value); |
+ handleRecoverableError(token, ErrorKind.ExpectedButGot, arguments); |
} |
return token; |
} |
- return super.expected(string, token); |
+ return super.handleUnrecoverableError(token, kind, arguments); |
} |
void warning(error, [int charOffset = -1]) { |