commit e7c989baf16aee1f2b5ad52bc512c5c02d9d4048
parent 7a3c8314aca39e665078989a9846d79aac056db4
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date: Fri, 18 Jan 2008 20:36:27 -0200
avoid calling "tail return" hooks if the hook itself turns off the event
Diffstat:
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ldo.c b/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);