43 lines
974 B
JavaScript
43 lines
974 B
JavaScript
description(
|
|
"Tests that ArrayPop is known to the DFG to be a side effect."
|
|
);
|
|
|
|
function foo(a, b) {
|
|
var result = a.f;
|
|
result += b.pop();
|
|
result += a.g;
|
|
return result;
|
|
}
|
|
|
|
noInline(foo);
|
|
silentTestPass = true;
|
|
|
|
var ouches = 0;
|
|
for (var i = 0; i < 200; i = dfgIncrement({f:foo, i:i + 1, n:100})) {
|
|
var a = {f:1, g:2};
|
|
var b = [];
|
|
var expected;
|
|
if (i < 150) {
|
|
// Ensure that we always transition the array's structure to one that indicates
|
|
// that we have array storage.
|
|
b.__defineGetter__("0", function() {
|
|
testFailed("Should never get here");
|
|
});
|
|
b.length = 0;
|
|
b[0] = 42;
|
|
expected = "45";
|
|
} else {
|
|
b.__defineGetter__("0", function() {
|
|
debug("Ouch!");
|
|
ouches++;
|
|
delete a.g;
|
|
a.h = 43;
|
|
return 5;
|
|
});
|
|
expected = "0/0";
|
|
}
|
|
shouldBe("foo(a, b)", expected);
|
|
}
|
|
|
|
shouldBe("ouches", "50");
|