Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(65)

Unified Diff: sdk/lib/_internal/compiler/implementation/scanner/listener.dart

Issue 11878043: Start adding support for mixin application syntax. We now parse the typedef variant of mixin applic… (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix broken language test. Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698