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

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

Issue 981143003: dart2js: split out types from metadata. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 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 '../../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
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
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698