tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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 }