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