diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1999-02-04 15:47:59 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1999-02-04 15:47:59 -0200 |
| commit | 568794956025183fc9a9b79e0c818a885e3d0aeb (patch) | |
| tree | 02d1a74d7c9a16ca06e94ab4308694ad04f49012 | |
| parent | 19de5b22054f6da2c3e0eb3138cc7a1195aab4fd (diff) | |
| download | lua-568794956025183fc9a9b79e0c818a885e3d0aeb.tar.gz lua-568794956025183fc9a9b79e0c818a885e3d0aeb.tar.bz2 lua-568794956025183fc9a9b79e0c818a885e3d0aeb.zip | |
"lua_debug", "lua_callhook" and "lua_linehook" must be inside "lua_state".
| -rw-r--r-- | lapi.c | 14 | ||||
| -rw-r--r-- | ldblib.c | 19 | ||||
| -rw-r--r-- | ldo.c | 14 | ||||
| -rw-r--r-- | llex.c | 9 | ||||
| -rw-r--r-- | lparser.c | 6 | ||||
| -rw-r--r-- | lstate.c | 5 | ||||
| -rw-r--r-- | lstate.h | 7 | ||||
| -rw-r--r-- | lua.c | 14 | ||||
| -rw-r--r-- | luadebug.h | 13 | ||||
| -rw-r--r-- | lvm.c | 8 |
10 files changed, 53 insertions, 56 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lapi.c,v 1.32 1999/01/26 15:31:17 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 1.33 1999/02/03 16:42:42 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 | */ |
| @@ -439,20 +439,20 @@ lua_State *lua_setstate (lua_State *st) { | |||
| 439 | } | 439 | } |
| 440 | 440 | ||
| 441 | lua_LHFunction lua_setlinehook (lua_LHFunction func) { | 441 | lua_LHFunction lua_setlinehook (lua_LHFunction func) { |
| 442 | lua_LHFunction old = lua_linehook; | 442 | lua_LHFunction old = L->linehook; |
| 443 | lua_linehook = func; | 443 | L->linehook = func; |
| 444 | return old; | 444 | return old; |
| 445 | } | 445 | } |
| 446 | 446 | ||
| 447 | lua_CHFunction lua_setcallhook (lua_CHFunction func) { | 447 | lua_CHFunction lua_setcallhook (lua_CHFunction func) { |
| 448 | lua_CHFunction old = lua_callhook; | 448 | lua_CHFunction old = L->callhook; |
| 449 | lua_callhook = func; | 449 | L->callhook = func; |
| 450 | return old; | 450 | return old; |
| 451 | } | 451 | } |
| 452 | 452 | ||
| 453 | int lua_setdebug (int debug) { | 453 | int lua_setdebug (int debug) { |
| 454 | int old = lua_debug; | 454 | int old = L->debug; |
| 455 | lua_debug = debug; | 455 | L->debug = debug; |
| 456 | return old; | 456 | return old; |
| 457 | } | 457 | } |
| 458 | 458 | ||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: ldblib.c,v 1.2 1999/01/11 18:57:35 roberto Exp roberto $ | 2 | ** $Id: ldblib.c,v 1.3 1999/01/15 11:36:28 roberto Exp roberto $ |
| 3 | ** Interface from Lua to its debug API | 3 | ** Interface from Lua to its debug API |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -147,12 +147,11 @@ static int callhook = -1; /* Lua reference to call hook function */ | |||
| 147 | 147 | ||
| 148 | 148 | ||
| 149 | static void dohook (int ref) { | 149 | static void dohook (int ref) { |
| 150 | lua_LHFunction oldlinehook = lua_linehook; /* save old hooks */ | 150 | lua_LHFunction oldlinehook = lua_setlinehook(NULL); |
| 151 | lua_CHFunction oldcallhook = lua_callhook; | 151 | lua_CHFunction oldcallhook = lua_setcallhook(NULL); |
| 152 | lua_linehook = NULL; lua_callhook = NULL; /* to avoid recusive calls */ | ||
| 153 | lua_callfunction(lua_getref(ref)); | 152 | lua_callfunction(lua_getref(ref)); |
| 154 | lua_linehook = oldlinehook; /* restore old hooks */ | 153 | lua_setlinehook(oldlinehook); |
| 155 | lua_callhook = oldcallhook; | 154 | lua_setcallhook(oldcallhook); |
| 156 | } | 155 | } |
| 157 | 156 | ||
| 158 | 157 | ||
| @@ -177,12 +176,12 @@ static void setcallhook (void) { | |||
| 177 | lua_unref(callhook); | 176 | lua_unref(callhook); |
| 178 | if (f == LUA_NOOBJECT) { | 177 | if (f == LUA_NOOBJECT) { |
| 179 | callhook = -1; | 178 | callhook = -1; |
| 180 | lua_callhook = NULL; | 179 | lua_setcallhook(NULL); |
| 181 | } | 180 | } |
| 182 | else { | 181 | else { |
| 183 | lua_pushobject(f); | 182 | lua_pushobject(f); |
| 184 | callhook = lua_ref(1); | 183 | callhook = lua_ref(1); |
| 185 | lua_callhook = callf; | 184 | lua_setcallhook(callf); |
| 186 | } | 185 | } |
| 187 | } | 186 | } |
| 188 | 187 | ||
| @@ -192,12 +191,12 @@ static void setlinehook (void) { | |||
| 192 | lua_unref(linehook); | 191 | lua_unref(linehook); |
| 193 | if (f == LUA_NOOBJECT) { | 192 | if (f == LUA_NOOBJECT) { |
| 194 | linehook = -1; | 193 | linehook = -1; |
| 195 | lua_linehook = NULL; | 194 | lua_setlinehook(NULL); |
| 196 | } | 195 | } |
| 197 | else { | 196 | else { |
| 198 | lua_pushobject(f); | 197 | lua_pushobject(f); |
| 199 | linehook = lua_ref(1); | 198 | linehook = lua_ref(1); |
| 200 | lua_linehook = linef; | 199 | lua_setlinehook(linef); |
| 201 | } | 200 | } |
| 202 | } | 201 | } |
| 203 | 202 | ||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: ldo.c,v 1.29 1998/08/21 17:43:44 roberto Exp $ | 2 | ** $Id: ldo.c,v 1.30 1999/01/15 11:38:33 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 | */ |
| @@ -94,7 +94,7 @@ void luaD_lineHook (int line) | |||
| 94 | struct C_Lua_Stack oldCLS = L->Cstack; | 94 | struct C_Lua_Stack oldCLS = L->Cstack; |
| 95 | StkId old_top = L->Cstack.lua2C = L->Cstack.base = L->stack.top-L->stack.stack; | 95 | StkId old_top = L->Cstack.lua2C = L->Cstack.base = L->stack.top-L->stack.stack; |
| 96 | L->Cstack.num = 0; | 96 | L->Cstack.num = 0; |
| 97 | (*lua_linehook)(line); | 97 | (*L->linehook)(line); |
| 98 | L->stack.top = L->stack.stack+old_top; | 98 | L->stack.top = L->stack.stack+old_top; |
| 99 | L->Cstack = oldCLS; | 99 | L->Cstack = oldCLS; |
| 100 | } | 100 | } |
| @@ -106,13 +106,13 @@ void luaD_callHook (StkId base, TProtoFunc *tf, int isreturn) | |||
| 106 | StkId old_top = L->Cstack.lua2C = L->Cstack.base = L->stack.top-L->stack.stack; | 106 | StkId old_top = L->Cstack.lua2C = L->Cstack.base = L->stack.top-L->stack.stack; |
| 107 | L->Cstack.num = 0; | 107 | L->Cstack.num = 0; |
| 108 | if (isreturn) | 108 | if (isreturn) |
| 109 | (*lua_callhook)(LUA_NOOBJECT, "(return)", 0); | 109 | (*L->callhook)(LUA_NOOBJECT, "(return)", 0); |
| 110 | else { | 110 | else { |
| 111 | TObject *f = L->stack.stack+base-1; | 111 | TObject *f = L->stack.stack+base-1; |
| 112 | if (tf) | 112 | if (tf) |
| 113 | (*lua_callhook)(Ref(f), tf->fileName->str, tf->lineDefined); | 113 | (*L->callhook)(Ref(f), tf->fileName->str, tf->lineDefined); |
| 114 | else | 114 | else |
| 115 | (*lua_callhook)(Ref(f), "(C)", -1); | 115 | (*L->callhook)(Ref(f), "(C)", -1); |
| 116 | } | 116 | } |
| 117 | L->stack.top = L->stack.stack+old_top; | 117 | L->stack.top = L->stack.stack+old_top; |
| 118 | L->Cstack = oldCLS; | 118 | L->Cstack = oldCLS; |
| @@ -133,10 +133,10 @@ static StkId callC (lua_CFunction f, StkId base) | |||
| 133 | CS->num = numarg; | 133 | CS->num = numarg; |
| 134 | CS->lua2C = base; | 134 | CS->lua2C = base; |
| 135 | CS->base = base+numarg; /* == top-stack */ | 135 | CS->base = base+numarg; /* == top-stack */ |
| 136 | if (lua_callhook) | 136 | if (L->callhook) |
| 137 | luaD_callHook(base, NULL, 0); | 137 | luaD_callHook(base, NULL, 0); |
| 138 | (*f)(); /* do the actual call */ | 138 | (*f)(); /* do the actual call */ |
| 139 | if (lua_callhook) /* func may have changed lua_callhook */ | 139 | if (L->callhook) /* func may have changed lua_callhook */ |
| 140 | luaD_callHook(base, NULL, 1); | 140 | luaD_callHook(base, NULL, 1); |
| 141 | firstResult = CS->base; | 141 | firstResult = CS->base; |
| 142 | *CS = oldCLS; | 142 | *CS = oldCLS; |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: llex.c,v 1.26 1998/12/27 20:25:20 roberto Exp roberto $ | 2 | ** $Id: llex.c,v 1.27 1998/12/28 13:44:54 roberto Exp roberto $ |
| 3 | ** Lexical Analizer | 3 | ** Lexical Analizer |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -20,9 +20,6 @@ | |||
| 20 | 20 | ||
| 21 | 21 | ||
| 22 | 22 | ||
| 23 | int lua_debug=0; | ||
| 24 | |||
| 25 | |||
| 26 | #define next(LS) (LS->current = zgetc(LS->lex_z)) | 23 | #define next(LS) (LS->current = zgetc(LS->lex_z)) |
| 27 | 24 | ||
| 28 | 25 | ||
| @@ -174,10 +171,10 @@ static void inclinenumber (LexState *LS) | |||
| 174 | readname(LS, buff); | 171 | readname(LS, buff); |
| 175 | switch (luaL_findstring(buff, pragmas)) { | 172 | switch (luaL_findstring(buff, pragmas)) { |
| 176 | case 0: /* debug */ | 173 | case 0: /* debug */ |
| 177 | if (!skip) lua_debug = 1; | 174 | if (!skip) L->debug = 1; |
| 178 | break; | 175 | break; |
| 179 | case 1: /* nodebug */ | 176 | case 1: /* nodebug */ |
| 180 | if (!skip) lua_debug = 0; | 177 | if (!skip) L->debug = 0; |
| 181 | break; | 178 | break; |
| 182 | case 2: /* endinput */ | 179 | case 2: /* endinput */ |
| 183 | if (!skip) { | 180 | if (!skip) { |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lparser.c,v 1.14 1999/02/02 19:41:17 roberto Exp roberto $ | 2 | ** $Id: lparser.c,v 1.15 1999/02/04 16:36:16 roberto Exp roberto $ |
| 3 | ** LL(1) Parser and code generator for Lua | 3 | ** LL(1) Parser and code generator for Lua |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -378,7 +378,7 @@ static void pushupvalue (LexState *ls, TaggedString *n) { | |||
| 378 | 378 | ||
| 379 | 379 | ||
| 380 | static void check_debugline (LexState *ls) { | 380 | static void check_debugline (LexState *ls) { |
| 381 | if (lua_debug && ls->linenumber != ls->fs->lastsetline) { | 381 | if (L->debug && ls->linenumber != ls->fs->lastsetline) { |
| 382 | code_oparg(ls, SETLINE, ls->linenumber, 0); | 382 | code_oparg(ls, SETLINE, ls->linenumber, 0); |
| 383 | ls->fs->lastsetline = ls->linenumber; | 383 | ls->fs->lastsetline = ls->linenumber; |
| 384 | } | 384 | } |
| @@ -552,7 +552,7 @@ static void init_state (LexState *ls, FuncState *fs, TaggedString *filename) { | |||
| 552 | fs->maxcode = 0; | 552 | fs->maxcode = 0; |
| 553 | f->code = NULL; | 553 | f->code = NULL; |
| 554 | fs->maxconsts = 0; | 554 | fs->maxconsts = 0; |
| 555 | if (lua_debug) | 555 | if (L->debug) |
| 556 | fs->nvars = fs->maxvars = 0; | 556 | fs->nvars = fs->maxvars = 0; |
| 557 | else | 557 | else |
| 558 | fs->maxvars = -1; /* flag no debug information */ | 558 | fs->maxvars = -1; /* flag no debug information */ |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lstate.c,v 1.6 1998/06/02 20:37:04 roberto Exp roberto $ | 2 | ** $Id: lstate.c,v 1.7 1999/01/15 13:11:22 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 | */ |
| @@ -29,6 +29,9 @@ void lua_open (void) | |||
| 29 | L->Cstack.lua2C = 0; | 29 | L->Cstack.lua2C = 0; |
| 30 | L->Cstack.num = 0; | 30 | L->Cstack.num = 0; |
| 31 | L->errorJmp = NULL; | 31 | L->errorJmp = NULL; |
| 32 | L->debug = 0; | ||
| 33 | L->callhook = NULL; | ||
| 34 | L->linehook = NULL; | ||
| 32 | L->rootproto.next = NULL; | 35 | L->rootproto.next = NULL; |
| 33 | L->rootproto.marked = 0; | 36 | L->rootproto.marked = 0; |
| 34 | L->rootcl.next = NULL; | 37 | L->rootcl.next = NULL; |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lstate.h,v 1.12 1998/08/21 17:43:44 roberto Exp roberto $ | 2 | ** $Id: lstate.h,v 1.13 1998/08/30 18:28:58 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 | */ |
| @@ -11,6 +11,7 @@ | |||
| 11 | 11 | ||
| 12 | #include "lobject.h" | 12 | #include "lobject.h" |
| 13 | #include "lua.h" | 13 | #include "lua.h" |
| 14 | #include "luadebug.h" | ||
| 14 | 15 | ||
| 15 | 16 | ||
| 16 | #define MAX_C_BLOCKS 10 | 17 | #define MAX_C_BLOCKS 10 |
| @@ -60,6 +61,9 @@ struct lua_State { | |||
| 60 | int Mbuffnext; /* next position to fill in Mbuffer */ | 61 | int Mbuffnext; /* next position to fill in Mbuffer */ |
| 61 | struct C_Lua_Stack Cblocks[MAX_C_BLOCKS]; | 62 | struct C_Lua_Stack Cblocks[MAX_C_BLOCKS]; |
| 62 | int numCblocks; /* number of nested Cblocks */ | 63 | int numCblocks; /* number of nested Cblocks */ |
| 64 | int debug; | ||
| 65 | lua_CHFunction callhook; | ||
| 66 | lua_LHFunction linehook; | ||
| 63 | /* global state */ | 67 | /* global state */ |
| 64 | GCnode rootproto; /* list of all prototypes */ | 68 | GCnode rootproto; /* list of all prototypes */ |
| 65 | GCnode rootcl; /* list of all closures */ | 69 | GCnode rootcl; /* list of all closures */ |
| @@ -80,3 +84,4 @@ struct lua_State { | |||
| 80 | 84 | ||
| 81 | 85 | ||
| 82 | #endif | 86 | #endif |
| 87 | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lua.c,v 1.17 1999/01/08 16:47:44 roberto Exp roberto $ | 2 | ** $Id: lua.c,v 1.18 1999/01/26 11:50:58 roberto Exp roberto $ |
| 3 | ** Lua stand-alone interpreter | 3 | ** Lua stand-alone interpreter |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -43,18 +43,16 @@ static handler lreset (void) { | |||
| 43 | 43 | ||
| 44 | 44 | ||
| 45 | static void lstop (void) { | 45 | static void lstop (void) { |
| 46 | lua_linehook = old_linehook; | 46 | lua_setlinehook(old_linehook); |
| 47 | lua_callhook = old_callhook; | 47 | lua_setcallhook(old_callhook); |
| 48 | lreset(); | 48 | lreset(); |
| 49 | lua_error("interrupted!"); | 49 | lua_error("interrupted!"); |
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | 52 | ||
| 53 | static void laction (int i) { | 53 | static void laction (int i) { |
| 54 | old_linehook = lua_linehook; | 54 | old_linehook = lua_setlinehook((lua_LHFunction)lstop); |
| 55 | old_callhook = lua_callhook; | 55 | old_callhook = lua_setcallhook((lua_CHFunction)lstop); |
| 56 | lua_linehook = (lua_LHFunction)lstop; | ||
| 57 | lua_callhook = (lua_CHFunction)lstop; | ||
| 58 | } | 56 | } |
| 59 | 57 | ||
| 60 | 58 | ||
| @@ -156,7 +154,7 @@ int main (int argc, char *argv[]) | |||
| 156 | manual_input(0); | 154 | manual_input(0); |
| 157 | break; | 155 | break; |
| 158 | case 'd': | 156 | case 'd': |
| 159 | lua_debug = 1; | 157 | lua_setdebug(1); |
| 160 | break; | 158 | break; |
| 161 | case 'v': | 159 | case 'v': |
| 162 | printf("%s %s\n(written by %s)\n\n", | 160 | printf("%s %s\n(written by %s)\n\n", |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: luadebug.h,v 1.3 1998/09/07 18:59:59 roberto Exp roberto $ | 2 | ** $Id: luadebug.h,v 1.4 1999/01/15 13:11:22 roberto Exp roberto $ |
| 3 | ** Debugging API | 3 | ** Debugging API |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -26,14 +26,9 @@ int lua_setlocal (lua_Function func, int local_number); | |||
| 26 | 26 | ||
| 27 | int lua_nups (lua_Function func); | 27 | int lua_nups (lua_Function func); |
| 28 | 28 | ||
| 29 | extern lua_LHFunction lua_linehook; | 29 | lua_LHFunction lua_setlinehook (lua_LHFunction func); |
| 30 | extern lua_CHFunction lua_callhook; | 30 | lua_CHFunction lua_setcallhook (lua_CHFunction func); |
| 31 | extern int lua_debug; | 31 | int lua_setdebug (int debug); |
| 32 | |||
| 33 | |||
| 34 | extern lua_LHFunction lua_setlinehook (lua_LHFunction func); | ||
| 35 | extern lua_CHFunction lua_setcallhook (lua_CHFunction func); | ||
| 36 | extern int lua_setdebug (int debug); | ||
| 37 | 32 | ||
| 38 | 33 | ||
| 39 | #endif | 34 | #endif |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lvm.c,v 1.43 1999/02/02 19:41:17 roberto Exp roberto $ | 2 | ** $Id: lvm.c,v 1.44 1999/02/04 16:36:16 roberto Exp roberto $ |
| 3 | ** Lua virtual machine | 3 | ** Lua virtual machine |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -317,7 +317,7 @@ StkId luaV_execute (Closure *cl, TProtoFunc *tf, StkId base) { | |||
| 317 | struct Stack *S = &L->stack; /* to optimize */ | 317 | struct Stack *S = &L->stack; /* to optimize */ |
| 318 | register Byte *pc = tf->code; | 318 | register Byte *pc = tf->code; |
| 319 | TObject *consts = tf->consts; | 319 | TObject *consts = tf->consts; |
| 320 | if (lua_callhook) | 320 | if (L->callhook) |
| 321 | luaD_callHook(base, tf, 0); | 321 | luaD_callHook(base, tf, 0); |
| 322 | luaD_checkstack((*pc++)+EXTRA_STACK); | 322 | luaD_checkstack((*pc++)+EXTRA_STACK); |
| 323 | if (*pc < ZEROVARARG) | 323 | if (*pc < ZEROVARARG) |
| @@ -335,7 +335,7 @@ StkId luaV_execute (Closure *cl, TProtoFunc *tf, StkId base) { | |||
| 335 | S->top = S->stack + base; | 335 | S->top = S->stack + base; |
| 336 | /* goes through */ | 336 | /* goes through */ |
| 337 | case RETCODE: | 337 | case RETCODE: |
| 338 | if (lua_callhook) | 338 | if (L->callhook) |
| 339 | luaD_callHook(base, NULL, 1); | 339 | luaD_callHook(base, NULL, 1); |
| 340 | return base + (aux ? 0 : *pc); | 340 | return base + (aux ? 0 : *pc); |
| 341 | 341 | ||
| @@ -615,7 +615,7 @@ StkId luaV_execute (Closure *cl, TProtoFunc *tf, StkId base) { | |||
| 615 | (S->stack+base-1)->ttype = LUA_T_LINE; | 615 | (S->stack+base-1)->ttype = LUA_T_LINE; |
| 616 | } | 616 | } |
| 617 | (S->stack+base-1)->value.i = aux; | 617 | (S->stack+base-1)->value.i = aux; |
| 618 | if (lua_linehook) | 618 | if (L->linehook) |
| 619 | luaD_lineHook(aux); | 619 | luaD_lineHook(aux); |
| 620 | break; | 620 | break; |
| 621 | 621 | ||
