tor-browser

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

Environment-find-06.js (1527B)


      1 // Environment.prototype.find finds bindings that are function arguments, 'let'
      2 // bindings, or FunctionExpression names.
      3 
      4 var g = newGlobal({newCompartment: true});
      5 g.eval("function h() { debugger; }");
      6 
      7 var dbg = new Debugger(g);
      8 
      9 function test1(code) {
     10    var hits = 0;
     11    dbg.onDebuggerStatement = function (frame) {
     12        var env = frame.older.environment.find('X');
     13        assertEq(env.names().indexOf('X') !== -1, true);
     14        assertEq(env.type, 'declarative');
     15        assertEq(env.parent !== null, true);
     16        hits++;
     17    };
     18    g.eval(code);
     19    assertEq(hits, 1);
     20 }
     21 
     22 var manyNames = '';
     23 for (var i = 0; i < 2048; i++)
     24    manyNames += 'x' + i + ', ';
     25 manyNames += 'X';
     26 
     27 function test2(code) {
     28    print(code + " : one");
     29    test1(code.replace('@@', 'X'));
     30    print(code + " : many");
     31    test1(code.replace('@@', manyNames));
     32 }
     33 
     34 test2('function f(@@) { h(); }  f(1);');
     35 test2('function f(@@) { h(); }  f();');
     36 test2('function f(@@) { return function g() { h(X); }; }  f(1)();');
     37 test2('function f(@@) { return function g() { h(X); }; }  f()();');
     38 
     39 test2('                    { let @@ = 0; h(); }');
     40 test2('function f(a, b, c) { let @@ = 0; h(); }  f(1, 2, 3);');
     41 test2('             { let @@ = 0; { let y = 0; h(); } }');
     42 test2('function f() { let @@ = 0; { let y = 0; h(); } }  f();');
     43 test2('             { for (let @@ = 0; X < 1; X++) h(); }');
     44 test2('function f() { for (let @@ = 0; X < 1; X++) h(); }  f();');
     45 
     46 test1('(function X() { h(); })();');
     47 test1('(function X(a, b, c) { h(); })(1, 2, 3);');