Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(158)

Side by Side Diff: sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart

Issue 155983004: Fix DOM Isolate affinity for interceptors (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart2js.js_emitter; 5 part of dart2js.js_emitter;
6 6
7 /** 7 /**
8 * Generates the code for all used classes in the program. Static fields (even 8 * Generates the code for all used classes in the program. Static fields (even
9 * in classes) are ignored, since they can be treated as non-class elements. 9 * in classes) are ignored, since they can be treated as non-class elements.
10 * 10 *
(...skipping 956 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 Element appMain, 967 Element appMain,
968 Element isolateMain) { 968 Element isolateMain) {
969 String mainAccess = "${namer.isolateStaticClosureAccess(appMain)}"; 969 String mainAccess = "${namer.isolateStaticClosureAccess(appMain)}";
970 // Since we pass the closurized version of the main method to 970 // Since we pass the closurized version of the main method to
971 // the isolate method, we must make sure that it exists. 971 // the isolate method, we must make sure that it exists.
972 return "${namer.isolateAccess(isolateMain)}($mainAccess)"; 972 return "${namer.isolateAccess(isolateMain)}($mainAccess)";
973 } 973 }
974 974
975 jsAst.Expression generateDispatchPropertyInitialization() { 975 jsAst.Expression generateDispatchPropertyInitialization() {
976 return js('!#', js.fun([], [ 976 return js('!#', js.fun([], [
977 js('var objectProto = Object.prototype'), 977
978 // On V8, the 'intern' function converts a string to a symbol, which
979 // makes property access much faster.
980 new jsAst.FunctionDeclaration(new jsAst.VariableDeclaration('intern'),
981 js.fun(['s'], [
982 js('var o = {}'),
983 js('o[s] = 1'),
984 js.return_(js('Object.keys(convertToFastObject(o))[0]'))])),
985
986 // To ensure that different programs loaded into the same context (page)
987 // use distinct dispatch properies, we place an object on `Object` to
988 // contain the names already in use.
989 js('var tableProperty = "___dart_dispatch_property_names_"'),
990 js('var usedProperties = Object[tableProperty] ||'
991 '(Object[tableProperty] = Object.create(null))'),
992
993 js('var rootProperty = "${generateDispatchPropertyName()}"'),
978 js.for_('var i = 0', null, 'i++', [ 994 js.for_('var i = 0', null, 'i++', [
979 js('var property = "${generateDispatchPropertyName(0)}"'), 995 js('property = intern(rootProperty + "_" + i + "_")'),
980 js.if_('i > 0', js('property = rootProperty + "_" + i')), 996 js.if_('!(property in usedProperties)', [
981 js.if_('!(property in objectProto)', 997 js('usedProperties[property] = 1'),
982 js.return_( 998 js.return_(
983 js('init.dispatchPropertyName = property')))])])()); 999 js('init.dispatchPropertyName = property'))])])])());
984 } 1000 }
985 1001
986 String generateDispatchPropertyName(int seed) { 1002 String generateDispatchPropertyName() {
987 // TODO(sra): MD5 of contributing source code or URIs? 1003 // TODO(sra): MD5 of contributing source code or URIs?
988 return '___dart_dispatch_record_ZxYxX_${seed}_'; 1004 return '___dart_dispatch_record_ZxYxX_';
989 } 1005 }
990 1006
991 emitMain(CodeBuffer buffer) { 1007 emitMain(CodeBuffer buffer) {
992 if (compiler.isMockCompilation) return; 1008 if (compiler.isMockCompilation) return;
993 Element main = compiler.mainFunction; 1009 Element main = compiler.mainFunction;
994 String mainCall = null; 1010 String mainCall = null;
995 if (compiler.hasIsolateSupport()) { 1011 if (compiler.hasIsolateSupport()) {
996 Element isolateMain = 1012 Element isolateMain =
997 compiler.isolateHelperLibrary.find(Compiler.START_ROOT_ISOLATE); 1013 compiler.isolateHelperLibrary.find(Compiler.START_ROOT_ISOLATE);
998 mainCall = buildIsolateSetup(buffer, main, isolateMain); 1014 mainCall = buildIsolateSetup(buffer, main, isolateMain);
(...skipping 603 matching lines...) Expand 10 before | Expand all | Expand 10 after
1602 String sourceMap = buildSourceMap(mainBuffer, compiledFile); 1618 String sourceMap = buildSourceMap(mainBuffer, compiledFile);
1603 compiler.outputProvider(name, 'js.map') 1619 compiler.outputProvider(name, 'js.map')
1604 ..add(sourceMap) 1620 ..add(sourceMap)
1605 ..close(); 1621 ..close();
1606 } 1622 }
1607 1623
1608 void registerReadTypeVariable(TypeVariableElement element) { 1624 void registerReadTypeVariable(TypeVariableElement element) {
1609 readTypeVariables.add(element); 1625 readTypeVariables.add(element);
1610 } 1626 }
1611 } 1627 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698