| function shouldBe(actual, expected) { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| |
| var array0 = [1, 2, 3, 4, 5]; |
| var array1 = [1.2, 2.3, 3.4, 4.5, 5.6]; |
| var array2 = ["Hello", "New", "World", "Cappuccino", "Cocoa"]; |
| var array3 = [null, null, null, null, null]; |
| var array4 = [undefined, undefined, undefined, undefined, undefined]; |
| var array5 = [false, true, false, true, false]; |
| |
| function test0() |
| { |
| return array0[5]; |
| } |
| noInline(test0); |
| |
| function test1() |
| { |
| return array1[5]; |
| } |
| noInline(test1); |
| |
| function test2() |
| { |
| return array2[5]; |
| } |
| noInline(test2); |
| |
| function test3() |
| { |
| return array3[5]; |
| } |
| noInline(test3); |
| |
| function test4() |
| { |
| return array4[5]; |
| } |
| noInline(test4); |
| |
| function test5() |
| { |
| return array5[5]; |
| } |
| noInline(test5); |
| |
| for (var i = 0; i < 1e5; ++i) { |
| shouldBe(test0(), undefined); |
| shouldBe(test1(), undefined); |
| shouldBe(test2(), undefined); |
| shouldBe(test3(), undefined); |
| shouldBe(test4(), undefined); |
| shouldBe(test5(), undefined); |
| } |
| // Breaking sane chains. |
| Array.prototype[5] = 42; |
| for (var i = 0; i < 1e5; ++i) { |
| shouldBe(test0(), 42); |
| shouldBe(test1(), 42); |
| shouldBe(test2(), 42); |
| shouldBe(test3(), 42); |
| shouldBe(test4(), 42); |
| shouldBe(test5(), 42); |
| } |