| 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.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 '../../js/js.dart' as js; | 8 import '../../js/js.dart' as js; |
| 9 import '../../js_backend/js_backend.dart' show | 9 import '../../js_backend/js_backend.dart' show |
| 10 JavaScriptBackend, | 10 JavaScriptBackend, |
| 11 Namer, | 11 Namer, |
| 12 ConstantEmitter; | 12 ConstantEmitter; |
| 13 | 13 |
| 14 import 'package:_internal/compiler/js_lib/shared/embedded_names.dart' show | 14 import 'package:_internal/compiler/js_lib/shared/embedded_names.dart' show |
| 15 DEFERRED_LIBRARY_URIS, | 15 DEFERRED_LIBRARY_URIS, |
| 16 DEFERRED_LIBRARY_HASHES, | 16 DEFERRED_LIBRARY_HASHES, |
| 17 GET_TYPE_FROM_NAME, | 17 GET_TYPE_FROM_NAME, |
| 18 INITIALIZE_LOADED_HUNK, | 18 INITIALIZE_LOADED_HUNK, |
| 19 IS_HUNK_INITIALIZED, | 19 IS_HUNK_INITIALIZED, |
| 20 IS_HUNK_LOADED, | 20 IS_HUNK_LOADED, |
| 21 MANGLED_GLOBAL_NAMES, | 21 MANGLED_GLOBAL_NAMES, |
| 22 METADATA, |
| 22 TYPE_TO_INTERCEPTOR_MAP; | 23 TYPE_TO_INTERCEPTOR_MAP; |
| 23 | 24 |
| 24 import '../js_emitter.dart' show NativeGenerator; | 25 import '../js_emitter.dart' show NativeGenerator; |
| 25 import '../model.dart'; | 26 import '../model.dart'; |
| 26 | 27 |
| 27 class ModelEmitter { | 28 class ModelEmitter { |
| 28 final Compiler compiler; | 29 final Compiler compiler; |
| 29 final Namer namer; | 30 final Namer namer; |
| 30 final ConstantEmitter constantEmitter; | 31 final ConstantEmitter constantEmitter; |
| 31 | 32 |
| (...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 if (program.typeToInterceptorMap != null) { | 165 if (program.typeToInterceptorMap != null) { |
| 165 globals.add(new js.Property(js.string(TYPE_TO_INTERCEPTOR_MAP), | 166 globals.add(new js.Property(js.string(TYPE_TO_INTERCEPTOR_MAP), |
| 166 program.typeToInterceptorMap)); | 167 program.typeToInterceptorMap)); |
| 167 } | 168 } |
| 168 | 169 |
| 169 globals.add(new js.Property(js.string(MANGLED_GLOBAL_NAMES), | 170 globals.add(new js.Property(js.string(MANGLED_GLOBAL_NAMES), |
| 170 js.js('Object.create(null)', []))); | 171 js.js('Object.create(null)', []))); |
| 171 | 172 |
| 172 globals.add(emitGetTypeFromName()); | 173 globals.add(emitGetTypeFromName()); |
| 173 | 174 |
| 175 globals.add(emitMetadata(program)); |
| 176 |
| 174 js.ObjectInitializer globalsObject = new js.ObjectInitializer(globals); | 177 js.ObjectInitializer globalsObject = new js.ObjectInitializer(globals); |
| 175 | 178 |
| 176 List<js.Statement> statements = | 179 List<js.Statement> statements = |
| 177 [new js.ExpressionStatement( | 180 [new js.ExpressionStatement( |
| 178 new js.VariableDeclarationList( | 181 new js.VariableDeclarationList( |
| 179 [new js.VariableInitialization( | 182 [new js.VariableInitialization( |
| 180 new js.VariableDeclaration("init", allowRename: false), | 183 new js.VariableDeclaration("init", allowRename: false), |
| 181 globalsObject)]))]; | 184 globalsObject)]))]; |
| 182 return new js.Block(statements); | 185 return new js.Block(statements); |
| 183 } | 186 } |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 233 } | 236 } |
| 234 | 237 |
| 235 js.Property emitGetTypeFromName() { | 238 js.Property emitGetTypeFromName() { |
| 236 js.Expression function = | 239 js.Expression function = |
| 237 js.js( """function(name) { | 240 js.js( """function(name) { |
| 238 return holdersMap[name][name].ensureResolved(); | 241 return holdersMap[name][name].ensureResolved(); |
| 239 }"""); | 242 }"""); |
| 240 return new js.Property(js.string(GET_TYPE_FROM_NAME), function); | 243 return new js.Property(js.string(GET_TYPE_FROM_NAME), function); |
| 241 } | 244 } |
| 242 | 245 |
| 246 js.Property emitMetadata(Program program) { |
| 247 String metadataList = "[${program.metadata.join(",")}]"; |
| 248 js.Expression metadata = |
| 249 js.js.uncachedExpressionTemplate(metadataList).instantiate([]); |
| 250 |
| 251 return new js.Property(js.string(METADATA), metadata); |
| 252 } |
| 253 |
| 243 js.Expression emitDeferredFragment(DeferredFragment fragment, | 254 js.Expression emitDeferredFragment(DeferredFragment fragment, |
| 244 List<Holder> holders) { | 255 List<Holder> holders) { |
| 245 // TODO(floitsch): initialize eager classes. | 256 // TODO(floitsch): initialize eager classes. |
| 246 // TODO(floitsch): the hash must depend on the output. | 257 // TODO(floitsch): the hash must depend on the output. |
| 247 int hash = this.hashCode; | 258 int hash = this.hashCode; |
| 248 if (fragment.constants.isNotEmpty) { | 259 if (fragment.constants.isNotEmpty) { |
| 249 throw new UnimplementedError("constants in deferred units"); | 260 throw new UnimplementedError("constants in deferred units"); |
| 250 } | 261 } |
| 251 js.ArrayInitializer content = | 262 js.ArrayInitializer content = |
| 252 new js.ArrayInitializer(fragment.libraries.map(emitLibrary) | 263 new js.ArrayInitializer(fragment.libraries.map(emitLibrary) |
| (...skipping 338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 591 | 602 |
| 592 var end = Date.now(); | 603 var end = Date.now(); |
| 593 print('Setup: ' + (end - start) + ' ms.'); | 604 print('Setup: ' + (end - start) + ' ms.'); |
| 594 | 605 |
| 595 #main(); // Start main. | 606 #main(); // Start main. |
| 596 | 607 |
| 597 }(Date.now(), #code) | 608 }(Date.now(), #code) |
| 598 }"""; | 609 }"""; |
| 599 | 610 |
| 600 } | 611 } |
| OLD | NEW |