diff options
author | Mike Pall <mike> | 2010-11-27 20:23:39 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-11-27 20:23:39 +0100 |
commit | 24186e05e66550951002ccca6f7fb4782c5c0319 (patch) | |
tree | 24b31ced03a97213aaf1179afe37d65bbe6091fe /src | |
parent | 35890f66c17562759d397e65ab3f15bcec7819ad (diff) | |
download | luajit-24186e05e66550951002ccca6f7fb4782c5c0319.tar.gz luajit-24186e05e66550951002ccca6f7fb4782c5c0319.tar.bz2 luajit-24186e05e66550951002ccca6f7fb4782c5c0319.zip |
Remove metamethod frame for errors from internal metamethods.
Diffstat (limited to 'src')
-rw-r--r-- | src/lj_err.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/lj_err.c b/src/lj_err.c index 65029092..0d5aa683 100644 --- a/src/lj_err.c +++ b/src/lj_err.c | |||
@@ -903,9 +903,12 @@ LJ_NOINLINE void lj_err_optype_call(lua_State *L, TValue *o) | |||
903 | /* Error in context of caller. */ | 903 | /* Error in context of caller. */ |
904 | LJ_NOINLINE void lj_err_callermsg(lua_State *L, const char *msg) | 904 | LJ_NOINLINE void lj_err_callermsg(lua_State *L, const char *msg) |
905 | { | 905 | { |
906 | cTValue *frame = L->base-1; | 906 | TValue *frame = L->base-1; |
907 | cTValue *pframe = frame_islua(frame) ? frame_prevl(frame) : | 907 | TValue *pframe = NULL; |
908 | frame_iscont(frame) ? frame_prevd(frame) : NULL; | 908 | if (frame_islua(frame)) |
909 | pframe = frame_prevl(frame); | ||
910 | else if (frame_iscont(frame)) | ||
911 | L->base = (pframe = frame_prevd(frame))+1; /* Remove metamethod frame. */ | ||
909 | err_loc(L, msg, pframe, frame); | 912 | err_loc(L, msg, pframe, frame); |
910 | lj_err_run(L); | 913 | lj_err_run(L); |
911 | } | 914 | } |