瀏覽代碼

avoid calling "tail return" hooks if the hook itself turns off the event

Roberto Ierusalimschy 17 年之前
父節點
當前提交
e7c989baf1
共有 1 個文件被更改,包括 2 次插入2 次删除
  1. 2 2
      ldo.c

+ 2 - 2
ldo.c

@@ -1,5 +1,5 @@
 /*
-** $Id: ldo.c,v 2.44 2006/10/10 17:40:17 roberto Exp roberto $
+** $Id: ldo.c,v 2.45 2007/03/27 14:11:38 roberto Exp roberto $
 ** Stack and Call structure of Lua
 ** See Copyright Notice in lua.h
 */
@@ -332,7 +332,7 @@ static StkId callrethooks (lua_State *L, StkId firstResult) {
   ptrdiff_t fr = savestack(L, firstResult);  /* next call may change stack */
   luaD_callhook(L, LUA_HOOKRET, -1);
   if (f_isLua(L->ci)) {  /* Lua function? */
-    while (L->ci->tailcalls--)  /* call hook for possible tail calls */
+    while ((L->hookmask & LUA_MASKRET) && L->ci->tailcalls--) /* tail calls */
       luaD_callhook(L, LUA_HOOKTAILRET, -1);
   }
   return restorestack(L, fr);