Bug 654734 - TrampolineCompiler::generateForceReturn should emit a call to ScriptDebugEpilogue.

This commit is contained in:
Jason Orendorff 2011-05-04 11:15:42 -05:00
parent eb6b206ec3
commit 9ab1ea72af
3 changed files with 48 additions and 0 deletions

View File

@ -0,0 +1,22 @@
// |jit-test| debug
// Check that {return:} resumption kills the current stack frame.
var g = newGlobal('new-compartment');
g.debuggeeGlobal = this;
g.eval("(" + function () {
var dbg = new Debug(debuggeeGlobal);
var prev = null;
dbg.hooks = {
debuggerHandler: function (frame) {
assertEq(frame === prev, false);
if (prev)
assertEq(prev.live, false);
prev = frame;
return {return: frame.arguments[0]};
}
};
} + ")();");
function f(i) { debugger; }
for (var i = 0; i < HOTLOOP + 2; i++)
assertEq(f(i), i);

View File

@ -0,0 +1,24 @@
// |jit-test| debug
// Check that {throw:} resumption kills the current stack frame.
load(libdir + "asserts.js");
var g = newGlobal('new-compartment');
g.debuggeeGlobal = this;
g.eval("(" + function () {
var dbg = new Debug(debuggeeGlobal);
var prev = null;
dbg.hooks = {
debuggerHandler: function (frame) {
assertEq(frame === prev, false);
if (prev)
assertEq(prev.live, false);
prev = frame;
return {throw: debuggeeGlobal.i};
}
};
} + ")();");
function f() { debugger; }
for (var i = 0; i < HOTLOOP + 2; i++)
assertThrowsValue(f, i);

View File

@ -116,6 +116,8 @@ TrampolineCompiler::compileTrampoline(Trampolines::TrampolinePtr *where,
bool
TrampolineCompiler::generateForceReturn(Assembler &masm)
{
masm.fallibleVMCall(JS_FUNC_TO_DATA_PTR(void *, stubs::ScriptDebugEpilogue), NULL, 0);
/* if (hasArgsObj() || hasCallObj()) stubs::PutActivationObjects() */
Jump noActObjs = masm.branchTest32(Assembler::Zero, FrameFlagsAddress(),
Imm32(StackFrame::HAS_CALL_OBJ | StackFrame::HAS_ARGS_OBJ));