tor-browser

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

onEnterFrame-generator-resumption-03.js (891B)


      1 // Returning {throw:} from onEnterFrame when resuming inside a try block in a
      2 // generator causes control to jump to the catch block.
      3 
      4 let g = newGlobal({newCompartment: true});
      5 g.eval(`
      6    function* gen() {
      7        try {
      8            yield 0;
      9            return "fail";
     10        } catch (exc) {
     11            assertEq(exc, "fit");
     12            return "ok";
     13        }
     14    }
     15 `)
     16 
     17 let dbg = new Debugger(g);
     18 let hits = 0;
     19 dbg.onEnterFrame = frame => {
     20    assertEq(frame.callee.name, "gen");
     21    if (++hits == 3) {
     22        // First hit is when calling gen();
     23        // second hit is resuming at the implicit initial yield;
     24        // third hit is resuming inside the try block.
     25        return {throw: "fit"};
     26    }
     27 };
     28 
     29 let it = g.gen();
     30 let result = it.next();
     31 assertEq(result.done, false);
     32 assertEq(result.value, 0);
     33 result = it.next();
     34 assertEq(result.done, true);
     35 assertEq(result.value, "ok");