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

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: Indent 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
« no previous file with comments | « no previous file | pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 a2b1c62fac1067953f7190305ed5066e56196c76..763acd96436f22d46d3554a08a5b3460a4645e53 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
@@ -14,6 +14,7 @@ import '../../js_backend/js_backend.dart' show
import 'package:_internal/compiler/js_lib/shared/embedded_names.dart' show
DEFERRED_LIBRARY_URIS,
DEFERRED_LIBRARY_HASHES,
+ GET_TYPE_FROM_NAME,
INITIALIZE_LOADED_HUNK,
IS_HUNK_INITIALIZED,
IS_HUNK_LOADED;
@@ -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 = Object.create(null)')
];
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,14 @@ class ModelEmitter {
return new js.Property(js.string(INITIALIZE_LOADED_HUNK), function);
}
+ js.Property emitGetTypeFromName() {
+ js.Expression function =
+ js.js( """function(name) {
+ return holdersMap[name][name].ensureResolved();
+ }""");
+ return new js.Property(js.string(GET_TYPE_FROM_NAME), function);
+ }
+
js.Expression emitDeferredFragment(DeferredFragment fragment,
List<Holder> holders) {
// TODO(floitsch): initialize eager classes.
@@ -406,6 +417,7 @@ class ModelEmitter {
var classes = library[1];
for (var i = 0; i < classes.length; i += 3) {
var holderIndex = classes[i + 1];
+ holdersMap[classes[i]] = holders[holderIndex];
setupClass(classes[i], holders[holderIndex], classes[i + 2]);
}
}
« no previous file with comments | « no previous file | pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698