Chromium Code Reviews| 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; |