[JSC] AI should not propagate AbstractValue relying on constant folding phase
[WebKit-https.git] / JSTests / stress / arrayify-slow-put-array-storage-pass-array-storage.js
1 function shouldBe(actual, expected) {
2     if (actual !== expected)
3         throw new Error('bad value: ' + actual);
4 }
5
6 var object = { a: 10 };
7 Object.defineProperties(object, {
8     "0": {
9         get: function() { return this.a; },
10         set: function(x) { this.a = x; },
11     },
12 });
13
14 var array1 = [0.1, "OK", 0.3, 0.4, 0.5];
15 var array2 = [1, "HELLO", 3, 4, 5];
16 ensureArrayStorage(array2);
17 array1.ok = 42;
18 array2.ok = 42;
19 array2.__proto__ = object;
20
21 // Arrayify(SlowPutArrayStorage) works with ftl-eager
22 function testArrayStorage(array)
23 {
24     return array.length;
25 }
26 noInline(testArrayStorage);
27
28 for (var i = 0; i < 1e6; ++i) {
29     shouldBe(testArrayStorage(array1), 5);
30     shouldBe(testArrayStorage(array2), 5);
31 }
32
33 var array3 = [1, 2, 3];
34 ensureArrayStorage(array3);
35 shouldBe(testArrayStorage(array3), 3);
36 var array4 = [1, 2, 3];
37 shouldBe(testArrayStorage(array4), 3);
38 var array5 = {0:1, 1:2};
39 ensureArrayStorage(array5);
40 shouldBe(testArrayStorage(array5), undefined);