aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2014-06-12 16:07:30 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2014-06-12 16:07:30 -0300
commitfa3113ffbf4455871baf1d1d9d48679a17e6f3e5 (patch)
treeea9c4c8ba1427b1e6483a7fc4a448760585ae815
parentd94bb6c273d05005504be78f2caab2451aeb2cee (diff)
downloadlua-fa3113ffbf4455871baf1d1d9d48679a17e6f3e5.tar.gz
lua-fa3113ffbf4455871baf1d1d9d48679a17e6f3e5.tar.bz2
lua-fa3113ffbf4455871baf1d1d9d48679a17e6f3e5.zip
cleaner way to handle bit CIST_OAH (with auxiliar macros)
-rw-r--r--lapi.c7
-rw-r--r--ldo.c4
-rw-r--r--lstate.h21
3 files changed, 16 insertions, 16 deletions
diff --git a/lapi.c b/lapi.c
index f775b1df..106da209 100644
--- a/lapi.c
+++ b/lapi.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lapi.c,v 2.216 2014/06/10 18:51:21 roberto Exp roberto $ 2** $Id: lapi.c,v 2.217 2014/06/10 19:13:26 roberto Exp roberto $
3** Lua API 3** Lua API
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -970,10 +970,7 @@ LUA_API int lua_pcallk (lua_State *L, int nargs, int nresults, int errfunc,
970 ci->extra = savestack(L, c.func); 970 ci->extra = savestack(L, c.func);
971 ci->u.c.old_errfunc = L->errfunc; 971 ci->u.c.old_errfunc = L->errfunc;
972 L->errfunc = func; 972 L->errfunc = func;
973 if (L->allowhook) /* save original value of 'allowhook' */ 973 setoah(ci->callstatus, L->allowhook); /* save value of 'allowhook' */
974 ci->callstatus |= CIST_OAH;
975 else
976 ci->callstatus &= ~CIST_OAH;
977 ci->callstatus |= CIST_YPCALL; /* function can do error recovery */ 974 ci->callstatus |= CIST_YPCALL; /* function can do error recovery */
978 luaD_call(L, c.func, nresults, 1); /* do the call */ 975 luaD_call(L, c.func, nresults, 1); /* do the call */
979 ci->callstatus &= ~CIST_YPCALL; 976 ci->callstatus &= ~CIST_YPCALL;
diff --git a/ldo.c b/ldo.c
index 6e695a5c..6b131d46 100644
--- a/ldo.c
+++ b/ldo.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ldo.c,v 2.120 2014/06/10 19:18:50 roberto Exp roberto $ 2** $Id: ldo.c,v 2.121 2014/06/11 16:01:55 roberto Exp roberto $
3** Stack and Call structure of Lua 3** Stack and Call structure of Lua
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -492,7 +492,7 @@ static int recover (lua_State *L, int status) {
492 luaF_close(L, oldtop); 492 luaF_close(L, oldtop);
493 seterrorobj(L, status, oldtop); 493 seterrorobj(L, status, oldtop);
494 L->ci = ci; 494 L->ci = ci;
495 L->allowhook = (ci->callstatus & CIST_OAH); 495 L->allowhook = getoah(ci->callstatus); /* restore original 'allowhook' */
496 L->nny = 0; /* should be zero to be yieldable */ 496 L->nny = 0; /* should be zero to be yieldable */
497 luaD_shrinkstack(L); 497 luaD_shrinkstack(L);
498 L->errfunc = ci->u.c.old_errfunc; 498 L->errfunc = ci->u.c.old_errfunc;
diff --git a/lstate.h b/lstate.h
index b03ed4f8..47dddcec 100644
--- a/lstate.h
+++ b/lstate.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lstate.h,v 2.105 2014/06/10 18:51:21 roberto Exp roberto $ 2** $Id: lstate.h,v 2.106 2014/06/10 19:18:50 roberto Exp roberto $
3** Global State 3** Global State
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -80,18 +80,21 @@ typedef struct CallInfo {
80/* 80/*
81** Bits in CallInfo status 81** Bits in CallInfo status
82*/ 82*/
83#define CIST_LUA (1<<0) /* call is running a Lua function */ 83#define CIST_OAH (1<<0) /* original value of 'allowhook' */
84#define CIST_HOOKED (1<<1) /* call is running a debug hook */ 84#define CIST_LUA (1<<1) /* call is running a Lua function */
85#define CIST_REENTRY (1<<2) /* call is running on same invocation of 85#define CIST_HOOKED (1<<2) /* call is running a debug hook */
86#define CIST_REENTRY (1<<3) /* call is running on same invocation of
86 luaV_execute of previous call */ 87 luaV_execute of previous call */
87#define CIST_YPCALL (1<<3) /* call is a yieldable protected call */ 88#define CIST_YPCALL (1<<4) /* call is a yieldable protected call */
88#define CIST_TAIL (1<<4) /* call was tail called */ 89#define CIST_TAIL (1<<5) /* call was tail called */
89#define CIST_HOOKYIELD (1<<5) /* last hook called yielded */ 90#define CIST_HOOKYIELD (1<<6) /* last hook called yielded */
90#define CIST_OAH (1<<6) /* original value of 'allowhook' */
91
92 91
93#define isLua(ci) ((ci)->callstatus & CIST_LUA) 92#define isLua(ci) ((ci)->callstatus & CIST_LUA)
94 93
94/* assume that CIST_OAH has offset 0 and that 'v' is strictly 0/1 */
95#define setoah(st,v) ((st) = ((st) & ~CIST_OAH) | (v))
96#define getoah(st) ((st) & CIST_OAH)
97
95 98
96/* 99/*
97** `global state', shared by all threads of this state 100** `global state', shared by all threads of this state