Chromium Code Reviews| Index: pkg/compiler/lib/src/js_backend/native_emitter.dart |
| diff --git a/pkg/compiler/lib/src/js_backend/native_emitter.dart b/pkg/compiler/lib/src/js_backend/native_emitter.dart |
| index 60f11553430e71639cbfa93dd9780a1d1020a973..2d25b240b2fe5160cfe068b7e42c3c84f614e381 100644 |
| --- a/pkg/compiler/lib/src/js_backend/native_emitter.dart |
| +++ b/pkg/compiler/lib/src/js_backend/native_emitter.dart |
| @@ -232,10 +232,24 @@ class NativeEmitter { |
| for (ClassElement classElement in classes) { |
| if (!classElement.isNative) continue; |
| if (neededClasses.contains(classElement)) { |
| + ClassBuilder builder = builders[classElement]; |
| + // In CSP mode [emitClassConstructor] and [emitClassGettersSetters] have |
|
floitsch
2015/01/15 15:14:40
nit: newline before.
zarah
2015/01/16 08:48:50
Done.
|
| + // a side-effect on "precompiled" functions in [OldEmitter]. For this |
| + // reason, it is important that we don't call these methods before we |
| + // are certain that a class is needed. |
| + |
| + // [emitClassConstructor] only affects the generation of constructors |
| + // in CSP mode. |
| + emitterTask.oldEmitter.classEmitter.emitClassConstructor( |
| + classElement, builder); |
| + // [emitClassGettersSetters] does not affect whether or not a class is |
|
floitsch
2015/01/15 15:14:40
nit: newline before.
zarah
2015/01/16 08:48:50
Done.
|
| + // needed. If getters/setters are emitted, the class has fields and |
| + // is therefore non-trivial. |
| + emitterTask.oldEmitter.classEmitter.emitClassGettersSetters( |
| + classElement, builder); |
| // Define interceptor class for [classElement]. |
| emitterTask.oldEmitter.classEmitter.emitClassBuilderWithReflectionData( |
| - backend.namer.getNameOfClass(classElement), |
| - classElement, builders[classElement], |
| + backend.namer.getNameOfClass(classElement), classElement, builder, |
| emitterTask.oldEmitter.getElementDescriptor(classElement)); |
| emitterTask.oldEmitter.needsClassSupport = true; |
| } |
| @@ -301,13 +315,10 @@ class NativeEmitter { |
| } |
| builder.superName = superName; |
| - emitterTask.oldEmitter.classEmitter.emitClassConstructor( |
| - classElement, builder); |
| bool hasFields = emitterTask.oldEmitter.classEmitter.emitFields( |
| classElement, builder, classIsNative: true); |
| int propertyCount = builder.properties.length; |
| - emitterTask.oldEmitter.classEmitter.emitClassGettersSetters( |
| - classElement, builder); |
| + |
| emitterTask.oldEmitter.classEmitter.emitInstanceMembers( |
| classElement, builder); |
| emitterTask.oldEmitter.typeTestEmitter.emitIsTests(classElement, builder); |