onDebuggerStatement-generator-resumption-01.js (849B)
1 // A Debugger can {return:} from onDebuggerStatement in a generator. 2 3 load(libdir + "asserts.js"); 4 5 let g = newGlobal({newCompartment: true}); 6 g.eval(` 7 function* f1() { 8 debugger; 9 yield 1; 10 } 11 12 function* f2() { 13 yield 1; 14 debugger; 15 yield 2; 16 } 17 `); 18 19 let dbg = Debugger(g); 20 dbg.onDebuggerStatement = frame => ({return: "Ronja"}); 21 22 let genObj = g.f1(); 23 assertDeepEq(genObj.next(), {value: "Ronja", done: true}); 24 // Forced return closes the generator. Closed generators behave like this: 25 assertDeepEq(genObj.next(), {value: undefined, done: true}); 26 27 // It works the same after resuming from a yield. 28 genObj = g.f2(); 29 assertDeepEq(genObj.next(), {value: 1, done: false}); 30 assertDeepEq(genObj.next(), {value: "Ronja", done: true}); 31 assertDeepEq(genObj.next(), {value: undefined, done: true}); // closed