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

Unified Diff: dart/frog/leg/scanner/parser.dart

Issue 9158001: Better error recovery. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: rebased Created 8 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 | « dart/frog/leg/scanner/listener.dart ('k') | dart/frog/leg/tools/find_file_to_parse.sh » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: dart/frog/leg/scanner/parser.dart
diff --git a/dart/frog/leg/scanner/parser.dart b/dart/frog/leg/scanner/parser.dart
index 009867fe19cdc7707f46e0e749d90c94f76c93a0..36341a01692696dcb92a746e58a02befff73a62e 100644
--- a/dart/frog/leg/scanner/parser.dart
+++ b/dart/frog/leg/scanner/parser.dart
@@ -188,7 +188,7 @@ class Parser {
Token skipBlock(Token token) {
if (!optional('{', token)) {
- return listener.expectedBlock(token);
+ return listener.unexpected(token);
}
BeginGroupToken beginGroupToken = token;
assert(beginGroupToken.endGroup === null ||
@@ -369,7 +369,7 @@ class Parser {
if (token.kind === EOF_TOKEN) {
// TODO(ahe): This is a hack. It would be better to tell the
// listener more explicitly that it must pop an identifier.
- listener.endTopLevelFields(0, start, token);
+ listener.endTopLevelFields(1, start, token);
return token;
}
}
@@ -479,7 +479,7 @@ class Parser {
Token peekAfterType(Token token) {
// TODO(ahe): Also handle var?
if ('void' !== token.stringValue && !isIdentifier(token)) {
- listener.expectedIdentifier(token);
+ listener.unexpected(token);
}
// We are looking at "identifier ...".
Token peek = token.next;
@@ -507,7 +507,9 @@ class Parser {
Token begin = token;
listener.beginClassBody(token);
if (!optional('{', token)) {
- return listener.expectedBlock(token);
+ token = listener.unexpected(token);
+ listener.endClassBody(0, begin, null);
+ return token;
}
token = token.next;
int count = 0;
@@ -549,6 +551,11 @@ class Parser {
break;
} else {
token = listener.unexpected(token);
+ if (token.kind === EOF_TOKEN) {
+ // TODO(ahe): This is a hack, see parseTopLevelMember.
+ listener.endFields(1, start, token);
+ return token;
+ }
}
}
if (isField) {
@@ -995,7 +1002,10 @@ class Parser {
BeginGroupToken begin = token;
token = expect('(', token);
token = parseExpression(token);
- assert(begin.endGroup === token);
+ if (begin.endGroup !== token) {
+ listener.unexpected(token);
+ token = begin.endGroup;
+ }
listener.handleParenthesizedExpression(begin);
return expect(')', token);
}
@@ -1110,7 +1120,12 @@ class Parser {
named = true;
token = parseIdentifier(token.next);
}
- token = parseArguments(token);
+ if (optional('(', token)) {
+ token = parseArguments(token);
+ } else {
+ listener.handleNoArguments(token);
+ token = listener.unexpected(token);
+ }
listener.handleNewExpression(newKeyword, named);
return token;
}
« no previous file with comments | « dart/frog/leg/scanner/listener.dart ('k') | dart/frog/leg/tools/find_file_to_parse.sh » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698