diff options
Diffstat (limited to '')
-rw-r--r-- | src/lj_err.c | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/src/lj_err.c b/src/lj_err.c index 1a518d9c..fda4a59c 100644 --- a/src/lj_err.c +++ b/src/lj_err.c | |||
@@ -941,25 +941,27 @@ LJ_NOINLINE void lj_err_optype_call(lua_State *L, TValue *o) | |||
941 | /* Error in context of caller. */ | 941 | /* Error in context of caller. */ |
942 | LJ_NOINLINE void lj_err_callermsg(lua_State *L, const char *msg) | 942 | LJ_NOINLINE void lj_err_callermsg(lua_State *L, const char *msg) |
943 | { | 943 | { |
944 | TValue *frame = L->base-1; | 944 | TValue *frame = NULL, *pframe = NULL; |
945 | TValue *pframe = NULL; | 945 | if (!(LJ_HASJIT && tvref(G(L)->jit_base))) { |
946 | if (frame_islua(frame)) { | 946 | frame = L->base-1; |
947 | pframe = frame_prevl(frame); | 947 | if (frame_islua(frame)) { |
948 | } else if (frame_iscont(frame)) { | 948 | pframe = frame_prevl(frame); |
949 | if (frame_iscont_fficb(frame)) { | 949 | } else if (frame_iscont(frame)) { |
950 | pframe = frame; | 950 | if (frame_iscont_fficb(frame)) { |
951 | frame = NULL; | 951 | pframe = frame; |
952 | } else { | 952 | frame = NULL; |
953 | pframe = frame_prevd(frame); | 953 | } else { |
954 | pframe = frame_prevd(frame); | ||
954 | #if LJ_HASFFI | 955 | #if LJ_HASFFI |
955 | /* Remove frame for FFI metamethods. */ | 956 | /* Remove frame for FFI metamethods. */ |
956 | if (frame_func(frame)->c.ffid >= FF_ffi_meta___index && | 957 | if (frame_func(frame)->c.ffid >= FF_ffi_meta___index && |
957 | frame_func(frame)->c.ffid <= FF_ffi_meta___tostring) { | 958 | frame_func(frame)->c.ffid <= FF_ffi_meta___tostring) { |
958 | L->base = pframe+1; | 959 | L->base = pframe+1; |
959 | L->top = frame; | 960 | L->top = frame; |
960 | setcframe_pc(cframe_raw(L->cframe), frame_contpc(frame)); | 961 | setcframe_pc(cframe_raw(L->cframe), frame_contpc(frame)); |
961 | } | 962 | } |
962 | #endif | 963 | #endif |
964 | } | ||
963 | } | 965 | } |
964 | } | 966 | } |
965 | lj_debug_addloc(L, msg, pframe, frame); | 967 | lj_debug_addloc(L, msg, pframe, frame); |