[JSC] Do not use asArrayModes() with Structures because it discards TypedArray inform...
[WebKit-https.git] / JSTests / stress / ftl-try-catch-patchpoint-with-volatile-registers.js
1 function assert(b) {
2     if (!b)
3         throw new Error("Bad value.")
4 }
5 noInline(assert);
6
7 var v1 = 100;
8 var v2 = 200;
9 var flag = false;
10 var o1 = {
11     get f() {
12         if (flag)
13             throw new Error("gotcha!");
14         return v1;    
15     }
16 }
17
18 function a() { return "a"; }
19 noInline(a);
20 function b() { return "b"; }
21 noInline(b);
22 function c() { return "c"; }
23 noInline(c);
24 function d() { return "d"; }
25 noInline(d);
26 function e() { return "e"; }
27 noInline(e);
28 function f() { return "f"; }
29 noInline(f);
30 function g() { return "g"; }
31 noInline(g);
32
33 var o2 = {
34     get f() {
35         assert(true);
36         assert(true);
37         assert(true);
38         assert(true);
39         assert(true);
40         assert(true);
41         assert(true);
42         return v2;
43     }
44 }
45
46 function foo(o) {
47     try {
48         var _a = a();
49         var _b = b();
50         var _c = c();
51         var _d = d();
52         var _e = e();
53         var _f = f();
54         var _g = g();
55
56         o = o.f;
57
58     } catch(e) {
59         assert(o === o1);
60         assert(_b === "b");
61         assert(_c === "c");
62         assert(_d === "d");
63         assert(_e === "e");
64         assert(_f === "f");
65         assert(_g === "g");
66     }
67 }
68 noInline(foo);
69
70 for (var i = 0; i < 1000000; i++)
71     foo(i % 2 ? o1 : o2);
72 flag = true;
73 foo(o1);