mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
FFI: Fix line info for result conversion errors in callbacks.
This commit is contained in:
parent
90c445851f
commit
b3f16cb64d
@ -377,7 +377,7 @@ void LJ_FASTCALL lj_ccallback_leave(CTState *cts, TValue *o)
|
||||
fn = curr_func(L);
|
||||
if (isluafunc(fn)) {
|
||||
GCproto *pt = funcproto(fn);
|
||||
setcframe_pc(L->cframe, proto_bc(pt)+pt->sizebc);
|
||||
setcframe_pc(L->cframe, proto_bc(pt)+pt->sizebc+1);
|
||||
}
|
||||
callback_conv_result(cts, L, o);
|
||||
/* Finally drop C frame and continuation frame. */
|
||||
|
@ -90,7 +90,7 @@ static BCPos debug_framepc(lua_State *L, GCfunc *fn, cTValue *nextframe)
|
||||
pt = funcproto(fn);
|
||||
pos = proto_bcpos(pt, ins) - 1;
|
||||
#if LJ_HASJIT
|
||||
if (pos >= pt->sizebc) { /* Undo the effects of lj_trace_exit for JLOOP. */
|
||||
if (pos > pt->sizebc) { /* Undo the effects of lj_trace_exit for JLOOP. */
|
||||
GCtrace *T = (GCtrace *)((char *)(ins-1) - offsetof(GCtrace, startins));
|
||||
lua_assert(bc_isret(bc_op(ins[-1])));
|
||||
pos = proto_bcpos(pt, mref(T->startpc, const BCIns));
|
||||
@ -105,9 +105,9 @@ static BCPos debug_framepc(lua_State *L, GCfunc *fn, cTValue *nextframe)
|
||||
BCLine LJ_FASTCALL lj_debug_line(GCproto *pt, BCPos pc)
|
||||
{
|
||||
const void *lineinfo = proto_lineinfo(pt);
|
||||
if (pc < pt->sizebc && lineinfo) {
|
||||
if (pc <= pt->sizebc && lineinfo) {
|
||||
BCLine first = pt->firstline;
|
||||
if (pc == pt->sizebc-1) return first + pt->numline;
|
||||
if (pc == pt->sizebc) return first + pt->numline;
|
||||
if (pc-- == 0) return first;
|
||||
if (pt->numline < 256)
|
||||
return first + (BCLine)((const uint8_t *)lineinfo)[pc];
|
||||
|
Loading…
Reference in New Issue
Block a user