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

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

Issue 869953002: dart2js: add type lookup in the new emitter. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
Index: pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
diff --git a/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
index bc403c94db99a893210367e0efcef738feea8107..3f20f4fce1352b3b80fc399a2a7389169cf1422f 100644
--- a/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/new_emitter/model_emitter.dart
@@ -16,7 +16,8 @@ import 'package:_internal/compiler/js_lib/shared/embedded_names.dart' show
DEFERRED_LIBRARY_HASHES,
INITIALIZE_LOADED_HUNK,
IS_HUNK_INITIALIZED,
- IS_HUNK_LOADED;
+ IS_HUNK_LOADED,
+ GET_TYPE_FROM_NAME;
import '../js_emitter.dart' show NativeGenerator;
import '../model.dart';
@@ -135,7 +136,8 @@ class ModelEmitter {
new js.ObjectInitializer(const []))).toList())),
js.js.statement('var holders = #', new js.ArrayInitializer(
holders.map((e) => new js.VariableUse(e.name))
- .toList(growable: false)))
+ .toList(growable: false))),
+ js.js.statement('var holdersMap = {}')
];
return new js.Block(statements);
}
@@ -155,6 +157,7 @@ class ModelEmitter {
globals.add(emitInitializeLoadedHunk());
}
+ globals.add(emitGetTypeFromName());
js.ObjectInitializer globalsObject = new js.ObjectInitializer(globals);
List<js.Statement> statements =
@@ -216,6 +219,15 @@ class ModelEmitter {
return new js.Property(js.string(INITIALIZE_LOADED_HUNK), function);
}
+ js.Property emitGetTypeFromName() {
+ js.Expression function =
+ js.js( """function(name) {
+ var holder = holders[holdersMap[name]];
+ return holder[name];
+ }""");
+ return new js.Property(js.string(GET_TYPE_FROM_NAME), function);
+ }
+
js.Expression emitDeferredFragment(DeferredFragment fragment,
List<Holder> holders) {
// TODO(floitsch): initialize eager classes.
@@ -415,6 +427,7 @@ class ModelEmitter {
var classes = library[1];
for (var i = 0; i < classes.length; i += 3) {
var holderIndex = classes[i + 1];
+ holdersMap[classes[i]] = holderIndex;
floitsch 2015/01/23 10:46:31 You can directly store the holder in the map. That
zarah 2015/01/23 12:22:18 Done.
setupClass(classes[i], holders[holderIndex], classes[i + 2]);
}
}

Powered by Google App Engine
This is Rietveld 408576698