aboutsummaryrefslogtreecommitdiff
path: root/src/lj_err.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_err.c')
-rw-r--r--src/lj_err.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/lj_err.c b/src/lj_err.c
index 239f6e4f..12f32af2 100644
--- a/src/lj_err.c
+++ b/src/lj_err.c
@@ -17,6 +17,7 @@
17#include "lj_state.h" 17#include "lj_state.h"
18#include "lj_frame.h" 18#include "lj_frame.h"
19#include "lj_bc.h" 19#include "lj_bc.h"
20#include "lj_ff.h"
20#include "lj_trace.h" 21#include "lj_trace.h"
21#include "lj_vm.h" 22#include "lj_vm.h"
22 23
@@ -903,10 +904,19 @@ LJ_NOINLINE void lj_err_callermsg(lua_State *L, const char *msg)
903{ 904{
904 TValue *frame = L->base-1; 905 TValue *frame = L->base-1;
905 TValue *pframe = NULL; 906 TValue *pframe = NULL;
906 if (frame_islua(frame)) 907 if (frame_islua(frame)) {
907 pframe = frame_prevl(frame); 908 pframe = frame_prevl(frame);
908 else if (frame_iscont(frame)) 909 } else if (frame_iscont(frame)) {
909 L->base = (pframe = frame_prevd(frame))+1; /* Remove metamethod frame. */ 910 pframe = frame_prevd(frame);
911#if LJ_HASFFI
912 /* Remove frame for FFI metamethods. */
913 if (frame_func(frame)->c.ffid >= FF_ffi_meta___index &&
914 frame_func(frame)->c.ffid <= FF_ffi_meta___tostring) {
915 L->base = pframe+1;
916 L->top = frame;
917 }
918#endif
919 }
910 err_loc(L, msg, pframe, frame); 920 err_loc(L, msg, pframe, frame);
911 lj_err_run(L); 921 lj_err_run(L);
912} 922}