tor-browser

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

onExceptionUnwind-generators-01.js (981B)


      1 // Generator/async frames can be created and revived by the onExceptionUnwind hook.
      2 //
      3 // Modified copy of Frame-older-generators-01.js.
      4 
      5 let g = newGlobal({newCompartment: true});
      6 g.eval(`
      7    function* gen() {
      8        try { throw new Error("bad"); } catch { }
      9        yield 1;
     10        try { throw new Error("bad"); } catch { }
     11    }
     12    async function af() {
     13        try { throw new Error("bad"); } catch { }
     14        await 1;
     15        try { throw new Error("bad"); } catch { }
     16    }
     17 `);
     18 
     19 function test(expected, code) {
     20    let dbg = Debugger(g);
     21    let hits = 0;
     22    let genFrame = null;
     23    dbg.onExceptionUnwind = frame => {
     24        hits++;
     25        if (genFrame === null) {
     26            genFrame = frame;
     27        } else {
     28            assertEq(frame, genFrame);
     29        }
     30        assertEq(genFrame.callee.name, expected);
     31    }
     32 
     33    g.eval(code);
     34    assertEq(hits, 2);
     35    dbg.removeDebuggee(g);
     36 }
     37 
     38 test("gen", "for (var x of gen()) {}");
     39 test("af", "af(); drainJobQueue();");