bailout-spread.js (747B)
1 function f1(a,b,c,d) { 2 if (a < 0) 3 throw arguments; 4 5 return a + b + c + d; 6 } 7 8 function f2(a,b,c,d,e) { 9 return f1(a,b,c,d*e); 10 } 11 12 function f3(a,v) { 13 return f2(a, ...v); 14 } 15 16 function f4(i, j) { 17 return f3(i, [j,3,4,5]); 18 } 19 20 function f5(i) { 21 return f4(i, i); 22 } 23 24 // Clean jitcode 25 gc(); gc(); 26 27 // Test bailouts through spreadcall 28 for (var i = 0; i < 1000; ++i) 29 { 30 bailAfter(i); 31 assertEq(f5(i), i+i+23); 32 } 33 34 // Test exception unwind bailout through spreadcall 35 for (var i = 1; i < 100; ++i) 36 { 37 let x; 38 39 try { 40 f5(-i); 41 42 // Unreachable 43 assertEq(1, 0); 44 } 45 catch (e) { 46 x = e; 47 } 48 49 assertEq(x[0], -i); 50 assertEq(x[1], -i); 51 assertEq(x[2], 3); 52 assertEq(x[3], 20); 53 }