| Index: pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
|
| diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
|
| index 09e1d7ecfa5a284a5e1021071dd602c91bedcdcc..6c26430c853d5ad473e744a19cbb7609fd297c1e 100644
|
| --- a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
|
| +++ b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
|
| @@ -994,7 +994,8 @@ class OldEmitter implements Emitter {
|
| }
|
| }
|
|
|
| - void emitStaticNonFinalFieldInitializations(CodeBuffer buffer) {
|
| + void emitStaticNonFinalFieldInitializations(CodeBuffer buffer,
|
| + OutputUnit outputUnit) {
|
| JavaScriptConstantCompiler handler = backend.constants;
|
| Iterable<VariableElement> staticNonFinalFields =
|
| handler.getStaticNonFinalFieldsForEmission();
|
| @@ -1004,11 +1005,25 @@ class OldEmitter implements Emitter {
|
| // `mapTypeToInterceptor` is handled in [emitMapTypeToInterceptor].
|
| if (element == backend.mapTypeToInterceptor) continue;
|
| compiler.withCurrentElement(element, () {
|
| - ConstantValue initialValue = handler.getInitialValueFor(element).value;
|
| + jsAst.Expression initialValue;
|
| + if (outputUnit !=
|
| + compiler.deferredLoadTask.outputUnitForElement(element)) {
|
| + if (outputUnit == compiler.deferredLoadTask.mainOutputUnit) {
|
| + // In the main output-unit we output a stub initializer for deferred
|
| + // variables, such that `isolateProperties` stays a fast object.
|
| + initialValue = jsAst.number(0);
|
| + } else {
|
| + // Don't output stubs outside the main output file.
|
| + return;
|
| + }
|
| + } else {
|
| + initialValue = constantEmitter.referenceInInitializationContext(
|
| + handler.getInitialValueFor(element).value);
|
| +
|
| + }
|
| jsAst.Expression init =
|
| js('$isolateProperties.# = #',
|
| - [namer.getNameOfGlobalField(element),
|
| - constantEmitter.referenceInInitializationContext(initialValue)]);
|
| + [namer.getNameOfGlobalField(element), initialValue]);
|
| buffer.write(jsAst.prettyPrint(init, compiler,
|
| monitor: compiler.dumpInfoTask));
|
| buffer.write('$N');
|
| @@ -1670,7 +1685,7 @@ class OldEmitter implements Emitter {
|
|
|
| // Static field initializations require the classes and compile-time
|
| // constants to be set up.
|
| - emitStaticNonFinalFieldInitializations(mainBuffer);
|
| + emitStaticNonFinalFieldInitializations(mainBuffer, mainOutputUnit);
|
| interceptorEmitter.emitInterceptedNames(mainBuffer);
|
| interceptorEmitter.emitMapTypeToInterceptor(mainBuffer);
|
| emitLazilyInitializedStaticFields(mainBuffer);
|
| @@ -2112,6 +2127,7 @@ function(originalDescriptor, name, holder, isStatic, globalFunctionsAccess) {
|
| typeTestEmitter.emitRuntimeTypeSupport(outputBuffer, outputUnit);
|
|
|
| emitCompileTimeConstants(outputBuffer, outputUnit);
|
| + emitStaticNonFinalFieldInitializations(outputBuffer, outputUnit);
|
| outputBuffer.write('}$N');
|
|
|
| if (compiler.useContentSecurityPolicy) {
|
|
|