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