Chromium Code Reviews| 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..a9bf4cb27ed9bd756e876d1131930a162785b4f5 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. |
|
ngeoffray
2012/01/10 07:49:45
Is that still a hack?
ahe
2012/01/10 08:02:28
Yes. Something is wrong here, but we don't know wh
ngeoffray
2012/01/10 08:07:09
So should you do the same line 555?
ahe
2012/01/10 08:32:33
Done.
|
| - 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,10 @@ class Parser { |
| break; |
| } else { |
| token = listener.unexpected(token); |
| + if (token.kind === EOF_TOKEN) { |
| + listener.endFields(1, start, token); |
| + return token; |
| + } |
| } |
| } |
| if (isField) { |
| @@ -995,7 +1001,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 +1119,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; |
| } |