[JSC] Add support for GetByVal on arrays of Undecided shape
[WebKit-https.git] / Source / JavaScriptCore / tests / stress / get-by-val-on-undecided-sane-chain-1.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 function testAccessInBounds() {
10     const target = new Array(100);
11
12     // We start with an original array. Those GetByVal can be eliminated.
13     for (let i = 0; i < 1e4; ++i) {
14         const value = opaqueGetByVal1(target, i % 100);
15         if (value !== undefined)
16             throw "opaqueGetByVal1() case 1 failed for i = " + i + " value = " + value;
17     }
18
19     Array.prototype[42] = "Uh!";
20
21     for (let i = 0; i < 1e4; ++i) {
22         const index = i % 100;
23         const value = opaqueGetByVal1(target, index);
24         if (index == 42) {
25             if (value !== "Uh!")
26                 throw "opaqueGetByVal1() case 2 failed on 42, value = " + value;
27         } else if (value !== undefined)
28             throw "opaqueGetByVal1() case 2 failed for i = " + i + " value = " + value;
29     }
30
31     delete Array.prototype[42];
32 }
33 testAccessInBounds();
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     // We start with an original array. Those GetByVal can be eliminated.
45     for (let i = 0; i < 1e4; ++i) {
46         const value = opaqueGetByVal2(target, i % 100);
47         if (value !== undefined)
48             throw "opaqueGetByVal2() case 1 failed for i = " + i + " value = " + value;
49     }
50
51     Array.prototype[5] = "Uh!";
52
53     for (let i = 0; i < 1e4; ++i) {
54         const index = i % 100;
55         const value = opaqueGetByVal2(target, index);
56         if (index == 5) {
57             if (value !== "Uh!")
58                 throw "opaqueGetByVal2() case 2 failed on 42, value = " + value;
59         } else if (value !== undefined)
60             throw "opaqueGetByVal2() case 2 failed for i = " + i + " value = " + value;
61     }
62 }
63 testAccessOnEmpty();