Index: sdk/lib/_internal/compiler/implementation/scanner/listener.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart |
index ad1a0e18174509e249ea1f762dedfb6a0305c21d..c668856a91b242efa1fb4f6b7207f1ab694b5f87 100644 |
--- a/sdk/lib/_internal/compiler/implementation/scanner/listener.dart |
+++ b/sdk/lib/_internal/compiler/implementation/scanner/listener.dart |
@@ -163,6 +163,18 @@ class Listener { |
void endFunctionTypeAlias(Token typedefKeyword, Token endToken) { |
} |
+ void beginMixinApplication(Token token) { |
+ } |
+ |
+ void endMixinApplication() { |
+ } |
+ |
+ void beginNamedMixinApplication(Token token) { |
+ } |
+ |
+ void endNamedMixinApplication(Token typedefKeyword, Token endToken) { |
+ } |
+ |
void beginHide(Token hideKeyword) { |
} |
@@ -175,6 +187,12 @@ class Listener { |
void endIdentifierList(int count) { |
} |
+ void beginTypeList(Token token) { |
+ } |
+ |
+ void endTypeList(int count) { |
+ } |
+ |
void beginIfStatement(Token token) { |
} |
@@ -702,6 +720,10 @@ class ElementListener extends Listener { |
pushNode(makeNodeList(count, null, null, ",")); |
} |
+ void endTypeList(int count) { |
+ pushNode(makeNodeList(count, null, null, ",")); |
+ } |
+ |
void endPart(Token partKeyword, Token semicolon) { |
StringNode uri = popLiteralString(); |
addLibraryTag(new Part(partKeyword, uri)); |
@@ -804,6 +826,24 @@ class ElementListener extends Listener { |
rejectBuiltInIdentifier(name); |
} |
+ void endNamedMixinApplication(Token typedefKeyword, Token endToken) { |
+ Node mixinApplication = popNode(); |
+ NodeList typeVariables = popNode(); |
+ Identifier name = popNode(); |
+ rejectBuiltInIdentifier(name); |
+ // TODO(kasperl): Push an element corresponding to the named mixin |
+ // application instead of rejecting this. |
+ recoverableError('unsupported mixin application in typedef', |
+ node: mixinApplication); |
+ } |
+ |
+ void endMixinApplication() { |
+ NodeList mixins = popNode(); |
+ TypeAnnotation superclass = popNode(); |
+ Modifiers modifiers = popNode(); |
+ pushNode(new MixinApplication(modifiers, superclass, mixins)); |
+ } |
+ |
void handleVoidKeyword(Token token) { |
pushNode(new TypeAnnotation(new Identifier(token), null)); |
} |
@@ -1170,6 +1210,14 @@ class NodeListener extends ElementListener { |
typedefKeyword, endToken)); |
} |
+ void endNamedMixinApplication(Token typedefKeyword, Token endToken) { |
+ Node mixinApplication = popNode(); |
+ NodeList typeParameters = popNode(); |
+ Identifier name = popNode(); |
+ pushNode(new NamedMixinApplication(name, typeParameters, mixinApplication, |
+ typedefKeyword, endToken)); |
+ } |
+ |
void endInterface(int supertypeCount, Token interfaceKeyword, |
Token extendsKeyword, Token endToken) { |
NodeList body = popNode(); |