From b3f16cb64d8eef247d3763eb90ece38810f29781 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Fri, 25 Nov 2011 19:25:44 +0100 Subject: [PATCH] FFI: Fix line info for result conversion errors in callbacks. --- src/lj_ccallback.c | 2 +- src/lj_debug.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lj_ccallback.c b/src/lj_ccallback.c index 597b3c11..f8d95d39 100644 --- a/src/lj_ccallback.c +++ b/src/lj_ccallback.c @@ -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. */ diff --git a/src/lj_debug.c b/src/lj_debug.c index 4038e209..89434aaf 100644 --- a/src/lj_debug.c +++ b/src/lj_debug.c @@ -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];