| 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 1ad8c6382e785678ae8fd44d0fc99e78a38d705e..5121465f30116663caba3272165b82768ab0a4a3 100644
|
| --- a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
|
| +++ b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
|
| @@ -927,65 +927,6 @@ class OldEmitter implements Emitter {
|
| [backend.emitter.staticFunctionAccess(isolateMain), mainAccess]);
|
| }
|
|
|
| - /**
|
| - * Emits code that sets the `isolateTag embedded global to a unique string.
|
| - */
|
| - jsAst.Expression generateIsolateAffinityTagInitialization() {
|
| - jsAst.Expression getIsolateTagAccess =
|
| - generateEmbeddedGlobalAccess(embeddedNames.GET_ISOLATE_TAG);
|
| - jsAst.Expression isolateTagAccess =
|
| - generateEmbeddedGlobalAccess(embeddedNames.ISOLATE_TAG);
|
| -
|
| - return js('''
|
| - !function() {
|
| - // On V8, the 'intern' function converts a string to a symbol, which
|
| - // makes property access much faster.
|
| - function intern(s) {
|
| - var o = {};
|
| - o[s] = 1;
|
| - return Object.keys(convertToFastObject(o))[0];
|
| - }
|
| -
|
| - #getIsolateTag = function(name) {
|
| - return intern("___dart_" + name + #isolateTag);
|
| - };
|
| -
|
| - // To ensure that different programs loaded into the same context (page)
|
| - // use distinct dispatch properies, we place an object on `Object` to
|
| - // contain the names already in use.
|
| - var tableProperty = "___dart_isolate_tags_";
|
| - var usedProperties = Object[tableProperty] ||
|
| - (Object[tableProperty] = Object.create(null));
|
| -
|
| - var rootProperty = "_${generateIsolateTagRoot()}";
|
| - for (var i = 0; ; i++) {
|
| - var property = intern(rootProperty + "_" + i + "_");
|
| - if (!(property in usedProperties)) {
|
| - usedProperties[property] = 1;
|
| - #isolateTag = property;
|
| - break;
|
| - }
|
| - }
|
| - }()
|
| - ''',
|
| - {'getIsolateTag': getIsolateTagAccess, 'isolateTag': isolateTagAccess});
|
| - }
|
| -
|
| - jsAst.Expression generateDispatchPropertyNameInitialization() {
|
| - jsAst.Expression dispatchPropertyNameAccess =
|
| - generateEmbeddedGlobalAccess(embeddedNames.DISPATCH_PROPERTY_NAME);
|
| - jsAst.Expression getIsolateTagAccess =
|
| - generateEmbeddedGlobalAccess(embeddedNames.GET_ISOLATE_TAG);
|
| - return js('# = #("dispatch_record")',
|
| - [dispatchPropertyNameAccess,
|
| - getIsolateTagAccess]);
|
| - }
|
| -
|
| - String generateIsolateTagRoot() {
|
| - // TODO(sra): MD5 of contributing source code or URIs?
|
| - return 'ZxYxX';
|
| - }
|
| -
|
| emitMain(CodeBuffer buffer) {
|
| if (compiler.isMockCompilation) return;
|
| Element main = compiler.mainFunction;
|
| @@ -1002,16 +943,20 @@ class OldEmitter implements Emitter {
|
| mainCallClosure = backend.emitter.staticFunctionAccess(main);
|
| }
|
|
|
| + NativeGenerator nativeGenerator =
|
| + new NativeGenerator(generateEmbeddedGlobalAccess);
|
| if (backend.needToInitializeIsolateAffinityTag) {
|
| buffer.write(
|
| - jsAst.prettyPrint(generateIsolateAffinityTagInitialization(),
|
| - compiler, monitor: compiler.dumpInfoTask));
|
| + jsAst.prettyPrint(
|
| + nativeGenerator.generateIsolateAffinityTagInitialization(),
|
| + compiler, monitor: compiler.dumpInfoTask));
|
| buffer.write(N);
|
| }
|
| if (backend.needToInitializeDispatchProperty) {
|
| assert(backend.needToInitializeIsolateAffinityTag);
|
| buffer.write(
|
| - jsAst.prettyPrint(generateDispatchPropertyNameInitialization(),
|
| + jsAst.prettyPrint(
|
| + nativeGenerator.generateDispatchPropertyNameInitialization(),
|
| compiler, monitor: compiler.dumpInfoTask));
|
| buffer.write(N);
|
| }
|
|
|