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

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

Issue 938413002: Work around Safari for-in bug. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Address Florian's comments. Created 5 years, 10 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: dart/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
diff --git a/dart/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart b/dart/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
index a575e1ccf67f0a35e3a00bc96319a34bc6c31eff..d8fb03d019fcc47d2bd44483eb974d8b0ae17d30 100644
--- a/dart/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
+++ b/dart/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart
@@ -420,10 +420,9 @@ class OldEmitter implements Emitter {
/** Needs defineClass to be defined. */
jsAst.Expression buildInheritFrom() {
- jsAst.Expression result = js(r'''
+ jsAst.Expression result = js(r"""
function() {
function tmp() {}
- var hasOwnProperty = Object.prototype.hasOwnProperty;
return function (constructor, superConstructor) {
if (superConstructor == null) {
// Fix up the the Dart Object class' prototype.
@@ -435,10 +434,10 @@ class OldEmitter implements Emitter {
tmp.prototype = superConstructor.prototype;
var object = new tmp();
var properties = constructor.prototype;
- for (var member in properties) {
- if (hasOwnProperty.call(properties, member)) {
- object[member] = properties[member];
- }
+ var members = Object.keys(properties);
+ for (var i = 0; i < members.length; i++) {
+ var member = members[i];
+ object[member] = properties[member];
}
// Use a function for `true` here, as functions are stored in the
// hidden class and not as properties in the object.
@@ -448,7 +447,7 @@ class OldEmitter implements Emitter {
return object;
};
}()
- ''', { 'operatorIsPrefix' : js.string(namer.operatorIsPrefix),
+ """, { 'operatorIsPrefix' : js.string(namer.operatorIsPrefix),
'isObject' : namer.operatorIs(compiler.objectClass) });
if (compiler.hasIncrementalSupport) {
result = js(
@@ -498,9 +497,11 @@ class OldEmitter implements Emitter {
var mixin = allClasses[mixinClass];
var mixinPrototype = mixin.prototype;
var clsPrototype = allClasses[cls].prototype;
- for (var d in mixinPrototype) {
- if (hasOwnProperty.call(mixinPrototype, d) &&
- !hasOwnProperty.call(clsPrototype, d))
+
+ var properties = Object.keys(mixinPrototype);
+ for (var i = 0; i < properties.length; i++) {
+ var d = properties[i];
+ if (!hasOwnProperty.call(clsPrototype, d))
clsPrototype[d] = mixinPrototype[d];
}
}
@@ -1014,10 +1015,12 @@ class OldEmitter implements Emitter {
$finishIsolateConstructorName = function (oldIsolate) {
var isolateProperties = oldIsolate.#isolatePropertiesName;
function Isolate() {
- var hasOwnProperty = Object.prototype.hasOwnProperty;
- for (var staticName in isolateProperties)
- if (hasOwnProperty.call(isolateProperties, staticName))
- this[staticName] = isolateProperties[staticName];
+
+ var staticNames = Object.keys(isolateProperties);
+ for (var i = 0; i < staticNames.length; i++) {
+ var staticName = staticNames[i];
+ this[staticName] = isolateProperties[staticName];
+ }
// Reset lazy initializers to null.
// When forcing the object to fast mode (below) v8 will consider
@@ -1025,8 +1028,9 @@ class OldEmitter implements Emitter {
// (after the first call to the getter), we would have a map
// transition.
var lazies = init.lazies;
- for (var lazyInit in lazies) {
- this[lazies[lazyInit]] = null;
+ var lazyInitializers = Object.keys(lazies);
+ for (var i = 0; i < lazyInitializers.length; i++) {
+ this[lazies[lazyInitializers[i]]] = null;
}
// Use the newly created object as prototype. In Chrome,
@@ -1037,8 +1041,8 @@ class OldEmitter implements Emitter {
new ForceEfficientMap();
// Now, after being a fast map we can set the lazies again.
- for (var lazyInit in lazies) {
- var lazyInitName = lazies[lazyInit];
+ for (var i = 0; i < lazyInitializers.length; i++) {
+ var lazyInitName = lazies[lazyInitializers[i]];
this[lazyInitName] = isolateProperties[lazyInitName];
}
}

Powered by Google App Engine
This is Rietveld 408576698