tor-browser

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

onEnterFrame-generator-resumption-01.js (957B)


      1 // A debugger can {throw:} from onEnterFrame at any resume point in a generator.
      2 // It closes the generator.
      3 
      4 load(libdir + "asserts.js");
      5 
      6 let g = newGlobal({newCompartment: true});
      7 g.eval(`
      8    function* f() { yield 1; }
      9    var exn = new TypeError("object too hairy");
     10 `);
     11 
     12 let dbg = new Debugger;
     13 let gw = dbg.addDebuggee(g);
     14 
     15 // Repeat the test for each onEnterFrame event.
     16 // It fires up to three times:
     17 // - when the generator g.f is called;
     18 // - when we enter it to run to `yield 1`;
     19 // - when we resume after the yield to run to the end.
     20 for (let i = 0; i < 3; i++) {
     21    let hits = 0;
     22    dbg.onEnterFrame = frame => {
     23        return hits++ < i ? undefined : {throw: gw.makeDebuggeeValue(g.exn)};
     24    };
     25    let genObj;
     26    assertThrowsValue(
     27        () => {
     28            genObj = g.f();
     29            for (let x of genObj) {}
     30        },
     31        g.exn
     32    );
     33    assertEq(hits, i + 1);
     34    if (hits > 1)
     35        assertEq(genObj.next().done, true);
     36 }