| function foo(x) { |
| return new Array(x); |
| } |
| |
| noInline(foo); |
| |
| var poke; |
| Array.prototype.__defineSetter__("1", function() { |
| poke = "poke"; |
| }); |
| |
| function test(size) { |
| var result = foo(size); |
| if (result.length != size) |
| throw "Error: bad result: " + result; |
| var sawThings = false; |
| for (var s in result) { |
| if (s != "1") |
| sawThings = true; |
| } |
| if (sawThings) |
| throw "Error: array is in bad state: " + result; |
| result[0] = "42.5"; |
| if (result[0] != "42.5") |
| throw "Error: array is in wierd state: " + result; |
| poke = null; |
| result[1] = 42; |
| if (poke != "poke") |
| throw "Error: setter not called."; |
| } |
| |
| for (var i = 0; i < 100000; ++i) { |
| test(42); |
| } |