Index: dart/sdk/lib/_internal/compiler/implementation/js_emitter/class_builder.dart |
diff --git a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/class_builder.dart b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/class_builder.dart |
index 86befd2da9ef2c986677c3d5a8fe9fcc469d8aa7..2d18f4c07d3d7ebd9de3ad983163df9a20cd757c 100644 |
--- a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/class_builder.dart |
+++ b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/class_builder.dart |
@@ -11,6 +11,12 @@ class ClassBuilder { |
// TODO (sigurdm) this is just a bag of properties, rename this class |
final List<jsAst.Property> properties = <jsAst.Property>[]; |
+ final List<String> fields = <String>[]; |
+ |
+ String superName; |
+ String nativeName; |
+ String functionType; |
+ List<jsAst.Node> fieldMetadata; |
/// Set to true by user if class is indistinguishable from its superclass. |
bool isTrivial = false; |
@@ -20,8 +26,32 @@ class ClassBuilder { |
properties.add(new jsAst.Property(js.string(name), value)); |
} |
- jsAst.Expression toObjectInitializer() { |
- return new jsAst.ObjectInitializer(properties, isOneLiner: false); |
+ void addField(String field) { |
+ fields.add(field); |
+ } |
+ |
+ jsAst.ObjectInitializer toObjectInitializer() { |
+ StringBuffer buffer = new StringBuffer(); |
+ if (superName != null) { |
+ if (nativeName != null) { |
+ buffer.write('$nativeName/'); |
+ } |
+ buffer.write('$superName'); |
+ if (functionType != null) { |
+ buffer.write(':$functionType'); |
+ } |
+ buffer.write(';'); |
+ } |
+ buffer.writeAll(fields, ','); |
+ var classData = js.string('$buffer'); |
+ if (fieldMetadata != null) { |
+ classData = |
+ new jsAst.ArrayInitializer.from([classData]..addAll(fieldMetadata)); |
+ } |
+ var fieldsAndProperties = |
+ [new jsAst.Property(js.string(''), classData)] |
+ ..addAll(properties); |
+ return new jsAst.ObjectInitializer(fieldsAndProperties, isOneLiner: false); |
} |
} |