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, |