mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 654734 - TrampolineCompiler::generateForceReturn should emit a call to ScriptDebugEpilogue.
This commit is contained in:
parent
eb6b206ec3
commit
9ab1ea72af
22
js/src/jit-test/tests/debug/Frame-identity-01.js
Normal file
22
js/src/jit-test/tests/debug/Frame-identity-01.js
Normal 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);
|
24
js/src/jit-test/tests/debug/Frame-identity-02.js
Normal file
24
js/src/jit-test/tests/debug/Frame-identity-02.js
Normal 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);
|
@ -116,6 +116,8 @@ TrampolineCompiler::compileTrampoline(Trampolines::TrampolinePtr *where,
|
|||||||
bool
|
bool
|
||||||
TrampolineCompiler::generateForceReturn(Assembler &masm)
|
TrampolineCompiler::generateForceReturn(Assembler &masm)
|
||||||
{
|
{
|
||||||
|
masm.fallibleVMCall(JS_FUNC_TO_DATA_PTR(void *, stubs::ScriptDebugEpilogue), NULL, 0);
|
||||||
|
|
||||||
/* if (hasArgsObj() || hasCallObj()) stubs::PutActivationObjects() */
|
/* if (hasArgsObj() || hasCallObj()) stubs::PutActivationObjects() */
|
||||||
Jump noActObjs = masm.branchTest32(Assembler::Zero, FrameFlagsAddress(),
|
Jump noActObjs = masm.branchTest32(Assembler::Zero, FrameFlagsAddress(),
|
||||||
Imm32(StackFrame::HAS_CALL_OBJ | StackFrame::HAS_ARGS_OBJ));
|
Imm32(StackFrame::HAS_CALL_OBJ | StackFrame::HAS_ARGS_OBJ));
|
||||||
|
Loading…
Reference in New Issue
Block a user