| 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 '../../constants/values.dart' show ConstantValue, FunctionConstantValue; | 7 import '../../constants/values.dart' show ConstantValue, FunctionConstantValue; |
| 8 import '../../dart2jslib.dart' show Compiler; | 8 import '../../dart2jslib.dart' show Compiler; |
| 9 import '../../dart_types.dart' show DartType; | 9 import '../../dart_types.dart' show DartType; |
| 10 import '../../elements/elements.dart' show ClassElement, FunctionElement; | 10 import '../../elements/elements.dart' show ClassElement, FunctionElement; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 DEFERRED_LIBRARY_URIS, | 22 DEFERRED_LIBRARY_URIS, |
| 23 DEFERRED_LIBRARY_HASHES, | 23 DEFERRED_LIBRARY_HASHES, |
| 24 GET_TYPE_FROM_NAME, | 24 GET_TYPE_FROM_NAME, |
| 25 INITIALIZE_LOADED_HUNK, | 25 INITIALIZE_LOADED_HUNK, |
| 26 INTERCEPTORS_BY_TAG, | 26 INTERCEPTORS_BY_TAG, |
| 27 IS_HUNK_INITIALIZED, | 27 IS_HUNK_INITIALIZED, |
| 28 IS_HUNK_LOADED, | 28 IS_HUNK_LOADED, |
| 29 LEAF_TAGS, | 29 LEAF_TAGS, |
| 30 MANGLED_GLOBAL_NAMES, | 30 MANGLED_GLOBAL_NAMES, |
| 31 METADATA, | 31 METADATA, |
| 32 TYPE_TO_INTERCEPTOR_MAP; | 32 TYPE_TO_INTERCEPTOR_MAP, |
| 33 TYPES; |
| 33 | 34 |
| 34 import '../js_emitter.dart' show NativeGenerator, buildTearOffCode; | 35 import '../js_emitter.dart' show NativeGenerator, buildTearOffCode; |
| 35 import '../model.dart'; | 36 import '../model.dart'; |
| 36 | 37 |
| 37 | 38 |
| 38 class ModelEmitter { | 39 class ModelEmitter { |
| 39 final Compiler compiler; | 40 final Compiler compiler; |
| 40 final Namer namer; | 41 final Namer namer; |
| 41 ConstantEmitter constantEmitter; | 42 ConstantEmitter constantEmitter; |
| 42 final NativeEmitter nativeEmitter; | 43 final NativeEmitter nativeEmitter; |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 283 globals.add( | 284 globals.add( |
| 284 new js.Property(js.string(CREATE_NEW_ISOLATE), | 285 new js.Property(js.string(CREATE_NEW_ISOLATE), |
| 285 js.js('function () { return $isolateName; }'))); | 286 js.js('function () { return $isolateName; }'))); |
| 286 // TODO(floitsch): add remaining isolate functions. | 287 // TODO(floitsch): add remaining isolate functions. |
| 287 } | 288 } |
| 288 | 289 |
| 289 globals.add(emitMangledGlobalNames()); | 290 globals.add(emitMangledGlobalNames()); |
| 290 | 291 |
| 291 globals.add(emitGetTypeFromName()); | 292 globals.add(emitGetTypeFromName()); |
| 292 | 293 |
| 293 globals.add(emitMetadata(program)); | 294 globals.addAll(emitMetadata(program)); |
| 294 | 295 |
| 295 if (program.needsNativeSupport) { | 296 if (program.needsNativeSupport) { |
| 296 globals.add(new js.Property(js.string(INTERCEPTORS_BY_TAG), | 297 globals.add(new js.Property(js.string(INTERCEPTORS_BY_TAG), |
| 297 js.js('Object.create(null)', []))); | 298 js.js('Object.create(null)', []))); |
| 298 globals.add(new js.Property(js.string(LEAF_TAGS), | 299 globals.add(new js.Property(js.string(LEAF_TAGS), |
| 299 js.js('Object.create(null)', []))); | 300 js.js('Object.create(null)', []))); |
| 300 } | 301 } |
| 301 | 302 |
| 302 js.ObjectInitializer globalsObject = new js.ObjectInitializer(globals); | 303 js.ObjectInitializer globalsObject = new js.ObjectInitializer(globals); |
| 303 | 304 |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 394 } | 395 } |
| 395 | 396 |
| 396 js.Property emitGetTypeFromName() { | 397 js.Property emitGetTypeFromName() { |
| 397 js.Expression function = | 398 js.Expression function = |
| 398 js.js( """function(name) { | 399 js.js( """function(name) { |
| 399 return holdersMap[name][name].ensureResolved(); | 400 return holdersMap[name][name].ensureResolved(); |
| 400 }"""); | 401 }"""); |
| 401 return new js.Property(js.string(GET_TYPE_FROM_NAME), function); | 402 return new js.Property(js.string(GET_TYPE_FROM_NAME), function); |
| 402 } | 403 } |
| 403 | 404 |
| 404 js.Property emitMetadata(Program program) { | 405 List<js.Property> emitMetadata(Program program) { |
| 405 String metadataList = "[${program.metadata.join(",")}]"; | |
| 406 js.Expression metadata = | |
| 407 js.js.uncachedExpressionTemplate(metadataList).instantiate([]); | |
| 408 | 406 |
| 409 return new js.Property(js.string(METADATA), metadata); | 407 List<js.Property> metadataGlobals = <js.Property>[]; |
| 408 |
| 409 js.Property createGlobal(List<String> list, String global) { |
| 410 String listAsString = "[${list.join(",")}]"; |
| 411 js.Expression metadata = |
| 412 js.js.uncachedExpressionTemplate(listAsString).instantiate([]); |
| 413 return new js.Property(js.string(global), metadata); |
| 414 } |
| 415 |
| 416 metadataGlobals.add(createGlobal(program.metadata, METADATA)); |
| 417 metadataGlobals.add(createGlobal(program.metadataTypes, TYPES)); |
| 418 |
| 419 return metadataGlobals; |
| 410 } | 420 } |
| 411 | 421 |
| 412 js.Expression emitDeferredFragment(DeferredFragment fragment, | 422 js.Expression emitDeferredFragment(DeferredFragment fragment, |
| 413 List<Holder> holders) { | 423 List<Holder> holders) { |
| 414 // TODO(floitsch): initialize eager classes. | 424 // TODO(floitsch): initialize eager classes. |
| 415 // TODO(floitsch): the hash must depend on the output. | 425 // TODO(floitsch): the hash must depend on the output. |
| 416 int hash = fragment.hashCode; | 426 int hash = fragment.hashCode; |
| 417 | 427 |
| 418 List<js.Expression> deferredCode = | 428 List<js.Expression> deferredCode = |
| 419 fragment.libraries.map(emitLibrary).toList(); | 429 fragment.libraries.map(emitLibrary).toList(); |
| (...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1075 | 1085 |
| 1076 var end = Date.now(); | 1086 var end = Date.now(); |
| 1077 // print('Setup: ' + (end - start) + ' ms.'); | 1087 // print('Setup: ' + (end - start) + ' ms.'); |
| 1078 | 1088 |
| 1079 #invokeMain; // Start main. | 1089 #invokeMain; // Start main. |
| 1080 | 1090 |
| 1081 }(Date.now(), #code) | 1091 }(Date.now(), #code) |
| 1082 }"""; | 1092 }"""; |
| 1083 | 1093 |
| 1084 } | 1094 } |
| OLD | NEW |