| function shouldBe(actual, expected) { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| |
| var object = { a: 10 }; |
| Object.defineProperties(object, { |
| "0": { |
| get: function() { return this.a; }, |
| set: function(x) { this.a = x; }, |
| }, |
| }); |
| |
| var array1 = [0.1, "OK", 0.3, 0.4, 0.5]; |
| var array2 = [1, "HELLO", 3, 4, 5]; |
| ensureArrayStorage(array2); |
| array1.ok = 42; |
| array2.ok = 42; |
| array2.__proto__ = object; |
| |
| // Arrayify(SlowPutArrayStorage) works with ftl-eager |
| function testArrayStorage(array) |
| { |
| return array.length; |
| } |
| noInline(testArrayStorage); |
| |
| for (var i = 0; i < 1e6; ++i) { |
| shouldBe(testArrayStorage(array1), 5); |
| shouldBe(testArrayStorage(array2), 5); |
| } |