| Index: pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
|
| diff --git a/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
|
| index 2ae2ef64aea88664c0b6446d387c4e0679bf5224..efd5c07d78c96451125e6a526cf8785cf9d11afb 100644
|
| --- a/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
|
| +++ b/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
|
| @@ -17,6 +17,7 @@ import 'package:_internal/compiler/js_lib/shared/embedded_names.dart' show
|
| INITIALIZE_LOADED_HUNK,
|
| IS_HUNK_LOADED;
|
|
|
| +import '../js_emitter.dart' show NativeGenerator;
|
| import '../model.dart';
|
|
|
| class ModelEmitter {
|
| @@ -38,6 +39,11 @@ class ModelEmitter {
|
| constantEmitter =
|
| new ConstantEmitter(compiler, namer, makeConstantListTemplate);
|
|
|
| + js.Expression generateEmbeddedGlobalAccess(String global) {
|
| + // TODO(floitsch): We should not use "init" for globals.
|
| + return js.js("init.$global");
|
| + }
|
| +
|
| int emitProgram(Program program) {
|
| List<Output> outputs = program.outputs;
|
| MainOutput mainUnit = outputs.first;
|
| @@ -77,7 +83,21 @@ class ModelEmitter {
|
| List<js.Expression> elements = unit.libraries.map(emitLibrary).toList();
|
| elements.add(
|
| emitLazilyInitializedStatics(unit.staticLazilyInitializedFields));
|
| +
|
| + js.Statement nativeBoilerplate;
|
| + if (NativeGenerator.needsIsolateAffinityTagInitialization(backend)) {
|
| + nativeBoilerplate =
|
| + NativeGenerator.generateIsolateAffinityTagInitialization(
|
| + backend,
|
| + generateEmbeddedGlobalAccess,
|
| + // TODO(floitsch): convertToFastObject.
|
| + js.js("(function(x) { return x; })", []));
|
| + } else {
|
| + nativeBoilerplate = js.js.statement(";");
|
| + }
|
| +
|
| js.Expression code = new js.ArrayInitializer(elements);
|
| +
|
| return js.js.statement(
|
| boilerplate,
|
| {'deferredInitializer': emitDeferredInitializerGlobal(program.loadMap),
|
| @@ -88,6 +108,7 @@ class ModelEmitter {
|
| 'embeddedGlobals': emitEmbeddedGlobals(program.loadMap),
|
| 'constants': emitConstants(unit.constants),
|
| 'staticNonFinals': emitStaticNonFinalFields(unit.staticNonFinalFields),
|
| + 'nativeBoilerplate': nativeBoilerplate,
|
| 'eagerClasses': emitEagerClassInitializations(unit.libraries),
|
| 'main': unit.main,
|
| 'code': code});
|
| @@ -132,8 +153,6 @@ class ModelEmitter {
|
| globals.add(emitInitializeLoadedHunk());
|
| }
|
|
|
| - if (globals.isEmpty) return new js.Block.empty();
|
| -
|
| js.ObjectInitializer globalsObject = new js.ObjectInitializer(globals);
|
|
|
| List<js.Statement> statements =
|
| @@ -541,6 +560,9 @@ class ModelEmitter {
|
| // Initialize static non-final fields.
|
| #staticNonFinals;
|
|
|
| + // Add native boilerplate code.
|
| + #nativeBoilerplate;
|
| +
|
| // Initialize eager classes.
|
| #eagerClasses;
|
|
|
|
|