tor-browser

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

scalar-replace-rest-apply-array.js (888B)


      1 // Prevent GC from cancelling/discarding Ion compilations.
      2 gczeal(0);
      3 
      4 // Create a fresh set of functions for each argument count to avoid type pollution.
      5 function makeTest(count) {
      6  var args = Array(count).fill(0).join(",");
      7 
      8  return Function(`
      9    function g() {
     10      return arguments.length;
     11    }
     12 
     13    function f(...args) {
     14      assertRecoveredOnBailout(args, true);
     15      return g(...args);
     16    }
     17 
     18    function test() {
     19      // Ensure |f| isn't inlined into its caller.
     20      with ({});
     21 
     22      for (let i = 0; i < 1000; ++i) {
     23        assertEq(f(${args}), ${count});
     24      }
     25    }
     26 
     27    return test;
     28  `)();
     29 }
     30 
     31 // Inline rest arguments are limited to 14 elements, cf.
     32 // gc::CanUseFixedElementsForArray() in WarpBuilder::build_Rest().
     33 // There isn't such limit when the function isn't inlined.
     34 const maxRestArgs = 20;
     35 
     36 for (let i = 0; i <= maxRestArgs; ++i) {
     37  makeTest(i)();
     38 }