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