[JSC] Do not use asArrayModes() with Structures because it discards TypedArray inform...
[WebKit-https.git] / JSTests / stress / ftl-try-catch-oom-error-lazy-slow-path.js
1 forceGCSlowPaths(); // Force OOM error in FTL MakeRope to happen in a lazy slow path.
2
3 function assert(b) {
4     if (!b)
5         throw new Error("Bad assertion");
6 }
7
8 function a() { return "a"; }
9 noInline(a);
10 function b() { return "b"; }
11 noInline(b);
12 function c() { return "c"; }
13 noInline(c);
14 function d() { return "d"; }
15 noInline(d);
16 function e() { return "e"; }
17 noInline(e);
18 function f() { return "f"; }
19 noInline(f);
20 function g() { return "g"; }
21 noInline(g);
22
23 let expString = "a";
24 let exponentialBlowup = false;
25 let shouldBreak = false;
26 function foo(fun, left, right) {
27     let x = fun();
28     let r = left + right;
29
30     var _a = a();
31     var _b = b();
32     var _c = c();
33     var _d = d();
34     var _e = e();
35     var _f = f();
36     var _g = g();
37     try {
38         expString = expString + expString;
39     } catch(e) {
40         shouldBreak = true;
41
42         assert(_b === "b");
43         assert(_c === "c");
44         assert(_d === "d");
45         assert(_e === "e");
46         assert(_f === "f");
47         assert(_g === "g");
48     }
49     return x + r;
50 }
51 noInline(foo);
52
53
54
55 function blah() { return "blah"; }
56 noInline(blah);
57
58 for (let i = 0; i < 100000; i++) {
59     assert(foo(blah, "b", "a") === "blahba");
60     if (!exponentialBlowup)
61         expString = "a";
62 }
63
64 exponentialBlowup = true;
65 while (true) {
66     assert(foo(blah, "a", "b") === "blahab");
67     if (shouldBreak)
68         break;
69 }