Debugger-getNewestFrame-generators-01.js (1099B)
1 // Generator/async frames can be created and revived by calling Debugger.getNewestFrame(). 2 // 3 // Modified copy of Frame-older-generators-01.js. 4 5 let g = newGlobal({newCompartment: true}); 6 g.eval(` 7 function* gen() { 8 f(); 9 yield 1; 10 f(); 11 } 12 function* genDefaults(x=f()) { 13 f(); 14 } 15 async function af() { 16 f(); 17 await 1; 18 f(); 19 } 20 async function afDefaults(x=f()) { 21 await 1; 22 f(); 23 } 24 `); 25 26 function test(expected, code) { 27 let dbg = Debugger(g); 28 let hits = 0; 29 let genFrame = null; 30 g.f = () => { 31 hits++; 32 let frame = dbg.getNewestFrame(); 33 if (genFrame === null) { 34 genFrame = frame; 35 } else { 36 assertEq(frame, genFrame); 37 } 38 assertEq(genFrame.callee.name, expected); 39 } 40 41 g.eval(code); 42 assertEq(hits, 2); 43 dbg.removeDebuggee(g); 44 } 45 46 test("gen", "for (var x of gen()) {}"); 47 test("genDefaults", "for (var x of genDefaults()) {}"); 48 test("af", "af(); drainJobQueue();"); 49 test("afDefaults", "afDefaults(); drainJobQueue();")