[JSC] AI should not propagate AbstractValue relying on constant folding phase
[WebKit-https.git] / JSTests / stress / ftl-put-by-id-slow-exception-interesting-live-state.js
1 function foo(o, p) {
2     var x = 100;
3     var result = 101;
4     var pf = p.g;
5     try {
6         x = 102;
7         pf++;
8         o.f = x + pf;
9         o = 104;
10         pf++;
11         x = 106;
12     } catch (e) {
13         return {outcome: "exception", values: [o, pf, x]};
14     }
15     return {outcome: "return", values: [o, pf, x]};
16 }
17
18 noInline(foo);
19
20 // Warm up foo() with polymorphic objects and getters.
21 for (var i = 0; i < 100000; ++i) {
22     var o = {};
23     if (i & 1)
24         o["i" + i] = i; // Make it polymorphic.
25     var result = foo(o, {g:200});
26     if (result.outcome !== "return")
27         throw "Error in loop: bad outcome: " + result.outcome;
28     if (result.values.length !== 3)
29         throw "Error in loop: bad number of values: " + result.values.length;
30     if (result.values[0] !== 104)
31         throw "Error in loop: bad values[0]: " + result.values[0];
32     if (result.values[1] !== 202)
33         throw "Error in loop: bad values[1]: " + result.values[1];
34     if (result.values[2] !== 106)
35         throw "Error in loop: bad values[2]: " + result.values[2];
36     if (o.f != 102 + 201)
37         throw "Error in loop: bad value of o.f: " + o.f;
38 }
39
40 // Now throw an exception.
41 var o = {};
42 o.__defineSetter__("f", function() {
43     throw "Error42";
44 });
45 var result = foo(o, {g:300});
46 if (result.outcome !== "exception")
47     throw "Error at end: bad outcome: " + result.outcome;
48 if (result.values.length !== 3)
49     throw "Error at end: bad number of values: " + result.values.length;
50 if (result.values[0] !== o)
51     throw "Error at end: bad values[0]: " + result.values[0];
52 if (result.values[1] !== 301)
53     throw "Error at end: bad values[1]: " + result.values[1];
54 if (result.values[2] !== 102)
55     throw "Error at end: bad values[2]: " + result.values[2];
56