[JSC] AI should not propagate AbstractValue relying on constant folding phase
[WebKit-https.git] / JSTests / stress / has-indexed-property-array-storage-ftl.js
1 //@ if isFTLEnabled then runFTLNoCJIT else skip end
2
3 function shouldBe(actual, expected) {
4     if (actual !== expected)
5         throw new Error('bad value: ' + actual);
6 }
7
8 var didFTLCompile = false;
9 var ftlTrue = $vm.ftlTrue;
10 function test1(array)
11 {
12     didFTLCompile = ftlTrue();
13     return 2 in array;
14 }
15 noInline(test1);
16
17 var array = [1, 2, 3, 4];
18 ensureArrayStorage(array);
19 didFTLCompile = false;
20 for (var i = 0; i < 1e5; ++i)
21     shouldBe(test1(array), true);
22 shouldBe(didFTLCompile, true);
23
24 var array = [1, 2, , 4];
25 ensureArrayStorage(array);
26 shouldBe(test1(array), false);
27
28 var array = [];
29 ensureArrayStorage(array);
30 shouldBe(test1(array), false);
31
32 function test2(array)
33 {
34     didFTLCompile = ftlTrue();
35     return 13 in array;
36 }
37 noInline(test2);
38
39 var array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
40 ensureArrayStorage(array1);
41 var array2 = [1, 2];
42 ensureArrayStorage(array2);
43 didFTLCompile = false;
44 for (var i = 0; i < 1e5; ++i)
45     shouldBe(test2(array2), false);
46 shouldBe(didFTLCompile, true);
47 shouldBe(test2(array2), false);
48 shouldBe(test2(array1), true);