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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/full_emitter/emitter.dart

Issue 1508543003: Initialize the deferred global for every fragment. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « no previous file | pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart » ('j') | 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) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, 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 library dart2js.js_emitter.full_emitter; 5 library dart2js.js_emitter.full_emitter;
6 6
7 import 'dart:convert'; 7 import 'dart:convert';
8 import 'dart:collection' show HashMap; 8 import 'dart:collection' show HashMap;
9 9
10 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames; 10 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames;
(...skipping 1353 matching lines...) Expand 10 before | Expand all | Expand 10 after
1364 1364
1365 void assembleProgram(Program program) { 1365 void assembleProgram(Program program) {
1366 for (Fragment fragment in program.fragments) { 1366 for (Fragment fragment in program.fragments) {
1367 for (Library library in fragment.libraries) { 1367 for (Library library in fragment.libraries) {
1368 assembleLibrary(library, fragment); 1368 assembleLibrary(library, fragment);
1369 } 1369 }
1370 } 1370 }
1371 assembleTypedefs(program); 1371 assembleTypedefs(program);
1372 } 1372 }
1373 1373
1374 jsAst.Statement buildDeferredHeader() {
1375 /// For deferred loading we communicate the initializers via this global
1376 /// variable. The deferred hunks will add their initialization to this.
1377 /// The semicolon is important in minified mode, without it the
1378 /// following parenthesis looks like a call to the object literal.
1379 return js.statement('self.#deferredInitializers = '
1380 'self.#deferredInitializers || Object.create(null);',
1381 {'deferredInitializers': deferredInitializers});
1382 }
1383
1374 jsAst.Program buildOutputAstForMain(Program program, 1384 jsAst.Program buildOutputAstForMain(Program program,
1375 Map<OutputUnit, _DeferredOutputUnitHash> deferredLoadHashes) { 1385 Map<OutputUnit, _DeferredOutputUnitHash> deferredLoadHashes) {
1376 MainFragment mainFragment = program.mainFragment; 1386 MainFragment mainFragment = program.mainFragment;
1377 OutputUnit mainOutputUnit = mainFragment.outputUnit; 1387 OutputUnit mainOutputUnit = mainFragment.outputUnit;
1378 bool isProgramSplit = program.isSplit; 1388 bool isProgramSplit = program.isSplit;
1379 1389
1380 List<jsAst.Statement> statements = <jsAst.Statement>[]; 1390 List<jsAst.Statement> statements = <jsAst.Statement>[];
1381 1391
1382 statements..add(buildGeneratedBy()) 1392 statements..add(buildGeneratedBy())
1383 ..add(js.comment(HOOKS_API_USAGE)); 1393 ..add(js.comment(HOOKS_API_USAGE));
1384 1394
1385 if (isProgramSplit) { 1395 if (isProgramSplit) {
1386 /// For deferred loading we communicate the initializers via this global 1396 statements.add(buildDeferredHeader());
1387 /// variable. The deferred hunks will add their initialization to this.
1388 /// The semicolon is important in minified mode, without it the
1389 /// following parenthesis looks like a call to the object literal.
1390 statements.add(
1391 js.statement('self.#deferredInitializers = '
1392 'self.#deferredInitializers || Object.create(null);',
1393 {'deferredInitializers': deferredInitializers}));
1394 } 1397 }
1395 1398
1396 // Collect the AST for the decriptors 1399 // Collect the AST for the decriptors
1397 Map<Element, ClassBuilder> descriptors = elementDescriptors[mainFragment]; 1400 Map<Element, ClassBuilder> descriptors = elementDescriptors[mainFragment];
1398 if (descriptors == null) descriptors = const {}; 1401 if (descriptors == null) descriptors = const {};
1399 1402
1400 checkEverythingEmitted(descriptors.keys); 1403 checkEverythingEmitted(descriptors.keys);
1401 1404
1402 Iterable<LibraryElement> libraries = outputLibraryLists[mainOutputUnit]; 1405 Iterable<LibraryElement> libraries = outputLibraryLists[mainOutputUnit];
1403 if (libraries == null) libraries = <LibraryElement>[]; 1406 if (libraries == null) libraries = <LibraryElement>[];
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after
1992 '${namer.deferredTypesName});')); 1995 '${namer.deferredTypesName});'));
1993 1996
1994 body.add(buildCompileTimeConstants(fragment.constants, 1997 body.add(buildCompileTimeConstants(fragment.constants,
1995 isMainFragment: false)); 1998 isMainFragment: false));
1996 body.add(buildStaticNonFinalFieldInitializations(outputUnit)); 1999 body.add(buildStaticNonFinalFieldInitializations(outputUnit));
1997 2000
1998 List<jsAst.Statement> statements = <jsAst.Statement>[]; 2001 List<jsAst.Statement> statements = <jsAst.Statement>[];
1999 2002
2000 statements 2003 statements
2001 ..add(buildGeneratedBy()) 2004 ..add(buildGeneratedBy())
2005 ..add(buildDeferredHeader())
2002 ..add(js.statement('${deferredInitializers}.current = ' 2006 ..add(js.statement('${deferredInitializers}.current = '
2003 """function (#, ${namer.staticStateHolder}) { 2007 """function (#, ${namer.staticStateHolder}) {
2004 # 2008 #
2005 } 2009 }
2006 """, [globalsHolder, body])); 2010 """, [globalsHolder, body]));
2007 2011
2008 result[outputUnit] = new jsAst.Program(statements); 2012 result[outputUnit] = new jsAst.Program(statements);
2009 } 2013 }
2010 2014
2011 return result; 2015 return result;
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
2127 for (Element element in compiler.enqueuer.codegen.newlyEnqueuedElements) { 2131 for (Element element in compiler.enqueuer.codegen.newlyEnqueuedElements) {
2128 if (element.isInstanceMember) { 2132 if (element.isInstanceMember) {
2129 cachedClassBuilders.remove(element.enclosingClass); 2133 cachedClassBuilders.remove(element.enclosingClass);
2130 2134
2131 nativeEmitter.cachedBuilders.remove(element.enclosingClass); 2135 nativeEmitter.cachedBuilders.remove(element.enclosingClass);
2132 2136
2133 } 2137 }
2134 } 2138 }
2135 } 2139 }
2136 } 2140 }
OLDNEW
« no previous file with comments | « no previous file | pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698