Frame-onStack-05.js (966B)
1 // frame.onStack is false for frames removed after their compartments stopped being debuggees. 2 3 load(libdir + 'asserts.js'); 4 5 var g1 = newGlobal({newCompartment: true}); 6 var g2 = newGlobal({newCompartment: true}); 7 var dbg = Debugger(g1, g2); 8 var hits = 0; 9 var snapshot = []; 10 dbg.onDebuggerStatement = function (frame) { 11 if (hits++ === 0) { 12 assertEq(frame.eval("x();"), null); 13 } else { 14 for (var f = frame; f; f = f.older) { 15 if (f.type === "call" && f.script !== null) 16 snapshot.push(f); 17 } 18 dbg.removeDebuggee(g2); 19 return null; 20 } 21 }; 22 23 g1.eval("function z() { debugger; }"); 24 g2.z = g1.z; 25 g2.eval("function y() { z(); }"); 26 g2.eval("function x() { y(); }"); 27 assertEq(g2.eval("debugger; 'ok';"), "ok"); 28 assertEq(hits, 2); 29 assertEq(snapshot.length, 3); 30 for (var i = 0; i < snapshot.length; i++) { 31 assertEq(snapshot[i].onStack, false); 32 assertThrowsInstanceOf(() => frame.script, Error); 33 }