Frame-offset-04.js (1144B)
1 // frame.offset works in async fns. 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() { 9 await Promise.resolve(); 10 } 11 `); 12 13 const ranges = []; 14 let script; 15 let frame; 16 dbg.onEnterFrame = function(f) { 17 if (frame) { 18 assertEq(f, frame); 19 assertEq(f.script, script); 20 } else { 21 frame = f; 22 script = f.script; 23 assertEq(frame instanceof Debugger.Frame, true); 24 assertEq(script instanceof Debugger.Script, true); 25 } 26 27 const range = [script.getOffsetMetadata(frame.offset).lineNumber, null]; 28 ranges.push(range); 29 f.onPop = () => { 30 range[1] = script.getOffsetMetadata(frame.offset).lineNumber; 31 }; 32 }; 33 34 (async () => { 35 const promise = g.f(); 36 37 assertEq(ranges.length, 1); 38 assertEq(ranges[0][0], 2); 39 assertEq(ranges[0][1], 3); 40 assertEq(script.getOffsetMetadata(frame.offset).lineNumber, 3); 41 42 await promise; 43 44 assertEq(ranges.length, 2); 45 assertEq(ranges[1][0], 3); 46 assertEq(ranges[1][1], 4); 47 48 // The frame has finished evaluating, so the callee is no longer accessible. 49 assertThrowsInstanceOf(() => frame.offset, Error); 50 })();