Frame-callee-04.js (1028B)
1 // Frame.prototype.callee for an async generator function frame. 2 3 load(libdir + "asserts.js"); 4 5 var g = newGlobal({ newCompartment: true }); 6 var dbg = new Debugger(g); 7 g.eval(` 8 async function* f() { await Promise.resolve(); } 9 `); 10 11 const fObj = dbg.makeGlobalObjectReference(g).makeDebuggeeValue(g.f); 12 let frame; 13 let callee; 14 dbg.onEnterFrame = function(f) { 15 frame = f; 16 callee = frame.callee; 17 }; 18 19 const it = g.f(); 20 21 assertEq(frame instanceof Debugger.Frame, true); 22 assertEq(callee instanceof Debugger.Object, true); 23 assertEq(callee, fObj); 24 assertEq(frame.callee, callee); 25 26 let lastFrame = frame; 27 let lastCallee = callee; 28 frame = null; 29 callee = null; 30 31 const promise = it.next(); 32 33 assertEq(callee, fObj); 34 assertEq(frame.callee, callee); 35 36 lastFrame = frame; 37 lastCallee = callee; 38 frame = null; 39 callee = null; 40 41 promise.then(() => { 42 assertEq(frame, lastFrame); 43 assertEq(callee, lastCallee); 44 45 // The frame has finished evaluating, so the callee is no longer accessible. 46 assertThrowsInstanceOf(() => frame.callee, Error); 47 });