- switch to using setjmp/longjmp for exception handling
This commit is contained in:
parent
2b05e75656
commit
884e185db0
6 changed files with 102 additions and 125 deletions
|
|
@ -170,16 +170,13 @@ void JitCompiler::EmitDoCall(asmjit::X86Gp ptr)
|
|||
}
|
||||
|
||||
auto result = newResultInt32();
|
||||
auto call = CreateCall<int, VMFunction*, int, int, VMValue*, VMReturn*, JitExceptionInfo*>(&JitCompiler::DoCall);
|
||||
auto call = CreateCall<int, VMFunction*, int, int, VMValue*, VMReturn*>(&JitCompiler::DoCall);
|
||||
call->setRet(0, result);
|
||||
call->setArg(0, ptr);
|
||||
call->setArg(1, Imm(B));
|
||||
call->setArg(2, Imm(C));
|
||||
call->setArg(3, paramsptr);
|
||||
call->setArg(4, callReturns);
|
||||
call->setArg(5, exceptInfo);
|
||||
|
||||
EmitCheckForException();
|
||||
|
||||
LoadInOuts(B);
|
||||
LoadReturns(pc + 1, C);
|
||||
|
|
@ -214,14 +211,13 @@ void JitCompiler::EmitDoTail(asmjit::X86Gp ptr)
|
|||
}
|
||||
|
||||
auto result = newResultInt32();
|
||||
auto call = CreateCall<int, VMFunction*, int, int, VMValue*, VMReturn*, JitExceptionInfo*>(&JitCompiler::DoCall);
|
||||
auto call = CreateCall<int, VMFunction*, int, int, VMValue*, VMReturn*>(&JitCompiler::DoCall);
|
||||
call->setRet(0, result);
|
||||
call->setArg(0, ptr);
|
||||
call->setArg(1, Imm(B));
|
||||
call->setArg(2, numret);
|
||||
call->setArg(3, paramsptr);
|
||||
call->setArg(4, ret);
|
||||
call->setArg(5, exceptInfo);
|
||||
|
||||
EmitPopFrame();
|
||||
cc.ret(result);
|
||||
|
|
@ -393,7 +389,7 @@ void JitCompiler::FillReturns(const VMOP *retval, int numret)
|
|||
}
|
||||
}
|
||||
|
||||
int JitCompiler::DoCall(VMFunction *call, int b, int c, VMValue *param, VMReturn *returns, JitExceptionInfo *exceptinfo)
|
||||
int JitCompiler::DoCall(VMFunction *call, int b, int c, VMValue *param, VMReturn *returns)
|
||||
{
|
||||
try
|
||||
{
|
||||
|
|
@ -424,8 +420,7 @@ int JitCompiler::DoCall(VMFunction *call, int b, int c, VMValue *param, VMReturn
|
|||
}
|
||||
catch (...)
|
||||
{
|
||||
exceptinfo->reason = X_OTHER;
|
||||
exceptinfo->cppException = std::current_exception();
|
||||
VMThrowException(std::current_exception());
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue