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

Side by Side Diff: pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart

Issue 915043002: dart2js: Track holders better when they are deferred. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 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
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.new_js_emitter.model_emitter; 5 library dart2js.new_js_emitter.model_emitter;
6 6
7 import '../../dart2jslib.dart' show Compiler; 7 import '../../dart2jslib.dart' show Compiler;
8 import '../../dart_types.dart' show DartType; 8 import '../../dart_types.dart' show DartType;
9 import '../../elements/elements.dart' show ClassElement; 9 import '../../elements/elements.dart' show ClassElement;
10 import '../../js/js.dart' as js; 10 import '../../js/js.dart' as js;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 int emitProgram(Program program) { 62 int emitProgram(Program program) {
63 List<Fragment> fragments = program.fragments; 63 List<Fragment> fragments = program.fragments;
64 MainFragment mainFragment = fragments.first; 64 MainFragment mainFragment = fragments.first;
65 65
66 int totalSize = 0; 66 int totalSize = 0;
67 67
68 // We have to emit the deferred fragments first, since we need their 68 // We have to emit the deferred fragments first, since we need their
69 // deferred hash (which depends on the output) when emitting the main 69 // deferred hash (which depends on the output) when emitting the main
70 // fragment. 70 // fragment.
71 fragments.skip(1).forEach((DeferredFragment deferredUnit) { 71 fragments.skip(1).forEach((DeferredFragment deferredUnit) {
72 js.Expression ast = 72 js.Expression ast = emitDeferredFragment(deferredUnit, program.holders);
73 emitDeferredFragment(deferredUnit, mainFragment.holders);
74 String code = js.prettyPrint(ast, compiler).getText(); 73 String code = js.prettyPrint(ast, compiler).getText();
75 totalSize += code.length; 74 totalSize += code.length;
76 compiler.outputProvider(deferredUnit.outputFileName, deferredExtension) 75 compiler.outputProvider(deferredUnit.outputFileName, deferredExtension)
77 ..add(code) 76 ..add(code)
78 ..close(); 77 ..close();
79 }); 78 });
80 79
81 js.Statement mainAst = emitMainFragment(program); 80 js.Statement mainAst = emitMainFragment(program);
82 String mainCode = js.prettyPrint(mainAst, compiler).getText(); 81 String mainCode = js.prettyPrint(mainAst, compiler).getText();
83 compiler.outputProvider(mainFragment.outputFileName, 'js') 82 compiler.outputProvider(mainFragment.outputFileName, 'js')
(...skipping 20 matching lines...) Expand all
104 js.Statement emitMainFragment(Program program) { 103 js.Statement emitMainFragment(Program program) {
105 MainFragment fragment = program.fragments.first; 104 MainFragment fragment = program.fragments.first;
106 List<js.Expression> elements = fragment.libraries.map(emitLibrary).toList(); 105 List<js.Expression> elements = fragment.libraries.map(emitLibrary).toList();
107 elements.add( 106 elements.add(
108 emitLazilyInitializedStatics(fragment.staticLazilyInitializedFields)); 107 emitLazilyInitializedStatics(fragment.staticLazilyInitializedFields));
109 108
110 js.Expression code = new js.ArrayInitializer(elements); 109 js.Expression code = new js.ArrayInitializer(elements);
111 110
112 Map<String, dynamic> holes = 111 Map<String, dynamic> holes =
113 {'deferredInitializer': emitDeferredInitializerGlobal(program.loadMap), 112 {'deferredInitializer': emitDeferredInitializerGlobal(program.loadMap),
114 'holders': emitHolders(fragment.holders), 113 'holders': emitHolders(program.holders),
115 'tearOff': buildTearOffCode(backend), 114 'tearOff': buildTearOffCode(backend),
116 'parseFunctionDescriptor': 115 'parseFunctionDescriptor':
117 js.js.statement(parseFunctionDescriptorBoilerplate), 116 js.js.statement(parseFunctionDescriptorBoilerplate),
118 'cyclicThrow': 117 'cyclicThrow':
119 backend.emitter.staticFunctionAccess(backend.getCyclicThrowHelper()), 118 backend.emitter.staticFunctionAccess(backend.getCyclicThrowHelper()),
120 'outputContainsConstantList': program.outputContainsConstantList, 119 'outputContainsConstantList': program.outputContainsConstantList,
121 'embeddedGlobals': emitEmbeddedGlobals(program), 120 'embeddedGlobals': emitEmbeddedGlobals(program),
122 'constants': emitConstants(fragment.constants), 121 'constants': emitConstants(fragment.constants),
123 'staticNonFinals': 122 'staticNonFinals':
124 emitStaticNonFinalFields(fragment.staticNonFinalFields), 123 emitStaticNonFinalFields(fragment.staticNonFinalFields),
125 'operatorIsPrefix': js.string(namer.operatorIsPrefix), 124 'operatorIsPrefix': js.string(namer.operatorIsPrefix),
126 'eagerClasses': emitEagerClassInitializations(fragment.libraries), 125 'eagerClasses': emitEagerClassInitializations(fragment.libraries),
127 'invokeMain': fragment.invokeMain, 126 'invokeMain': fragment.invokeMain,
128 'code': code}; 127 'code': code};
129 128
130 holes.addAll(nativeHoles(program)); 129 holes.addAll(nativeHoles(program));
131 130
132 return js.js.statement(boilerplate, holes); 131 return js.js.statement(boilerplate, holes);
133 } 132 }
134 133
(...skipping 843 matching lines...) Expand 10 before | Expand all | Expand 10 after
978 977
979 var end = Date.now(); 978 var end = Date.now();
980 // print('Setup: ' + (end - start) + ' ms.'); 979 // print('Setup: ' + (end - start) + ' ms.');
981 980
982 #invokeMain; // Start main. 981 #invokeMain; // Start main.
983 982
984 }(Date.now(), #code) 983 }(Date.now(), #code)
985 }"""; 984 }""";
986 985
987 } 986 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_emitter/model.dart ('k') | pkg/compiler/lib/src/js_emitter/program_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698