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();");