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 5f5cb45276ce4a99418abcf27b9f105d1c9476f4..a4417c15bf4b9560dde3322ced292561dc799c02 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 |
@@ -20,19 +20,20 @@ class ClassEmitter extends CodeEmitterHelper { |
emitter.needsClassSupport = true; |
ClassElement superclass = classElement.superclass; |
- String superName = ""; |
+ jsAst.Name superName; |
if (superclass != null) { |
superName = namer.className(superclass); |
} |
if (cls.isMixinApplication) { |
MixinApplication mixinApplication = cls; |
- String mixinName = mixinApplication.mixinClass.name; |
- superName = '$superName+$mixinName'; |
+ jsAst.Name mixinName = mixinApplication.mixinClass.name; |
+ superName = |
+ new CompoundName([superName, Namer.literalPlus, mixinName]); |
emitter.needsMixinSupport = true; |
} |
- ClassBuilder builder = new ClassBuilder(classElement, namer); |
+ ClassBuilder builder = new ClassBuilder.forClass(classElement, namer); |
builder.superName = superName; |
emitConstructorsForCSP(cls); |
emitFields(cls, builder); |
@@ -48,7 +49,7 @@ class ClassEmitter extends CodeEmitterHelper { |
// We add a special getter here to allow for tearing off a closure from |
// itself. |
jsAst.Fun function = js('function() { return this; }'); |
- String name = namer.getterForMember(Selector.CALL_NAME); |
+ jsAst.Name name = namer.getterForMember(Selector.CALL_NAME); |
builder.addProperty(name, function); |
} |
@@ -72,7 +73,7 @@ class ClassEmitter extends CodeEmitterHelper { |
jsAst.Expression constructorAst = |
_stubGenerator.generateClassConstructor(classElement, fieldNames); |
- String constructorName = namer.className(classElement); |
+ jsAst.Name constructorName = namer.className(classElement); |
OutputUnit outputUnit = |
compiler.deferredLoadTask.outputUnitForElement(classElement); |
emitter.assemblePrecompiledConstructor( |
@@ -105,8 +106,8 @@ class ClassEmitter extends CodeEmitterHelper { |
for (Field field in fields) { |
FieldElement fieldElement = field.element; |
- String name = field.name; |
- String accessorName = field.accessorName; |
+ jsAst.Name name = field.name; |
+ jsAst.Name accessorName = field.accessorName; |
bool needsGetter = field.needsGetter; |
bool needsSetter = field.needsUncheckedSetter; |
@@ -132,15 +133,15 @@ class ClassEmitter extends CodeEmitterHelper { |
if (!needsAccessor) { |
// Emit field for constructor generation. |
assert(!classIsNative); |
- fieldNameParts.add(js.stringPart(name)); |
+ fieldNameParts.add(name); |
} else { |
// Emit (possibly renaming) field name so we can add accessors at |
// runtime. |
if (name != accessorName) { |
- fieldNameParts.add(js.stringPart(accessorName)); |
+ fieldNameParts.add(accessorName); |
fieldNameParts.add(js.stringPart(':')); |
} |
- fieldNameParts.add(js.stringPart(name)); |
+ fieldNameParts.add(name); |
if (field.needsInterceptedGetter) { |
emitter.interceptorEmitter.interceptorInvocationNames.add( |
namer.getterForElement(fieldElement)); |
@@ -275,7 +276,7 @@ class ClassEmitter extends CodeEmitterHelper { |
void emitNativeInfo(Class cls, ClassBuilder builder) { |
if (cls.nativeInfo != null) { |
- builder.addProperty(namer.nativeSpecProperty, js.string(cls.nativeInfo)); |
+ builder.addPropertyByName(namer.nativeSpecProperty, cls.nativeInfo); |
} |
} |
@@ -284,11 +285,11 @@ class ClassEmitter extends CodeEmitterHelper { |
ClassBuilder enclosingBuilder, |
Fragment fragment) { |
ClassElement classElement = cls.element; |
- String className = cls.name; |
+ jsAst.Name className = cls.name; |
var metadata = task.metadataCollector.buildMetadataFunction(classElement); |
if (metadata != null) { |
- classBuilder.addProperty("@", metadata); |
+ classBuilder.addPropertyByName("@", metadata); |
} |
if (backend.isAccessibleByReflection(classElement)) { |
@@ -300,13 +301,14 @@ class ClassEmitter extends CodeEmitterHelper { |
bool hasSuper = superclass != null; |
if ((!typeVariableProperties.isEmpty && !hasSuper) || |
(hasSuper && !equalElements(superclass.typeVariables, typeVars))) { |
- classBuilder.addProperty('<>', |
+ classBuilder.addPropertyByName('<>', |
new jsAst.ArrayInitializer(typeVariableProperties.toList())); |
} |
} |
List<jsAst.Property> statics = new List<jsAst.Property>(); |
- ClassBuilder staticsBuilder = new ClassBuilder(classElement, namer); |
+ ClassBuilder staticsBuilder = |
+ new ClassBuilder.forStatics(classElement, namer); |
if (emitFields(cls, staticsBuilder, emitStatics: true)) { |
jsAst.ObjectInitializer initializer = |
staticsBuilder.toObjectInitializer(); |
@@ -325,7 +327,8 @@ class ClassEmitter extends CodeEmitterHelper { |
} |
if (!statics.isEmpty) { |
- classBuilder.addProperty('static', new jsAst.ObjectInitializer(statics)); |
+ classBuilder.addPropertyByName('static', |
+ new jsAst.ObjectInitializer(statics)); |
} |
// TODO(ahe): This method (generateClass) should return a jsAst.Expression. |
@@ -337,7 +340,8 @@ class ClassEmitter extends CodeEmitterHelper { |
String reflectionName = emitter.getReflectionName(classElement, className); |
if (reflectionName != null) { |
if (!backend.isAccessibleByReflection(classElement)) { |
- enclosingBuilder.addProperty("+$reflectionName", js.number(0)); |
+ // TODO(herhut): Fix use of reflection name here. |
+ enclosingBuilder.addPropertyByName("+$reflectionName", js.number(0)); |
} else { |
List<jsAst.Expression> types = <jsAst.Expression>[]; |
if (classElement.supertype != null) { |
@@ -346,7 +350,8 @@ class ClassEmitter extends CodeEmitterHelper { |
for (DartType interface in classElement.interfaces) { |
types.add(task.metadataCollector.reifyType(interface)); |
} |
- enclosingBuilder.addProperty("+$reflectionName", |
+ // TODO(herhut): Fix use of reflection name here. |
+ enclosingBuilder.addPropertyByName("+$reflectionName", |
new jsAst.ArrayInitializer(types)); |
} |
} |
@@ -410,8 +415,8 @@ class ClassEmitter extends CodeEmitterHelper { |
if ((isInstantiated && !holder.isNative) |
|| needsGetter |
|| needsSetter) { |
- String accessorName = namer.fieldAccessorName(field); |
- String fieldName = namer.fieldPropertyName(field); |
+ jsAst.Name accessorName = namer.fieldAccessorName(field); |
+ jsAst.Name fieldName = namer.fieldPropertyName(field); |
bool needsCheckedSetter = false; |
if (compiler.enableTypeAssertions |
&& needsSetter |
@@ -450,13 +455,13 @@ class ClassEmitter extends CodeEmitterHelper { |
} |
void recordMangledField(Element member, |
- String accessorName, |
+ jsAst.Name accessorName, |
String memberName) { |
if (!backend.shouldRetainGetter(member)) return; |
String previousName; |
if (member.isInstanceMember) { |
previousName = emitter.mangledFieldNames.putIfAbsent( |
- '${namer.getterPrefix}$accessorName', |
+ namer.deriveGetterName(accessorName), |
() => memberName); |
} else { |
previousName = emitter.mangledGlobalFieldNames.putIfAbsent( |
@@ -501,26 +506,27 @@ class ClassEmitter extends CodeEmitterHelper { |
} |
void generateCheckedSetter(Element member, |
- String fieldName, |
- String accessorName, |
+ jsAst.Name fieldName, |
+ jsAst.Name accessorName, |
ClassBuilder builder) { |
jsAst.Expression code = backend.generatedCode[member]; |
assert(code != null); |
- String setterName = namer.deriveSetterName(accessorName); |
+ jsAst.Name setterName = namer.deriveSetterName(accessorName); |
compiler.dumpInfoTask.registerElementAst(member, |
builder.addProperty(setterName, code)); |
generateReflectionDataForFieldGetterOrSetter( |
member, setterName, builder, isGetter: false); |
} |
- void emitGetterForCSP(Element member, String fieldName, String accessorName, |
+ void emitGetterForCSP(Element member, jsAst.Name fieldName, |
+ jsAst.Name accessorName, |
ClassBuilder builder) { |
jsAst.Expression function = |
_stubGenerator.generateGetter(member, fieldName); |
- String getterName = namer.deriveGetterName(accessorName); |
+ jsAst.Name getterName = namer.deriveGetterName(accessorName); |
ClassElement cls = member.enclosingClass; |
- String className = namer.className(cls); |
+ jsAst.Name className = namer.className(cls); |
OutputUnit outputUnit = |
compiler.deferredLoadTask.outputUnitForElement(member); |
emitter.cspPrecompiledFunctionFor(outputUnit).add( |
@@ -532,14 +538,15 @@ class ClassEmitter extends CodeEmitterHelper { |
} |
} |
- void emitSetterForCSP(Element member, String fieldName, String accessorName, |
+ void emitSetterForCSP(Element member, jsAst.Name fieldName, |
+ jsAst.Name accessorName, |
ClassBuilder builder) { |
jsAst.Expression function = |
_stubGenerator.generateSetter(member, fieldName); |
- String setterName = namer.deriveSetterName(accessorName); |
+ jsAst.Name setterName = namer.deriveSetterName(accessorName); |
ClassElement cls = member.enclosingClass; |
- String className = namer.className(cls); |
+ jsAst.Name className = namer.className(cls); |
OutputUnit outputUnit = |
compiler.deferredLoadTask.outputUnitForElement(member); |
emitter.cspPrecompiledFunctionFor(outputUnit).add( |
@@ -552,7 +559,7 @@ class ClassEmitter extends CodeEmitterHelper { |
} |
void generateReflectionDataForFieldGetterOrSetter(Element member, |
- String name, |
+ jsAst.Name name, |
ClassBuilder builder, |
{bool isGetter}) { |
Selector selector = isGetter |
@@ -562,7 +569,7 @@ class ClassEmitter extends CodeEmitterHelper { |
if (reflectionName != null) { |
var reflectable = |
js(backend.isAccessibleByReflection(member) ? '1' : '0'); |
- builder.addProperty('+$reflectionName', reflectable); |
+ builder.addPropertyByName('+$reflectionName', reflectable); |
} |
} |
} |