tor-browser

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

bailout-env.js (957B)


      1 function inner_env() {
      2    let result = [];
      3 
      4    let x = 0;
      5    result.push(() => x);
      6 
      7    var tmp = [1,2,3];
      8    for (let y in tmp)
      9        result.push(() => tmp[y])
     10 
     11    for (let z = 4; z < 7; z++)
     12        result.push(() => z)
     13 
     14    return result;
     15 }
     16 
     17 function outer_env() {
     18    let result = inner_env();
     19 
     20    var tmp = [7,8,9];
     21    for (let x in tmp)
     22        result.push(() => tmp[x])
     23 
     24    return result;
     25 }
     26 
     27 function check_result(result, expectedLen) {
     28    assertEq(result.length, expectedLen);
     29 
     30    for (var i = 0; i < expectedLen; ++i)
     31        assertEq(result[i], i);
     32 }
     33 
     34 // Wipeout jitcode
     35 bailout();
     36 gc(); gc();
     37 
     38 // Test lexical environment bailouts
     39 for (var i = 0; i < 100; ++i)
     40 {
     41    bailAfter(i);
     42 
     43    var result = inner_env().map(fn => fn());
     44    check_result(result, 7);
     45 }
     46 
     47 // Test inlined lexical environment bailouts
     48 for (var i = 0; i < 100; ++i)
     49 {
     50    bailAfter(i);
     51 
     52    var result = outer_env().map(fn => fn());
     53    check_result(result, 10);
     54 }