Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2)

Unified Diff: pkg/fasta/lib/src/kernel/body_builder.dart

Issue 2650813002: Restructure parser error handling and recovery. (Closed)
Patch Set: Address comments. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/dart_parser/lib/src/parser.dart ('k') | pkg/fasta/lib/src/source/diet_parser.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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]) {
« no previous file with comments | « pkg/dart_parser/lib/src/parser.dart ('k') | pkg/fasta/lib/src/source/diet_parser.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698