Frame-onPop-generators-05.js (835B)
1 // In .onPop for the "initial yield" of a generator, while the generator frame 2 // is on the stack, the generator object's .next() method throws. 3 4 let g = newGlobal({newCompartment: true}); 5 g.eval(` 6 function* f() { 7 return "ok"; 8 } 9 `); 10 11 let hits = 0; 12 let dbg = new Debugger; 13 let gw = dbg.addDebuggee(g); 14 dbg.onEnterFrame = frame => { 15 dbg.onEnterFrame = undefined; // Trigger only once. 16 frame.onPop = completion => { 17 // Initial yield. 18 let genObj = completion.return; 19 assertEq(genObj.class, "Generator"); 20 let result = frame.evalWithBindings("genObj.next()", {genObj}); 21 assertEq(result.throw.class, "TypeError"); 22 assertEq(result.throw.getProperty("message").return, 23 "already executing generator"); 24 hits++; 25 }; 26 }; 27 28 g.f(); 29 assertEq(hits, 1);