lua

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

commit ee5ef0f295a317457132912c817d0ad9ee74e8af
parent 5bdee4f81057698cf7da2bb5da814984170abf8c
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date:   Thu, 22 Oct 2015 12:40:21 -0200

hook test in 'luaV_execute' reduced to minimum (rest done in
'luaG_traceexec'

Diffstat:
Mldebug.c | 6++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/ldebug.c b/ldebug.c @@ -1,5 +1,5 @@ /* -** $Id: ldebug.c,v 2.114 2015/03/28 19:14:47 roberto Exp roberto $ +** $Id: ldebug.c,v 2.115 2015/05/22 17:45:56 roberto Exp roberto $ ** Debug Interface ** See Copyright Notice in lua.h */ @@ -640,9 +640,11 @@ l_noret luaG_runerror (lua_State *L, const char *fmt, ...) { void luaG_traceexec (lua_State *L) { CallInfo *ci = L->ci; lu_byte mask = L->hookmask; - int counthook = ((mask & LUA_MASKCOUNT) && L->hookcount == 0); + int counthook = (--L->hookcount == 0 && (mask & LUA_MASKCOUNT)); if (counthook) resethookcount(L); /* reset count */ + else if (!(mask & LUA_MASKLINE)) + return; /* no line hook and count != 0; nothing to be done */ if (ci->callstatus & CIST_HOOKYIELD) { /* called hook last time? */ ci->callstatus &= ~CIST_HOOKYIELD; /* erase mark */ return; /* do not call hook again (VM yielded, so it did not move) */