resumption-09.js (870B)
1 // Test exception stack behavior when reusing completion values as resumption 2 // values. 3 4 load(libdir + "asserts.js"); 5 6 var g = newGlobal({newCompartment: true}); 7 g.eval(` 8 function foo() { 9 bar(); 10 } 11 function bar() { 12 debugger; 13 } 14 function baz() { 15 throw new Error(); 16 } 17 `); 18 19 var dbg = Debugger(g); 20 dbg.onDebuggerStatement = frame => { 21 return frame.eval("baz()"); 22 }; 23 24 let popHits = 0; 25 dbg.onEnterFrame = frame => { 26 frame.onPop = completion => { 27 popHits++; 28 // Resumption values ignore any 'stack' property, and the script location of 29 // the place where the hook was called will be used when throwing. 30 if (popHits <= 2) { 31 assertEq(completion.stack.functionDisplayName, "baz"); 32 } else { 33 assertEq(completion.stack.functionDisplayName, "bar"); 34 } 35 }; 36 }; 37 38 try { 39 g.eval("foo()"); 40 } catch (e) {} 41 assertEq(popHits, 5);