Index: pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart |
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart |
index b95c6648237f4dec3b222c5f58edcb91b61aca8a..b567868bd4a5b1fcdde7e2e3bdf73386ec282757 100644 |
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart |
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/class_emitter.dart |
@@ -128,19 +128,19 @@ class ClassEmitter extends CodeEmitterHelper { |
fieldMetadata.add(metadata); |
recordMangledField(fieldElement, accessorName, |
namer.privateName(fieldElement.memberName)); |
- String fieldName = name; |
- String fieldCode = ''; |
- String reflectionMarker = ''; |
+ List<jsAst.Literal> fieldNameParts = <jsAst.Literal>[]; |
if (!needsAccessor) { |
// Emit field for constructor generation. |
assert(!classIsNative); |
+ fieldNameParts.add(js.stringPart(name)); |
} else { |
// Emit (possibly renaming) field name so we can add accessors at |
// runtime. |
if (name != accessorName) { |
- fieldName = '$accessorName:$name'; |
+ fieldNameParts.add(js.stringPart(accessorName)); |
+ fieldNameParts.add(js.stringPart(':')); |
} |
- |
+ fieldNameParts.add(js.stringPart(name)); |
if (field.needsInterceptedGetter) { |
emitter.interceptorEmitter.interceptorInvocationNames.add( |
namer.getterForElement(fieldElement)); |
@@ -157,9 +157,9 @@ class ClassEmitter extends CodeEmitterHelper { |
if (code == 0) { |
compiler.internalError(fieldElement, |
'Field code is 0 ($fieldElement).'); |
- } else { |
- fieldCode = FIELD_CODE_CHARACTERS[code - FIRST_FIELD_CODE]; |
} |
+ fieldNameParts.add( |
+ js.stringPart(FIELD_CODE_CHARACTERS[code - FIRST_FIELD_CODE])); |
} |
// Fields can only be reflected if their declaring class is reflectable |
// (as they are only accessible via [ClassMirror.declarations]). |
@@ -167,19 +167,17 @@ class ClassEmitter extends CodeEmitterHelper { |
// reflectable in some sense, which leads to [isAccessibleByReflection] |
// reporting `true`. |
if (backend.isAccessibleByReflection(fieldElement)) { |
+ fieldNameParts.add(new jsAst.LiteralString('-')); |
if (fieldElement.isTopLevel || |
backend.isAccessibleByReflection(fieldElement.enclosingClass)) { |
DartType type = fieldElement.type; |
- reflectionMarker = '-${task.metadataCollector.reifyType(type)}'; |
- } else { |
- reflectionMarker = '-'; |
+ fieldNameParts.add(task.metadataCollector.reifyType(type)); |
} |
} |
- String builtFieldname = '$fieldName$fieldCode$reflectionMarker'; |
- builder.addField(builtFieldname); |
+ jsAst.Literal fieldNameAst = js.concatenateStrings(fieldNameParts); |
+ builder.addField(fieldNameAst); |
// Add 1 because adding a field to the class also requires a comma |
- compiler.dumpInfoTask.recordFieldNameSize(fieldElement, |
- builtFieldname.length + 1); |
+ compiler.dumpInfoTask.registerElementAst(fieldElement, fieldNameAst); |
fieldsAdded = true; |
} |
} |
@@ -267,7 +265,7 @@ class ClassEmitter extends CodeEmitterHelper { |
void emitRuntimeTypeInformation(Class cls, ClassBuilder builder) { |
assert(builder.functionType == null); |
if (cls.functionTypeIndex != null) { |
- builder.functionType = '${cls.functionTypeIndex}'; |
+ builder.functionType = cls.functionTypeIndex; |
} |
for (Method method in cls.isChecks) { |
@@ -296,7 +294,7 @@ class ClassEmitter extends CodeEmitterHelper { |
if (backend.isAccessibleByReflection(classElement)) { |
List<DartType> typeVars = classElement.typeVariables; |
Iterable typeVariableProperties = emitter.typeVariableHandler |
- .typeVariablesOf(classElement).map(js.number); |
+ .typeVariablesOf(classElement); |
ClassElement superclass = classElement.superclass; |
bool hasSuper = superclass != null; |
@@ -331,7 +329,8 @@ class ClassEmitter extends CodeEmitterHelper { |
} |
// TODO(ahe): This method (generateClass) should return a jsAst.Expression. |
- jsAst.ObjectInitializer propertyValue = classBuilder.toObjectInitializer(); |
+ jsAst.ObjectInitializer propertyValue = |
+ classBuilder.toObjectInitializer(); |
compiler.dumpInfoTask.registerElementAst(classBuilder.element, propertyValue); |
enclosingBuilder.addProperty(className, propertyValue); |
@@ -340,14 +339,15 @@ class ClassEmitter extends CodeEmitterHelper { |
if (!backend.isAccessibleByReflection(classElement)) { |
enclosingBuilder.addProperty("+$reflectionName", js.number(0)); |
} else { |
- List<int> types = <int>[]; |
+ List<jsAst.Expression> types = <jsAst.Expression>[]; |
if (classElement.supertype != null) { |
types.add(task.metadataCollector.reifyType(classElement.supertype)); |
} |
for (DartType interface in classElement.interfaces) { |
types.add(task.metadataCollector.reifyType(interface)); |
} |
- enclosingBuilder.addProperty("+$reflectionName", js.numArray(types)); |
+ enclosingBuilder.addProperty("+$reflectionName", |
+ new jsAst.ArrayInitializer(types)); |
} |
} |
} |