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

Unified Diff: pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart

Issue 705023003: Avoid resetting collectors when calling finnishClasses from deferred. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add missing semicolon Created 6 years, 1 month 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 | sdk/lib/_internal/compiler/js_lib/shared/embedded_names.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/old_emitter/emitter.dart
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
index 42d40bf0caecf8c76646c1abfc15aba764412e20..47f021caeb68ad5ca69c4e16152832d5a0ae1165 100644
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
@@ -303,8 +303,8 @@ class OldEmitter implements Emitter {
}
/** Needs defineClass to be defined. */
- List buildInheritFrom() {
- return [js(r'''
+ jsAst.Expression buildInheritFrom() {
+ return js(r'''
var inheritFrom = function() {
function tmp() {}
var hasOwnProperty = Object.prototype.hasOwnProperty;
@@ -322,7 +322,32 @@ class OldEmitter implements Emitter {
return object;
};
}()
- ''')];
+ ''');
+ }
+
+ /// Code that needs to be run before first invocation of
+ /// [finishClassesFunction], but should only be run once.
+ jsAst.Expression get initFinishClasses {
+ jsAst.Expression allClassesAccess =
+ generateEmbeddedGlobalAccess(embeddedNames.ALL_CLASSES);
+ jsAst.Expression interceptorsByTagAccess =
+ generateEmbeddedGlobalAccess(embeddedNames.INTERCEPTORS_BY_TAG);
+ jsAst.Expression leafTagsAccess =
+ generateEmbeddedGlobalAccess(embeddedNames.LEAF_TAGS);
+ jsAst.Expression finishedClassesAccess =
+ generateEmbeddedGlobalAccess(embeddedNames.FINISHED_CLASSES);
+
+ return js('''
+ (function(){
+ # = Object.create(null); // embedded allClasses.
+ # = Object.create(null); // embedded interceptorsByTag.
+ # = Object.create(null); // embedded leafTags.
+ # = Object.create(null); // embedded finishedClasses
+ })()
+ ''', [allClassesAccess,
+ interceptorsByTagAccess,
+ leafTagsAccess,
+ finishedClassesAccess]);
}
List buildSplitOffAliases() {
@@ -362,16 +387,14 @@ class OldEmitter implements Emitter {
generateEmbeddedGlobalAccess(embeddedNames.ALL_CLASSES);
jsAst.Expression metadataAccess =
generateEmbeddedGlobalAccess(embeddedNames.METADATA);
- jsAst.Expression interceptorsByTagAccess =
- generateEmbeddedGlobalAccess(embeddedNames.INTERCEPTORS_BY_TAG);
- jsAst.Expression leafTagsAccess =
- generateEmbeddedGlobalAccess(embeddedNames.LEAF_TAGS);
+ jsAst.Expression finishedClassesAccess =
+ generateEmbeddedGlobalAccess(embeddedNames.FINISHED_CLASSES);
return js('''
function(collectedClasses, isolateProperties, existingIsolateProperties) {
var pendingClasses = Object.create(null);
- if (!#) # = Object.create(null); // embedded allClasses.
var allClasses = #; // embedded allClasses;
+ var constructors;
if (#) // DEBUG_FAST_OBJECTS
print("Number of classes: " +
@@ -380,7 +403,7 @@ class OldEmitter implements Emitter {
var hasOwnProperty = Object.prototype.hasOwnProperty;
if (typeof dart_precompiled == "function") {
- var constructors = dart_precompiled(collectedClasses);
+ constructors = dart_precompiled(collectedClasses);
} else {
var combinedConstructorFunction =
"function \$reflectable(fn){fn.$reflectableField=1;return fn};\\n"+
@@ -475,9 +498,7 @@ class OldEmitter implements Emitter {
constructors = null;
- var finishedClasses = Object.create(null);
- # = Object.create(null); // embedded interceptorsByTag.
- # = Object.create(null); // embedded leafTags.
+ var finishedClasses = #; // embedded finishedClasses
#; // buildFinishClass(),
@@ -485,15 +506,13 @@ class OldEmitter implements Emitter {
for (var cls in pendingClasses) finishClass(cls);
}''', [
- allClassesAccess, allClassesAccess,
allClassesAccess,
DEBUG_FAST_OBJECTS,
backend.hasRetainedMetadata,
metadataAccess,
needsMixinSupport,
backend.isTreeShakingDisabled,
- interceptorsByTagAccess,
- leafTagsAccess,
+ finishedClassesAccess,
buildFinishClass(),
nsmEmitter.buildTrivialNsmHandlers()]);
}
@@ -695,11 +714,10 @@ class OldEmitter implements Emitter {
List buildDefineClassAndFinishClassFunctionsIfNecessary() {
if (!needsDefineClass) return [];
return defineClassFunction
- ..addAll(buildInheritFrom())
+ ..add(buildInheritFrom())
..addAll(buildSplitOffAliases())
- ..addAll([
- js('$finishClassesName = #', finishClassesFunction)
- ]);
+ ..add(js('$finishClassesName = #', finishClassesFunction))
+ ..add(initFinishClasses);
}
List buildLazyInitializerFunctionIfNecessary() {
« no previous file with comments | « no previous file | sdk/lib/_internal/compiler/js_lib/shared/embedded_names.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698