| function shouldBe(actual, expected) { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| noInline(shouldBe); |
| |
| var array1 = {0:0, 1:1, 2:2, 3:3, 4:4, 5:5}; |
| var array2 = {0:"Hello", 1:"World", 2:"Cocoa"}; |
| Object.freeze(array1); |
| Object.freeze(array2); |
| |
| function test1() |
| { |
| return array1[0] + array1[1] + array1[2] + array1[3] + array1[4] + array1[5]; |
| } |
| noInline(test1); |
| |
| function test2() |
| { |
| return array1[0] + array1[1] + array1[2] + array1[3] + array1[4] + array1[5] + (array1[6] | 0); |
| } |
| noInline(test2); |
| |
| function test3() |
| { |
| return array2[0] + array2[1] + array2[2]; |
| } |
| noInline(test3); |
| |
| var array3 = {}; |
| Object.defineProperty(array3, 0, { |
| get() { return 42; } |
| }); |
| Object.defineProperty(array3, 1, { |
| get() { return 42; } |
| }); |
| Object.freeze(array3); |
| |
| function test4() |
| { |
| return array3[0] + array3[1]; |
| } |
| noInline(test4); |
| |
| var array4 = {0:0, 1:1, 2:2, 3:3, 4:4, 5:5}; |
| Object.seal(array4); |
| |
| function test5() |
| { |
| return array4[0] + array4[1] + array4[2] + array4[3] + array4[4] + array4[5]; |
| } |
| noInline(test5); |
| |
| for (var i = 0; i < 1e5; ++i) { |
| shouldBe(test1(), 15); |
| shouldBe(test2(), 15); |
| shouldBe(test3(), `HelloWorldCocoa`); |
| shouldBe(test4(), 84); |
| shouldBe(test5(), 15); |
| } |