소스 검색

Remove metamethod frame for errors from internal metamethods.

Mike Pall 15 년 전
부모
커밋
24186e05e6
1개의 변경된 파일6개의 추가작업 그리고 3개의 파일을 삭제
  1. 6 3
      src/lj_err.c

+ 6 - 3
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);
 }