| Index: dart/sdk/lib/_internal/compiler/implementation/js_emitter/class_emitter.dart
|
| diff --git a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/class_emitter.dart b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/class_emitter.dart
|
| index eabc1d1a8c61e0dd1631522a4459587d5d0f773a..9d9a89b3d2d6f10006559f594d83367db75f683e 100644
|
| --- a/dart/sdk/lib/_internal/compiler/implementation/js_emitter/class_emitter.dart
|
| +++ b/dart/sdk/lib/_internal/compiler/implementation/js_emitter/class_emitter.dart
|
| @@ -108,7 +108,6 @@ class ClassEmitter extends CodeEmitterHelper {
|
| throw new SpannableAssertionFailure(
|
| element, 'Must be a ClassElement or a LibraryElement');
|
| }
|
| - StringBuffer buffer = new StringBuffer();
|
| if (emitStatics) {
|
| assert(invariant(element, superName == null, message: superName));
|
| } else {
|
| @@ -116,16 +115,13 @@ class ClassEmitter extends CodeEmitterHelper {
|
| String nativeName =
|
| namer.getPrimitiveInterceptorRuntimeName(element);
|
| if (nativeName != null) {
|
| - buffer.write('$nativeName/');
|
| + builder.nativeName = nativeName;
|
| }
|
| - buffer.write('$superName;');
|
| + builder.superName = superName;
|
| }
|
| - int bufferClassLength = buffer.length;
|
| -
|
| - String separator = '';
|
| -
|
| var fieldMetadata = [];
|
| bool hasMetadata = false;
|
| + bool fieldsAdded = false;
|
|
|
| if (!onlyForRti) {
|
| visitFields(element, emitStatics,
|
| @@ -142,8 +138,6 @@ class ClassEmitter extends CodeEmitterHelper {
|
| // constructors, so we don't need the fields unless we are generating
|
| // accessors at runtime.
|
| if (!classIsNative || needsAccessor) {
|
| - buffer.write(separator);
|
| - separator = ',';
|
| var metadata = task.metadataEmitter.buildMetadataFunction(field);
|
| if (metadata != null) {
|
| hasMetadata = true;
|
| @@ -152,16 +146,17 @@ class ClassEmitter extends CodeEmitterHelper {
|
| }
|
| fieldMetadata.add(metadata);
|
| recordMangledField(field, accessorName, field.name);
|
| + String fieldName = name;
|
| + String fieldCode = '';
|
| + String reflectionMarker = '';
|
| if (!needsAccessor) {
|
| // Emit field for constructor generation.
|
| assert(!classIsNative);
|
| - buffer.write(name);
|
| } else {
|
| // Emit (possibly renaming) field name so we can add accessors at
|
| // runtime.
|
| - buffer.write(accessorName);
|
| if (name != accessorName) {
|
| - buffer.write(':$name');
|
| + fieldName = '$accessorName:$name';
|
| }
|
|
|
| int getterCode = 0;
|
| @@ -208,28 +203,25 @@ class ClassEmitter extends CodeEmitterHelper {
|
| compiler.reportInternalError(
|
| field, 'Internal error: code is 0 ($element/$field)');
|
| } else {
|
| - buffer.write(FIELD_CODE_CHARACTERS[code - FIRST_FIELD_CODE]);
|
| + fieldCode = FIELD_CODE_CHARACTERS[code - FIRST_FIELD_CODE];
|
| }
|
| }
|
| if (backend.isAccessibleByReflection(field)) {
|
| - buffer.write('-');
|
| + reflectionMarker = '-';
|
| if (backend.isNeededForReflection(field)) {
|
| DartType type = field.computeType(compiler);
|
| - buffer.write('${task.metadataEmitter.reifyType(type)}');
|
| + reflectionMarker = '-${task.metadataEmitter.reifyType(type)}';
|
| }
|
| }
|
| + builder.addField('$fieldName$fieldCode$reflectionMarker');
|
| + fieldsAdded = true;
|
| }
|
| });
|
| }
|
|
|
| - bool fieldsAdded = buffer.length > bufferClassLength;
|
| - String compactClassData = buffer.toString();
|
| - jsAst.Expression classDataNode = js.string(compactClassData);
|
| if (hasMetadata) {
|
| - fieldMetadata.insert(0, classDataNode);
|
| - classDataNode = new jsAst.ArrayInitializer.from(fieldMetadata);
|
| + builder.fieldMetadata = fieldMetadata;
|
| }
|
| - builder.addProperty('', classDataNode);
|
| return fieldsAdded;
|
| }
|
|
|
| @@ -321,7 +313,7 @@ class ClassEmitter extends CodeEmitterHelper {
|
| List<jsAst.Property> statics = new List<jsAst.Property>();
|
| ClassBuilder staticsBuilder = new ClassBuilder();
|
| if (emitFields(classElement, staticsBuilder, null, emitStatics: true)) {
|
| - statics.add(staticsBuilder.properties.single);
|
| + statics.add(staticsBuilder.toObjectInitializer().properties.single);
|
| }
|
|
|
| Map<String, ClassBuilder> classPropertyLists =
|
|
|