Chromium Code Reviews| Index: pkg/compiler/lib/src/parser/parser.dart |
| diff --git a/pkg/compiler/lib/src/parser/parser.dart b/pkg/compiler/lib/src/parser/parser.dart |
| index f9998ca51bb520d10747852c4553d95d2b333574..0d451624440f7ffee3edece20754d424f33fcaa0 100644 |
| --- a/pkg/compiler/lib/src/parser/parser.dart |
| +++ b/pkg/compiler/lib/src/parser/parser.dart |
| @@ -112,7 +112,6 @@ class Parser { |
| int count = 0; |
| while (!identical(token.kind, EOF_TOKEN)) { |
| token = parseTopLevelDeclaration(token); |
| - listener.endTopLevelDeclaration(token); |
| count++; |
| } |
| listener.endCompilationUnit(count, token); |
| @@ -120,6 +119,12 @@ class Parser { |
| } |
| Token parseTopLevelDeclaration(Token token) { |
| + token = _parseTopLevelDeclaration(token); |
| + listener.endTopLevelDeclaration(token); |
|
Siggi Cherem (dart-lang)
2016/09/30 22:28:07
note: this moved down here because when we parse a
|
| + return token; |
| + } |
| + |
| + Token _parseTopLevelDeclaration(Token token) { |
| token = parseMetadataStar(token); |
| final String value = token.stringValue; |
| if ((identical(value, 'abstract') && optional('class', token.next)) || |
| @@ -1357,11 +1362,14 @@ class Parser { |
| Token parseMember(Token token) { |
| token = parseMetadataStar(token); |
| - if (isFactoryDeclaration(token)) { |
| - return parseFactoryMethod(token); |
| - } |
| Token start = token; |
| listener.beginMember(token); |
| + if (isFactoryDeclaration(token)) { |
| + token = parseFactoryMethod(token); |
| + listener.endMember(); |
| + assert (token != null); |
| + return token; |
| + } |
| Link<Token> identifiers = findMemberName(token); |
| if (identifiers.isEmpty) { |
| @@ -1427,15 +1435,18 @@ class Parser { |
| if (identical(token.kind, EOF_TOKEN)) { |
| // TODO(ahe): This is a hack, see parseTopLevelMember. |
| listener.endFields(1, start, token); |
| + listener.endMember(); |
| return token; |
| } |
| } |
| } |
| var modifiers = identifiers.reverse(); |
| - return isField |
| + token = isField |
| ? parseFields(start, modifiers, type, getOrSet, name, false) |
| : parseMethod(start, modifiers, type, getOrSet, name); |
| + listener.endMember(); |
| + return token; |
| } |
| Token parseMethod(Token start, Link<Token> modifiers, Token type, |