[JSC] Do not use asArrayModes() with Structures because it discards TypedArray inform...
[WebKit-https.git] / JSTests / stress / ftl-try-catch-arith-sub-exception.js
1 function assert(b) {
2     if (!b)
3         throw new Error("uh oh");
4 }
5
6 let flag = false;
7 let o = {
8     valueOf() {
9         if (flag)
10             throw new Error("by by");
11         return 13.5;
12     }
13 };
14 noInline(o.valueOf);
15
16 function baz() { return 1.5; }
17 noInline(baz);
18
19 function foo(x, o) {
20     let r = baz();
21     try {
22         r = x - o - r;
23     } catch(e) { }
24     return r;
25 }
26 noInline(foo);
27
28 let x = 20.5;
29 for (let i = 0; i < 10000; i++) {
30     assert(foo(x, o) === 5.5);
31 }
32 flag = true;
33 assert(foo(x, o) === 1.5);
34
35
36 function bar(x, o) {
37     let caughtException = false;
38     var r = null;
39     try {
40         // This tests aliasing of left/right with result register in a SubGenerator
41         // and ensures that the sub will spill the register properly and that we value
42         // recover properly.
43         r = x - o;
44     } catch(e) {
45         caughtException = true;
46         assert(r === null);
47     }
48     if (!caughtException)
49         assert(r === 7);
50     return caughtException;
51
52 noInline(bar);
53
54 flag = false;
55 for (let i = 0; i < 10000; i++) {
56     assert(bar(x, o) === false);
57 }
58 flag = true;
59 assert(bar(x, o) === true);