aboutsummaryrefslogtreecommitdiff
path: root/ldebug.c
diff options
context:
space:
mode:
Diffstat (limited to 'ldebug.c')
-rw-r--r--ldebug.c35
1 files changed, 22 insertions, 13 deletions
diff --git a/ldebug.c b/ldebug.c
index 91a3fc95..798d7eea 100644
--- a/ldebug.c
+++ b/ldebug.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ldebug.c,v 1.135 2002/10/16 20:40:58 roberto Exp roberto $ 2** $Id: ldebug.c,v 1.136 2002/11/07 15:37:10 roberto Exp roberto $
3** Debug Interface 3** Debug Interface
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -49,20 +49,29 @@ static int currentline (CallInfo *ci) {
49} 49}
50 50
51 51
52LUA_API int lua_sethook (lua_State *L, lua_Hook func, unsigned long mask) { 52void luaG_inithooks (lua_State *L) {
53 int allow;
54 CallInfo *ci; 53 CallInfo *ci;
55 lua_lock(L);
56 allow = allowhook(L);
57 if (func == NULL) mask = 0;
58 else if (mask == 0) func = NULL;
59 L->hook = func;
60 L->hookmask = mask;
61 setallowhook(L, allow);
62 resethookcount(L);
63 for (ci = L->ci; ci != L->base_ci; ci--) /* update all `savedpc's */ 54 for (ci = L->ci; ci != L->base_ci; ci--) /* update all `savedpc's */
64 currentpc(ci); 55 currentpc(ci);
65 lua_unlock(L); 56 L->hookinit = 1;
57}
58
59
60/*
61** this function can be called asynchronous (e.g. during a signal)
62*/
63LUA_API int lua_sethook (lua_State *L, lua_Hook func, unsigned long mask) {
64 ls_count count = lua_getmaskcount(mask);
65 if (func == NULL || mask == 0) { /* turn off hooks? */
66 mask = 0;
67 func = NULL;
68 }
69 else if (count > 0) mask |= (1<<LUA_HOOKCOUNT);
70 L->hook = func;
71 L->basehookcount = count;
72 resethookcount(L);
73 L->hookmask = cast(lu_byte, mask & 0xf);
74 L->hookinit = 0;
66 return 1; 75 return 1;
67} 76}
68 77
@@ -73,7 +82,7 @@ LUA_API lua_Hook lua_gethook (lua_State *L) {
73 82
74 83
75LUA_API unsigned long lua_gethookmask (lua_State *L) { 84LUA_API unsigned long lua_gethookmask (lua_State *L) {
76 return L->hookmask; 85 return L->hookmask | LUA_MASKCOUNT(L->basehookcount);
77} 86}
78 87
79 88