Frame-offset-05.js (2235B)
1 // frame.offset works in async generator fns. 2 load(libdir + "asserts.js"); 3 4 var g = newGlobal({ newCompartment: true }); 5 var dbg = new Debugger(g); 6 g.eval(` 7 async function* f() { 8 yield 11; 9 yield 21; 10 yield 31; 11 } 12 `); 13 14 const ranges = []; 15 let script; 16 let frame; 17 dbg.onEnterFrame = function(f) { 18 if (frame) { 19 assertEq(f, frame); 20 assertEq(f.script, script); 21 } else { 22 frame = f; 23 script = f.script; 24 assertEq(frame instanceof Debugger.Frame, true); 25 assertEq(script instanceof Debugger.Script, true); 26 } 27 28 const range = [script.getOffsetMetadata(frame.offset).lineNumber, null]; 29 ranges.push(range); 30 f.onPop = () => { 31 range[1] = script.getOffsetMetadata(frame.offset).lineNumber; 32 }; 33 }; 34 35 (async () => { 36 let promise; 37 const it = g.f(); 38 39 assertEq(ranges.length, 1); 40 assertEq(ranges[0][0], 2); 41 assertEq(ranges[0][1], 2); 42 assertEq(script.getOffsetMetadata(frame.offset).lineNumber, 2); 43 44 promise = it.next(); 45 46 assertEq(ranges.length, 2); 47 assertEq(ranges[1][0], 2); 48 assertEq(ranges[1][1], 3); 49 assertEq(script.getOffsetMetadata(frame.offset).lineNumber, 3); 50 51 await promise; 52 53 assertEq(ranges.length, 3); 54 assertEq(ranges[2][0], 3); 55 assertEq(ranges[2][1], 3); 56 assertEq(script.getOffsetMetadata(frame.offset).lineNumber, 3); 57 58 promise = it.next(); 59 60 assertEq(ranges.length, 4); 61 assertEq(ranges[3][0], 3); 62 assertEq(ranges[3][1], 4); 63 assertEq(script.getOffsetMetadata(frame.offset).lineNumber, 4); 64 65 await promise; 66 67 assertEq(ranges.length, 5); 68 assertEq(ranges[4][0], 4); 69 assertEq(ranges[4][1], 4); 70 assertEq(script.getOffsetMetadata(frame.offset).lineNumber, 4); 71 72 promise = it.next(); 73 74 assertEq(ranges.length, 6); 75 assertEq(ranges[5][0], 4); 76 assertEq(ranges[5][1], 5); 77 assertEq(script.getOffsetMetadata(frame.offset).lineNumber, 5); 78 79 await promise; 80 81 assertEq(ranges.length, 7); 82 assertEq(ranges[6][0], 5); 83 assertEq(ranges[6][1], 5); 84 assertEq(script.getOffsetMetadata(frame.offset).lineNumber, 5); 85 86 promise = it.next(); 87 88 assertEq(ranges.length, 8); 89 assertEq(ranges[7][0], 5); 90 assertEq(ranges[7][1], 6); 91 92 // The frame has finished evaluating, so the callee is no longer accessible. 93 assertThrowsInstanceOf(() => frame.offset, Error); 94 })();