tor-browser

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

Frame-older-generators-02.js (1208B)


      1 // Like Frame-older-generators-01.js, but attach the debugger on the fly.
      2 //
      3 // (That is, check that it works even if the debugger never received
      4 // onNewGenerator for the generator, because it wasn't attached at the time.)
      5 
      6 let g = newGlobal({newCompartment: true});
      7 g.eval(`
      8    function f() {
      9        attach();
     10        debugger;
     11    }
     12    function* gen() {
     13        f();
     14        yield 1;
     15        f();
     16    }
     17    async function af() {
     18        f();
     19        await 1;
     20        f();
     21    }
     22 `);
     23 
     24 function test(expected, code) {
     25    let dbg;
     26    let hits = 0;
     27    let genFrame = null;
     28 
     29    g.attach = () => {
     30        if (dbg === undefined) {
     31            dbg = Debugger(g);
     32            dbg.onDebuggerStatement = frame => {
     33                hits++;
     34                assertEq(frame.callee.name, "f");
     35                if (genFrame === null) {
     36                    genFrame = frame.older;
     37                } else {
     38                    assertEq(frame.older, genFrame);
     39                }
     40                assertEq(genFrame.callee.name, expected);
     41            };
     42        }
     43    };
     44    g.eval(code);
     45    assertEq(hits, 2);
     46    dbg.removeDebuggee(g);
     47 }
     48 
     49 test("gen", "for (var x of gen()) {}");
     50 test("af", "af(); drainJobQueue();");