OLD | NEW |
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.lazy_emitter.model_emitter; | 5 library dart2js.js_emitter.lazy_emitter.model_emitter; |
6 | 6 |
7 import 'package:js_runtime/shared/embedded_names.dart' | 7 import 'package:js_runtime/shared/embedded_names.dart' |
8 show | 8 show |
9 CREATE_NEW_ISOLATE, | 9 CREATE_NEW_ISOLATE, |
10 DEFERRED_LIBRARY_URIS, | 10 DEFERRED_LIBRARY_URIS, |
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
142 int emitProgram(Program program) { | 142 int emitProgram(Program program) { |
143 List<Fragment> fragments = program.fragments; | 143 List<Fragment> fragments = program.fragments; |
144 MainFragment mainFragment = fragments.first; | 144 MainFragment mainFragment = fragments.first; |
145 Iterable<Fragment> deferredFragments = program.deferredFragments; | 145 Iterable<Fragment> deferredFragments = program.deferredFragments; |
146 | 146 |
147 int totalSize = 0; | 147 int totalSize = 0; |
148 | 148 |
149 // We have to emit the deferred fragments first, since we need their | 149 // We have to emit the deferred fragments first, since we need their |
150 // deferred hash (which depends on the output) when emitting the main | 150 // deferred hash (which depends on the output) when emitting the main |
151 // fragment. | 151 // fragment. |
152 List<js.Expression> fragmentsCode = | 152 List<js.Expression> fragmentsCode = deferredFragments.map((deferredUnit) { |
153 deferredFragments.map((DeferredFragment deferredUnit) { | |
154 js.Expression types = | 153 js.Expression types = |
155 program.metadataTypesForOutputUnit(deferredUnit.outputUnit); | 154 program.metadataTypesForOutputUnit(deferredUnit.outputUnit); |
156 return emitDeferredFragment(types, deferredUnit, program.holders); | 155 return emitDeferredFragment(types, deferredUnit, program.holders); |
157 }).toList(); | 156 }).toList(); |
158 | 157 |
159 js.Statement mainAst = emitMainFragment(program); | 158 js.Statement mainAst = emitMainFragment(program); |
160 | 159 |
161 js.TokenCounter counter = new js.TokenCounter(); | 160 js.TokenCounter counter = new js.TokenCounter(); |
162 fragmentsCode.forEach(counter.countTokens); | 161 fragmentsCode.forEach(counter.countTokens); |
163 counter.countTokens(mainAst); | 162 counter.countTokens(mainAst); |
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
393 return js.js.statement(""" | 392 return js.js.statement(""" |
394 if (typeof($deferredInitializersGlobal) === 'undefined') | 393 if (typeof($deferredInitializersGlobal) === 'undefined') |
395 var $deferredInitializersGlobal = Object.create(null);"""); | 394 var $deferredInitializersGlobal = Object.create(null);"""); |
396 } | 395 } |
397 | 396 |
398 Iterable<js.Property> emitEmbeddedGlobalsForDeferredLoading( | 397 Iterable<js.Property> emitEmbeddedGlobalsForDeferredLoading( |
399 Map<String, List<Fragment>> loadMap) { | 398 Map<String, List<Fragment>> loadMap) { |
400 List<js.Property> globals = <js.Property>[]; | 399 List<js.Property> globals = <js.Property>[]; |
401 | 400 |
402 js.ArrayInitializer fragmentUris(List<Fragment> fragments) { | 401 js.ArrayInitializer fragmentUris(List<Fragment> fragments) { |
403 return js.stringArray(fragments.map((DeferredFragment fragment) => | 402 return js.stringArray(fragments |
404 "${fragment.outputFileName}.$deferredExtension")); | 403 .map((fragment) => "${fragment.outputFileName}.$deferredExtension")); |
405 } | 404 } |
406 | 405 |
407 js.ArrayInitializer fragmentHashes(List<Fragment> fragments) { | 406 js.ArrayInitializer fragmentHashes(List<Fragment> fragments) { |
408 // TODO(floitsch): the hash must depend on the generated code. | 407 // TODO(floitsch): the hash must depend on the generated code. |
409 return js.numArray( | 408 return js.numArray(fragments.map((fragment) => fragment.hashCode)); |
410 fragments.map((DeferredFragment fragment) => fragment.hashCode)); | |
411 } | 409 } |
412 | 410 |
413 List<js.Property> uris = new List<js.Property>(loadMap.length); | 411 List<js.Property> uris = new List<js.Property>(loadMap.length); |
414 List<js.Property> hashes = new List<js.Property>(loadMap.length); | 412 List<js.Property> hashes = new List<js.Property>(loadMap.length); |
415 int count = 0; | 413 int count = 0; |
416 loadMap.forEach((String loadId, List<Fragment> fragmentList) { | 414 loadMap.forEach((String loadId, List<Fragment> fragmentList) { |
417 uris[count] = | 415 uris[count] = |
418 new js.Property(js.string(loadId), fragmentUris(fragmentList)); | 416 new js.Property(js.string(loadId), fragmentUris(fragmentList)); |
419 hashes[count] = | 417 hashes[count] = |
420 new js.Property(js.string(loadId), fragmentHashes(fragmentList)); | 418 new js.Property(js.string(loadId), fragmentHashes(fragmentList)); |
(...skipping 869 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1290 #eagerClasses; | 1288 #eagerClasses; |
1291 | 1289 |
1292 var end = Date.now(); | 1290 var end = Date.now(); |
1293 // print('Setup: ' + (end - start) + ' ms.'); | 1291 // print('Setup: ' + (end - start) + ' ms.'); |
1294 | 1292 |
1295 #invokeMain; // Start main. | 1293 #invokeMain; // Start main. |
1296 | 1294 |
1297 })(Date.now(), #code) | 1295 })(Date.now(), #code) |
1298 }"""; | 1296 }"""; |
1299 } | 1297 } |
OLD | NEW |