[JSC] Add support for GetByVal on arrays of Undecided shape
[WebKit-https.git] / Source / JavaScriptCore / tests / stress / get-by-val-on-undecided-sane-chain-4.js
1 "use strict"
2
3 // Test in-bounds access.
4 function opaqueGetByVal1(array, index) {
5     return array[index];
6 }
7 noInline(opaqueGetByVal1);
8
9 const IntMax = Math.pow(2, 31) - 1;
10
11 function testUninitializedArray() {
12     const target = new Array(100);
13
14     // We start with an original array. Those GetByVal can be eliminated.
15     for (let i = 0; i < 1e4; ++i) {
16         const value = opaqueGetByVal1(target, i);
17         if (value !== undefined)
18             throw "opaqueGetByVal1() case 1 failed for i = " + i + " value = " + value;
19     }
20
21     Array.prototype[IntMax] = "Uh!";
22
23     for (let i = 0; i < 1e4; ++i) {
24         const value = opaqueGetByVal1(target, i);
25         if (value !== undefined)
26             throw "opaqueGetByVal1() case 2 failed for i = " + i + " value = " + value;
27     }
28     const prototypeValue = opaqueGetByVal1(target, IntMax)
29     if (prototypeValue !== "Uh!")
30         throw "prototypeValue value = " + value;
31
32 }
33 testUninitializedArray();
34
35 // Test in-bounds access.
36 function opaqueGetByVal2(array, index) {
37     return array[index];
38 }
39 noInline(opaqueGetByVal2);
40
41 function testAccessOnEmpty() {
42     const target = new Array();
43
44     for (let i = 0; i < 1e4; ++i) {
45         const value = opaqueGetByVal2(target, i);
46         if (value !== undefined)
47             throw "opaqueGetByVal2() case 1 failed for i = " + i + " value = " + value;
48     }
49     const prototypeValue = opaqueGetByVal2(target, IntMax)
50     if (prototypeValue !== "Uh!")
51         throw "prototypeValue value = " + value;
52 }
53 testAccessOnEmpty();