aboutsummaryrefslogtreecommitdiff
path: root/src/lj_err.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_err.c36
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. */
942LJ_NOINLINE void lj_err_callermsg(lua_State *L, const char *msg) 942LJ_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);