tor-browser

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

Environment-calleeScript-01.js (1538B)


      1 // Debugger.Environment.prototype.calleeScript reveals the script of function
      2 // environments.
      3 
      4 var g = newGlobal({newCompartment: true});
      5 var dbg = new Debugger;
      6 var gw = dbg.addDebuggee(g);
      7 
      8 function check(code, expectedType, expectedCallee) {
      9  print("check(" + JSON.stringify(code) + ")");
     10  var hits;
     11  dbg.onDebuggerStatement = function (frame) {
     12    hits++;
     13    var env = frame.environment;
     14    assertEq(env.type, expectedType);
     15    assertEq(env.calleeScript, expectedCallee ? expectedCallee.script : null);
     16  };
     17  hits = 0;
     18  g.eval(code);
     19  assertEq(hits, 1);
     20 }
     21 
     22 check('debugger;', 'declarative', null);
     23 check('with({}) { debugger; };', 'with', null);
     24 check('{ let x=1; debugger; };', 'declarative', null);
     25 
     26 g.eval('function f() { debugger; }');
     27 check('f()', 'declarative', gw.makeDebuggeeValue(g.f));
     28 
     29 g.eval('function g() { h(); }');
     30 g.eval('function h() { debugger; }');
     31 check('g()', 'declarative', gw.makeDebuggeeValue(g.h));
     32 
     33 // All evals get a lexical scope.
     34 check('"use strict"; eval("debugger");', 'declarative', null);
     35 g.eval('function j() { "use strict"; eval("debugger;"); }');
     36 check('j()', 'declarative', null);
     37 
     38 // All evals get a lexical scope.
     39 check('eval("debugger");', 'declarative', null);
     40 
     41 g.eval('function* m() { debugger; yield true; }');
     42 check('m().next();', 'declarative', gw.makeDebuggeeValue(g.m));
     43 
     44 g.eval('function n() { { let x = 1; debugger; } }');
     45 check('n()', 'declarative', null);
     46 
     47 g.eval('function* o() { debugger; yield true; }');
     48 check('o().next();', 'declarative', gw.makeDebuggeeValue(g.o));