(function() { | |
// Iterate over an array with normal indexed properties. | |
var foo = function() { | |
var a = [1, 2, 3, 4, 5]; | |
var sum = 0; | |
var result = ""; | |
for (var p in a) | |
result += a[p]; | |
return result; | |
}; | |
noInline(foo); | |
for (var i = 0; i < 10000; ++i) { | |
if (foo() !== "12345") | |
throw new Error("bad result"); | |
} | |
foo(null); | |
})(); | |
(function() { | |
// Iterate over an object with normal non-indexed properties. | |
var foo = function() { | |
var o = {}; | |
o.x = 1; | |
o.y = 2; | |
o.z = 3; | |
var result = ""; | |
for (var p in o) | |
result += o[p]; | |
return result; | |
}; | |
noInline(foo); | |
for (var i = 0; i < 10000; ++i) { | |
if (foo() !== "123") | |
throw new Error("bad result"); | |
} | |
foo(null); | |
})(); | |
(function() { | |
// Iterate over an object with both indexed and non-indexed properties. | |
var foo = function() { | |
var o = {}; | |
o.x = 1; | |
o.y = 2; | |
o.z = 3; | |
o[0] = 4; | |
o[1] = 5; | |
o[2] = 6; | |
var result = ""; | |
for (var p in o) | |
result += o[p]; | |
return result; | |
}; | |
noInline(foo); | |
for (var i = 0; i < 10000; ++i) { | |
if (foo() != "456123") | |
throw new Error("bad result"); | |
} | |
foo(null); | |
})(); | |
(function() { | |
// Iterate over an array with both indexed and non-indexed properties. | |
var foo = function() { | |
var a = [4, 5, 6]; | |
a.x = 1; | |
a.y = 2; | |
a.z = 3; | |
var result = ""; | |
for (var p in a) | |
result += a[p]; | |
return result; | |
}; | |
noInline(foo); | |
for (var i = 0; i < 10000; ++i) { | |
if (foo() !== "456123") | |
throw new Error("bad result"); | |
} | |
foo(null); | |
})(); | |
(function() { | |
var foo = function(a, b) { | |
for (var p in b) { | |
var f1 = a[p]; | |
var f2 = b[p]; | |
if (f1 === f2) | |
continue; | |
a[p] = b[p]; | |
} | |
}; | |
noInline(foo); | |
for (var i = 0; i < 10000; ++i) { | |
var o1 = {}; | |
var o2 = {}; | |
o2.x = 42; | |
o2.y = 53; | |
foo(o1, o2); | |
if (o1.x !== o2.x) | |
throw new Error("bad result: " + o1.x + "!==" + o2.x); | |
if (o1.y !== o2.y) | |
throw new Error("bad result: " + o1.y + "!==" + o2.y); | |
} | |
})(); |