Index: pkg/compiler/lib/src/elements/modelx.dart |
diff --git a/pkg/compiler/lib/src/elements/modelx.dart b/pkg/compiler/lib/src/elements/modelx.dart |
index d435f4aa9c96e0acd7784ba785f71ee035330c3b..03d4d34241959f025d2070695bfbabb691cdbf13 100644 |
--- a/pkg/compiler/lib/src/elements/modelx.dart |
+++ b/pkg/compiler/lib/src/elements/modelx.dart |
@@ -1973,6 +1973,9 @@ abstract class BaseClassElementX extends ElementX |
bool get isUnnamedMixinApplication => false; |
+ @override |
+ bool get isEnumClass => false; |
+ |
InterfaceType computeType(Compiler compiler) { |
if (thisTypeCache == null) { |
computeThisAndRawType(compiler, computeTypeParameters(compiler)); |
@@ -2355,8 +2358,6 @@ abstract class ClassElementX extends BaseClassElementX { |
ClassElementX(String name, Element enclosing, int id, int initialState) |
: super(name, enclosing, id, initialState); |
- ClassNode parseNode(Compiler compiler); |
- |
bool get isMixinApplication => false; |
bool get hasLocalScopeMembers => !localScope.isEmpty; |
@@ -2416,6 +2417,92 @@ abstract class ClassElementX extends BaseClassElementX { |
} |
} |
+class EnumClassElementX extends ClassElementX { |
+ final Enum node; |
+ |
+ EnumClassElementX(String name, Element enclosing, int id, this.node) |
+ : super(name, enclosing, id, STATE_NOT_STARTED); |
+ |
+ @override |
+ bool get hasNode => true; |
+ |
+ @override |
+ Token get position => node.name.token; |
+ |
+ @override |
+ bool get isEnumClass => true; |
+ |
+ @override |
+ Node parseNode(Compiler compiler) => node; |
+ |
+ @override |
+ accept(ElementVisitor visitor) => visitor.visitClassElement(this); |
floitsch
2014/11/10 16:08:32
Why don't we need visitor.visitEnumClass ?
Johnni Winther
2014/11/11 08:23:36
Because there is no EnumClassElement interface.
|
+ |
+ List<DartType> computeTypeParameters(Compiler compiler) => const <DartType>[]; |
+} |
+ |
+class EnumConstructorElementX extends ConstructorElementX { |
+ final FunctionExpression node; |
+ |
+ EnumConstructorElementX(EnumClassElementX enumClass, |
+ Modifiers modifiers, |
+ this.node) |
+ : super('', |
floitsch
2014/11/10 16:08:32
'', // Name.
Johnni Winther
2014/11/11 08:23:36
Done.
|
+ ElementKind.GENERATIVE_CONSTRUCTOR, |
+ modifiers, |
+ enumClass); |
+ |
+ @override |
+ bool get hasNode => true; |
+ |
+ @override |
+ FunctionExpression parseNode(Compiler compiler) => node; |
+} |
+ |
+class EnumMethodElementX extends FunctionElementX { |
+ final FunctionExpression node; |
+ |
+ EnumMethodElementX(String name, |
+ EnumClassElementX enumClass, |
+ Modifiers modifiers, |
+ this.node) |
+ : super(name, |
+ ElementKind.FUNCTION, |
+ modifiers, |
+ enumClass, |
+ false); |
+ |
+ @override |
+ bool get hasNode => true; |
+ |
+ @override |
+ FunctionExpression parseNode(Compiler compiler) => node; |
+} |
+ |
+class EnumFormalElementX extends InitializingFormalElementX { |
+ EnumFormalElementX(ConstructorElement constructor, |
+ VariableDefinitions variables, |
+ Identifier identifier, |
+ EnumFieldElementX fieldElement) |
+ : super(constructor, variables, identifier, null, fieldElement) { |
+ typeCache = fieldElement.type; |
+ } |
+} |
+ |
+class EnumFieldElementX extends FieldElementX { |
+ |
+ EnumFieldElementX(Identifier name, |
+ EnumClassElementX enumClass, |
+ VariableList variableList, |
+ Node definition, |
+ [Expression initializer]) |
+ : super(name, enumClass, variableList) { |
+ definitionsCache = new VariableDefinitions(null, |
+ variableList.modifiers, new NodeList.singleton(definition)); |
+ initializerCache = initializer; |
+ } |
+} |
+ |
class MixinApplicationElementX extends BaseClassElementX |
implements MixinApplicationElement { |
final Node node; |