From 24186e05e66550951002ccca6f7fb4782c5c0319 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sat, 27 Nov 2010 20:23:39 +0100 Subject: [PATCH] Remove metamethod frame for errors from internal metamethods. --- src/lj_err.c | 9 ++++++--- 1 file 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) /* Error in context of caller. */ LJ_NOINLINE void lj_err_callermsg(lua_State *L, const char *msg) { - cTValue *frame = L->base-1; - cTValue *pframe = frame_islua(frame) ? frame_prevl(frame) : - frame_iscont(frame) ? frame_prevd(frame) : NULL; + TValue *frame = L->base-1; + TValue *pframe = NULL; + if (frame_islua(frame)) + pframe = frame_prevl(frame); + else if (frame_iscont(frame)) + L->base = (pframe = frame_prevd(frame))+1; /* Remove metamethod frame. */ err_loc(L, msg, pframe, frame); lj_err_run(L); }