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

Unified Diff: pkg/compiler/lib/src/elements/modelx.dart

Issue 707463003: Support enums in dart2js. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 1 month 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: 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;

Powered by Google App Engine
This is Rietveld 408576698