Debugger-onEnterFrame-resumption-01.js (1071B)
1 // If debugger.onEnterFrame returns {return:val}, the frame returns. 2 3 var g = newGlobal({newCompartment: true}); 4 g.set = false; 5 g.eval("function f() {\n" + 6 " set = true;\n" + 7 " return 'fail';\n" + 8 "}\n"); 9 g.eval("function g() { return 'g ' + f(); }"); 10 g.eval("function h() { return 'h ' + g(); }"); 11 12 var dbg = Debugger(g); 13 var savedFrame; 14 dbg.onEnterFrame = function (frame) { 15 savedFrame = frame; 16 return {return: "pass"}; 17 }; 18 19 // Call g.f as a function. 20 savedFrame = undefined; 21 assertEq(g.f(), "pass"); 22 assertEq(savedFrame.onStack, false); 23 assertEq(g.set, false); 24 25 // Call g.f as a constructor. 26 savedFrame = undefined; 27 var r = new g.f; 28 assertEq(typeof r, "object"); 29 assertEq(savedFrame.onStack, false); 30 assertEq(g.set, false); 31 32 var count = 0; 33 dbg.onEnterFrame = function (frame) { 34 count++; 35 if (count == 3) { 36 savedFrame = frame; 37 return {return: "pass"}; 38 } 39 return undefined; 40 }; 41 g.set = false; 42 savedFrame = undefined; 43 assertEq(g.h(), "h g pass"); 44 assertEq(savedFrame.onStack, false); 45 assertEq(g.set, false);