Chromium Code Reviews| 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..51e432222432b4dabba19b04b352eeb13b9c1e0d 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,12 @@ 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); |
| + var members_length = members.length; |
|
floitsch
2015/02/20 14:03:38
No need to do this. In fact Slava showed that this
ahe
2015/02/20 14:32:15
Done.
|
| + var member; |
| + for (var i = 0; i < members_length; ++i) { |
|
floitsch
2015/02/20 14:03:38
I prefer i++.
ahe
2015/02/20 14:32:16
Done.
|
| + member = members[i]; |
|
floitsch
2015/02/20 14:03:38
var member = members[i] (no need to hoist the "va
ahe
2015/02/20 14:32:15
I actually put it there to make the hoisting expli
ahe
2015/02/20 14:32:15
Done.
|
| + 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 +449,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 +499,13 @@ 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); |
| + var properties_length = properties.length; |
|
floitsch
2015/02/20 14:03:38
ditto.
ahe
2015/02/20 14:32:15
Done.
|
| + var d; |
|
floitsch
2015/02/20 14:03:38
ditto.
ahe
2015/02/20 14:32:16
Done.
|
| + for (var i = 0; i < properties_length; ++i) { |
| + d = properties[i]; |
| + if (!hasOwnProperty.call(clsPrototype, d)) |
| clsPrototype[d] = mixinPrototype[d]; |
| } |
| } |
| @@ -1014,10 +1019,14 @@ 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); |
| + var staticNames_length = staticNames.length; |
|
floitsch
2015/02/20 14:03:38
ditto.
ahe
2015/02/20 14:32:16
Done.
|
| + var staticName; |
|
floitsch
2015/02/20 14:03:38
ditto.
ahe
2015/02/20 14:32:16
Done.
|
| + for (var i = 0; i < staticNames_length; ++i) { |
| + 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 +1034,10 @@ 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); |
| + var lazyInitializers_length = lazyInitializers.length; |
|
floitsch
2015/02/20 14:03:38
ditto.
ahe
2015/02/20 14:32:15
Done.
|
| + for (var i = 0; i < lazyInitializers_length; ++i) { |
| + this[lazies[lazyInitializers[i]]] = null; |
| } |
| // Use the newly created object as prototype. In Chrome, |
| @@ -1037,8 +1048,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]; |
| } |
| } |