| Index: sdk/lib/_internal/compiler/implementation/tree/nodes.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/tree/nodes.dart b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
|
| index f317de421ba7ba235e56aca40c6f24128de0a400..5df2b1485df8bc8fc51bd7d7a30afb79bc8a0bc7 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/tree/nodes.dart
|
| @@ -48,8 +48,10 @@ abstract class Visitor<R> {
|
| R visitLiteralString(LiteralString node) => visitStringNode(node);
|
| R visitStringJuxtaposition(StringJuxtaposition node) => visitStringNode(node);
|
| R visitLoop(Loop node) => visitStatement(node);
|
| + R visitMixinApplication(MixinApplication node) => visitNode(node);
|
| R visitModifiers(Modifiers node) => visitNode(node);
|
| R visitNamedArgument(NamedArgument node) => visitExpression(node);
|
| + R visitNamedMixinApplication(NamedMixinApplication node) => visitNode(node);
|
| R visitNewExpression(NewExpression node) => visitExpression(node);
|
| R visitNodeList(NodeList node) => visitNode(node);
|
| R visitOperator(Operator node) => visitIdentifier(node);
|
| @@ -144,7 +146,7 @@ abstract class Node extends TreeElementMixin implements Spannable {
|
| ContinueStatement asContinueStatement() => null;
|
| DoWhile asDoWhile() => null;
|
| EmptyStatement asEmptyStatement() => null;
|
| - Export AsExport() => null;
|
| + Export asExport() => null;
|
| Expression asExpression() => null;
|
| ExpressionStatement asExpressionStatement() => null;
|
| For asFor() => null;
|
| @@ -153,10 +155,10 @@ abstract class Node extends TreeElementMixin implements Spannable {
|
| FunctionExpression asFunctionExpression() => null;
|
| Identifier asIdentifier() => null;
|
| If asIf() => null;
|
| - Import AsImport() => null;
|
| + Import asImport() => null;
|
| Label asLabel() => null;
|
| LabeledStatement asLabeledStatement() => null;
|
| - LibraryName AsLibraryName() => null;
|
| + LibraryName asLibraryName() => null;
|
| LiteralBool asLiteralBool() => null;
|
| LiteralDouble asLiteralDouble() => null;
|
| LiteralInt asLiteralInt() => null;
|
| @@ -165,13 +167,14 @@ abstract class Node extends TreeElementMixin implements Spannable {
|
| LiteralMapEntry asLiteralMapEntry() => null;
|
| LiteralNull asLiteralNull() => null;
|
| LiteralString asLiteralString() => null;
|
| + MixinApplication asMixinApplication() => null;
|
| Modifiers asModifiers() => null;
|
| NamedArgument asNamedArgument() => null;
|
| NodeList asNodeList() => null;
|
| Operator asOperator() => null;
|
| ParenthesizedExpression asParenthesizedExpression() => null;
|
| - Part AsPart() => null;
|
| - PartOf AsPartOf() => null;
|
| + Part asPart() => null;
|
| + PartOf asPartOf() => null;
|
| Return asReturn() => null;
|
| ScriptTag asScriptTag() => null;
|
| Send asSend() => null;
|
| @@ -235,6 +238,54 @@ class ClassNode extends Node {
|
| Token getEndToken() => endToken;
|
| }
|
|
|
| +class MixinApplication extends Node {
|
| + final Modifiers modifiers;
|
| + final TypeAnnotation superclass;
|
| + final NodeList mixins;
|
| +
|
| + MixinApplication(this.modifiers, this.superclass, this.mixins);
|
| +
|
| + MixinApplication asMixinApplication() => this;
|
| +
|
| + accept(Visitor visitor) => visitor.visitMixinApplication(this);
|
| +
|
| + visitChildren(Visitor visitor) {
|
| + if (modifiers != null) modifiers.accept(visitor);
|
| + if (superclass != null) superclass.accept(visitor);
|
| + if (mixins != null) mixins.accept(visitor);
|
| + }
|
| +
|
| + Token getBeginToken() => superclass.getBeginToken();
|
| + Token getEndToken() => mixins.getEndToken();
|
| +}
|
| +
|
| +// TODO(kasperl): Let this share some structure with the typedef for function
|
| +// type aliases?
|
| +class NamedMixinApplication extends Node {
|
| + final Identifier name;
|
| + final NodeList typeParameters;
|
| + final MixinApplication mixinApplication;
|
| +
|
| + final Token typedefKeyword;
|
| + final Token endToken;
|
| +
|
| + NamedMixinApplication(this.name, this.typeParameters, this.mixinApplication,
|
| + this.typedefKeyword, this.endToken);
|
| +
|
| + NamedMixinApplication asNamedMixinApplication() => this;
|
| +
|
| + accept(Visitor visitor) => visitor.visitNamedMixinApplication(this);
|
| +
|
| + visitChildren(Visitor visitor) {
|
| + name.accept(visitor);
|
| + if (typeParameters != null) typeParameters.accept(visitor);
|
| + mixinApplication.accept(visitor);
|
| + }
|
| +
|
| + Token getBeginToken() => typedefKeyword;
|
| + Token getEndToken() => endToken;
|
| +}
|
| +
|
| abstract class Expression extends Node {
|
| Expression();
|
|
|
|
|