Chromium Code Reviews| Index: dart/lib/compiler/implementation/scanner/parser.dart |
| diff --git a/dart/lib/compiler/implementation/scanner/parser.dart b/dart/lib/compiler/implementation/scanner/parser.dart |
| index e18389ea55cd06a2b9e9a77b59edeb7a0b393c4b..5068ee6eeeb005b4725bc57f64631ef6aa4a0edc 100644 |
| --- a/dart/lib/compiler/implementation/scanner/parser.dart |
| +++ b/dart/lib/compiler/implementation/scanner/parser.dart |
| @@ -83,6 +83,15 @@ class Parser { |
| } |
| } |
| + Token parseFormalParametersOpt(Token token) { |
| + if (optional('(', token)) { |
| + return parseFormalParameters(token); |
| + } else { |
| + listener.handleNoFormalParameters(token); |
| + return token; |
| + } |
| + } |
| + |
| Token parseFormalParameters(Token token) { |
| Token begin = token; |
| listener.beginFormalParameters(begin); |
| @@ -363,7 +372,7 @@ class Parser { |
| // Loop to allow the listener to rewrite the token stream for |
| // error handling. |
| final String value = token.stringValue; |
| - if (value === '(') { |
| + if (value === '(' || value === '{' || value === '=>') { |
| isField = false; |
| break; |
| } else if ((value === '=') || (value === ';') || (value === ',')) { |
| @@ -390,7 +399,7 @@ class Parser { |
| expectSemicolon(token); |
| listener.endTopLevelFields(fieldCount, start, token); |
| } else { |
| - token = parseFormalParameters(token); |
| + token = parseFormalParametersOpt(token); |
| token = parseFunctionBody(token, false); |
| listener.endTopLevelMethod(start, getOrSet, token); |
| } |
| @@ -603,7 +612,8 @@ class Parser { |
| // Loop to allow the listener to rewrite the token stream for |
| // error handling. |
| final String value = token.stringValue; |
| - if ((value === '(') || (value === '.')) { |
| + if ((value === '(') || (value === '.') || (value === '{') || |
|
kasperl
2012/08/20 12:55:31
So here all the === comparisons are wrapped in ()
ahe
2012/08/20 13:26:17
Done.
|
| + (value === '=>')) { |
| isField = false; |
| break; |
| } else if ((value === '=') || (value === ';') || (value === ',')) { |
| @@ -634,7 +644,7 @@ class Parser { |
| listener.endFields(fieldCount, start, token); |
| } else { |
| token = parseQualifiedRestOpt(token); |
| - token = parseFormalParameters(token); |
| + token = parseFormalParametersOpt(token); |
| token = parseInitializersOpt(token); |
| token = parseFunctionBody(token, false); |
| listener.endMethod(getOrSet, start, token); |
| @@ -696,7 +706,7 @@ class Parser { |
| } |
| token = parseQualifiedRestOpt(token); |
| listener.endFunctionName(token); |
| - token = parseFormalParameters(token); |
| + token = parseFormalParametersOpt(token); |
| token = parseInitializersOpt(token); |
| token = parseFunctionBody(token, false); |
| listener.endFunction(getOrSet, token); |