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); }