tor-browser

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

stencil.js (2507B)


      1 const optionsFull = {
      2  fileName: "compileToStencil-DATA.js",
      3  lineNumber: 1,
      4  eagerDelazificationStrategy: "ParseEverythingEagerly",
      5 };
      6 
      7 const optionsLazy = {
      8  fileName: "compileToStencil-DATA.js",
      9  lineNumber: 1,
     10  eagerDelazificationStrategy: "OnDemandOnly",
     11 };
     12 
     13 const optionsLazyCache = {
     14  fileName: "compileToStencil-DATA.js",
     15  lineNumber: 1,
     16  eagerDelazificationStrategy: "ConcurrentDepthFirst",
     17 };
     18 
     19 function testMainThread(script_str) {
     20  const eval_f = eval;
     21  const stencil = compileToStencil(script_str, optionsFull);
     22  const result = evalStencil(stencil, optionsFull);
     23  assertEq(result, eval_f(script_str));
     24 }
     25 
     26 function testMainThreadDelazifyAll(script_str) {
     27  if (isLcovEnabled()) {
     28    // Code-coverage implies forceFullParse = true, and as such it cannot be
     29    // used while testing to incrementally delazify.
     30    return;
     31  }
     32  const eval_f = eval;
     33  const stencil = compileToStencil(script_str, optionsLazy);
     34  const result = evalStencil(stencil, optionsLazy);
     35  assertEq(result, eval_f(script_str));
     36 }
     37 
     38 function testMainThreadCacheAll(script_str) {
     39  if (isLcovEnabled() || helperThreadCount() === 0) {
     40    // Code-coverage implies forceFullParse = true, and as such it cannot be
     41    // used while testing to incrementally delazify.
     42    // Similarly, concurrent delazification requires off-threads processing.
     43    return;
     44  }
     45  const eval_f = eval;
     46  const stencil = compileToStencil(script_str, optionsLazyCache);
     47  const result = evalStencil(stencil, optionsLazyCache);
     48  assertEq(result, eval_f(script_str));
     49 }
     50 
     51 function testOffThread(script_str) {
     52  const eval_f = eval;
     53  const job = offThreadCompileToStencil(script_str, optionsFull);
     54  const stencil = finishOffThreadStencil(job);
     55  const result = evalStencil(stencil, optionsFull);
     56  assertEq(result, eval_f(script_str));
     57 }
     58 
     59 testMainThread(`
     60 var a = 10;
     61 let b = 20, c = 30;
     62 const d = 40;
     63 function f() {
     64  return a + b + c + d;
     65 }
     66 f();
     67 `);
     68 
     69 testMainThreadDelazifyAll(`
     70 var a1 = 10;
     71 let b1 = 20, c1 = 30;
     72 const d1 = 40;
     73 function g1() {
     74  function h1() {
     75    return a1 + b1;
     76  }
     77  return h1() + c1;
     78 }
     79 function f1() {
     80  return a1 + b1 + c1 + d1;
     81 }
     82 f1();
     83 `);
     84 
     85 testMainThreadCacheAll(`
     86 var a3 = 10;
     87 let b3 = 20, c3 = 30;
     88 const d3 = 40;
     89 function g3() {
     90  function h3() {
     91    return a3 + b3;
     92  }
     93  return h3() + c3;
     94 }
     95 function f3() {
     96  return a3 + b3 + c3 + d3;
     97 }
     98 f3();
     99 `);
    100 
    101 if (helperThreadCount() > 0) {
    102  testOffThread(`
    103 var a2 = 10;
    104 let b2 = 20, c2 = 30;
    105 const d2 = 40;
    106 function f2() {
    107  return a2 + b2 + c2 + d2;
    108 }
    109 f2();
    110 `);
    111 }