lua

A copy of the Lua development repository
Log | Files | Refs | README

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:
Mldo.c | 4++--
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);