Răsfoiți Sursa

"lua_debug", "lua_callhook" and "lua_linehook" must be inside "lua_state".

Roberto Ierusalimschy 26 ani în urmă
părinte
comite
5687949560
10 a modificat fișierele cu 53 adăugiri și 56 ștergeri
  1. 7 7
      lapi.c
  2. 9 10
      ldblib.c
  3. 7 7
      ldo.c
  4. 3 6
      llex.c
  5. 3 3
      lparser.c
  6. 4 1
      lstate.c
  7. 6 1
      lstate.h
  8. 6 8
      lua.c
  9. 4 9
      luadebug.h
  10. 4 4
      lvm.c

+ 7 - 7
lapi.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lapi.c,v 1.32 1999/01/26 15:31:17 roberto Exp roberto $
+** $Id: lapi.c,v 1.33 1999/02/03 16:42:42 roberto Exp roberto $
 ** Lua API
 ** See Copyright Notice in lua.h
 */
@@ -439,20 +439,20 @@ lua_State *lua_setstate (lua_State *st) {
 }
 
 lua_LHFunction lua_setlinehook (lua_LHFunction func) {
-  lua_LHFunction old = lua_linehook;
-  lua_linehook = func;
+  lua_LHFunction old = L->linehook;
+  L->linehook = func;
   return old;
 }
 
 lua_CHFunction lua_setcallhook (lua_CHFunction func) {
-  lua_CHFunction old = lua_callhook;
-  lua_callhook = func;
+  lua_CHFunction old = L->callhook;
+  L->callhook = func;
   return old;
 }
 
 int lua_setdebug (int debug) {
-  int old = lua_debug;
-  lua_debug = debug;
+  int old = L->debug;
+  L->debug = debug;
   return old;
 }
 

+ 9 - 10
ldblib.c

@@ -1,5 +1,5 @@
 /*
-** $Id: ldblib.c,v 1.2 1999/01/11 18:57:35 roberto Exp roberto $
+** $Id: ldblib.c,v 1.3 1999/01/15 11:36:28 roberto Exp roberto $
 ** Interface from Lua to its debug API
 ** See Copyright Notice in lua.h
 */
@@ -147,12 +147,11 @@ static int callhook = -1;  /* Lua reference to call hook function */
 
 
 static void dohook (int ref) {
-  lua_LHFunction oldlinehook = lua_linehook;  /* save old hooks */
-  lua_CHFunction oldcallhook = lua_callhook;
-  lua_linehook = NULL; lua_callhook = NULL;  /* to avoid recusive calls */
+  lua_LHFunction oldlinehook = lua_setlinehook(NULL);
+  lua_CHFunction oldcallhook = lua_setcallhook(NULL);
   lua_callfunction(lua_getref(ref));
-  lua_linehook = oldlinehook;  /* restore old hooks */
-  lua_callhook = oldcallhook;
+  lua_setlinehook(oldlinehook);
+  lua_setcallhook(oldcallhook);
 }
 
 
@@ -177,12 +176,12 @@ static void setcallhook (void) {
   lua_unref(callhook);
   if (f == LUA_NOOBJECT) {
     callhook = -1;
-    lua_callhook = NULL;
+    lua_setcallhook(NULL);
   }
   else {
     lua_pushobject(f);
     callhook = lua_ref(1);
-    lua_callhook = callf;
+    lua_setcallhook(callf);
   }
 }
 
@@ -192,12 +191,12 @@ static void setlinehook (void) {
   lua_unref(linehook);
   if (f == LUA_NOOBJECT) {
     linehook = -1;
-    lua_linehook = NULL;
+    lua_setlinehook(NULL);
   }
   else {
     lua_pushobject(f);
     linehook = lua_ref(1);
-    lua_linehook = linef;
+    lua_setlinehook(linef);
   }
 }
 

+ 7 - 7
ldo.c

@@ -1,5 +1,5 @@
 /*
-** $Id: ldo.c,v 1.29 1998/08/21 17:43:44 roberto Exp $
+** $Id: ldo.c,v 1.30 1999/01/15 11:38:33 roberto Exp roberto $
 ** Stack and Call structure of Lua
 ** See Copyright Notice in lua.h
 */
@@ -94,7 +94,7 @@ void luaD_lineHook (int line)
   struct C_Lua_Stack oldCLS = L->Cstack;
   StkId old_top = L->Cstack.lua2C = L->Cstack.base = L->stack.top-L->stack.stack;
   L->Cstack.num = 0;
-  (*lua_linehook)(line);
+  (*L->linehook)(line);
   L->stack.top = L->stack.stack+old_top;
   L->Cstack = oldCLS;
 }
@@ -106,13 +106,13 @@ void luaD_callHook (StkId base, TProtoFunc *tf, int isreturn)
   StkId old_top = L->Cstack.lua2C = L->Cstack.base = L->stack.top-L->stack.stack;
   L->Cstack.num = 0;
   if (isreturn)
-    (*lua_callhook)(LUA_NOOBJECT, "(return)", 0);
+    (*L->callhook)(LUA_NOOBJECT, "(return)", 0);
   else {
     TObject *f = L->stack.stack+base-1;
     if (tf)
-      (*lua_callhook)(Ref(f), tf->fileName->str, tf->lineDefined);
+      (*L->callhook)(Ref(f), tf->fileName->str, tf->lineDefined);
     else
-      (*lua_callhook)(Ref(f), "(C)", -1);
+      (*L->callhook)(Ref(f), "(C)", -1);
   }
   L->stack.top = L->stack.stack+old_top;
   L->Cstack = oldCLS;
@@ -133,10 +133,10 @@ static StkId callC (lua_CFunction f, StkId base)
   CS->num = numarg;
   CS->lua2C = base;
   CS->base = base+numarg;  /* == top-stack */
-  if (lua_callhook)
+  if (L->callhook)
     luaD_callHook(base, NULL, 0);
   (*f)();  /* do the actual call */
-  if (lua_callhook)  /* func may have changed lua_callhook */
+  if (L->callhook)  /* func may have changed lua_callhook */
     luaD_callHook(base, NULL, 1);
   firstResult = CS->base;
   *CS = oldCLS;

+ 3 - 6
llex.c

@@ -1,5 +1,5 @@
 /*
-** $Id: llex.c,v 1.26 1998/12/27 20:25:20 roberto Exp roberto $
+** $Id: llex.c,v 1.27 1998/12/28 13:44:54 roberto Exp roberto $
 ** Lexical Analizer
 ** See Copyright Notice in lua.h
 */
@@ -20,9 +20,6 @@
 
 
 
-int lua_debug=0;
-
-
 #define next(LS) (LS->current = zgetc(LS->lex_z))
 
 
@@ -174,10 +171,10 @@ static void inclinenumber (LexState *LS)
     readname(LS, buff);
     switch (luaL_findstring(buff, pragmas)) {
       case 0:  /* debug */
-        if (!skip) lua_debug = 1;
+        if (!skip) L->debug = 1;
         break;
       case 1:  /* nodebug */
-        if (!skip) lua_debug = 0;
+        if (!skip) L->debug = 0;
         break;
       case 2:  /* endinput */
         if (!skip) {

+ 3 - 3
lparser.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lparser.c,v 1.14 1999/02/02 19:41:17 roberto Exp roberto $
+** $Id: lparser.c,v 1.15 1999/02/04 16:36:16 roberto Exp roberto $
 ** LL(1) Parser and code generator for Lua
 ** See Copyright Notice in lua.h
 */
@@ -378,7 +378,7 @@ static void pushupvalue (LexState *ls, TaggedString *n) {
 
 
 static void check_debugline (LexState *ls) {
-  if (lua_debug && ls->linenumber != ls->fs->lastsetline) {
+  if (L->debug && ls->linenumber != ls->fs->lastsetline) {
     code_oparg(ls, SETLINE, ls->linenumber, 0);
     ls->fs->lastsetline = ls->linenumber;
   }
@@ -552,7 +552,7 @@ static void init_state (LexState *ls, FuncState *fs, TaggedString *filename) {
   fs->maxcode = 0;
   f->code = NULL;
   fs->maxconsts = 0;
-  if (lua_debug)
+  if (L->debug)
     fs->nvars = fs->maxvars = 0;
   else
     fs->maxvars = -1;  /* flag no debug information */

+ 4 - 1
lstate.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lstate.c,v 1.6 1998/06/02 20:37:04 roberto Exp roberto $
+** $Id: lstate.c,v 1.7 1999/01/15 13:11:22 roberto Exp roberto $
 ** Global State
 ** See Copyright Notice in lua.h
 */
@@ -29,6 +29,9 @@ void lua_open (void)
   L->Cstack.lua2C = 0;
   L->Cstack.num = 0;
   L->errorJmp = NULL;
+  L->debug = 0;
+  L->callhook = NULL;
+  L->linehook = NULL;
   L->rootproto.next = NULL;
   L->rootproto.marked = 0;
   L->rootcl.next = NULL;

+ 6 - 1
lstate.h

@@ -1,5 +1,5 @@
 /*
-** $Id: lstate.h,v 1.12 1998/08/21 17:43:44 roberto Exp roberto $
+** $Id: lstate.h,v 1.13 1998/08/30 18:28:58 roberto Exp roberto $
 ** Global State
 ** See Copyright Notice in lua.h
 */
@@ -11,6 +11,7 @@
 
 #include "lobject.h"
 #include "lua.h"
+#include "luadebug.h"
 
 
 #define MAX_C_BLOCKS 10
@@ -60,6 +61,9 @@ struct lua_State {
   int Mbuffnext;  /* next position to fill in Mbuffer */
   struct C_Lua_Stack Cblocks[MAX_C_BLOCKS];
   int numCblocks;  /* number of nested Cblocks */
+  int debug;
+  lua_CHFunction callhook;
+  lua_LHFunction linehook;
   /* global state */
   GCnode rootproto;  /* list of all prototypes */
   GCnode rootcl;  /* list of all closures */
@@ -80,3 +84,4 @@ struct lua_State {
 
 
 #endif
+

+ 6 - 8
lua.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lua.c,v 1.17 1999/01/08 16:47:44 roberto Exp roberto $
+** $Id: lua.c,v 1.18 1999/01/26 11:50:58 roberto Exp roberto $
 ** Lua stand-alone interpreter
 ** See Copyright Notice in lua.h
 */
@@ -43,18 +43,16 @@ static handler lreset (void) {
 
 
 static void lstop (void) {
-  lua_linehook = old_linehook;
-  lua_callhook = old_callhook;
+  lua_setlinehook(old_linehook);
+  lua_setcallhook(old_callhook);
   lreset();
   lua_error("interrupted!");
 }
 
 
 static void laction (int i) {
-  old_linehook = lua_linehook;
-  old_callhook = lua_callhook;
-  lua_linehook = (lua_LHFunction)lstop;
-  lua_callhook = (lua_CHFunction)lstop;
+  old_linehook = lua_setlinehook((lua_LHFunction)lstop);
+  old_callhook = lua_setcallhook((lua_CHFunction)lstop);
 }
 
 
@@ -156,7 +154,7 @@ int main (int argc, char *argv[])
           manual_input(0);
           break;
         case 'd':
-          lua_debug = 1;
+          lua_setdebug(1);
           break;
         case 'v':
           printf("%s  %s\n(written by %s)\n\n",

+ 4 - 9
luadebug.h

@@ -1,5 +1,5 @@
 /*
-** $Id: luadebug.h,v 1.3 1998/09/07 18:59:59 roberto Exp roberto $
+** $Id: luadebug.h,v 1.4 1999/01/15 13:11:22 roberto Exp roberto $
 ** Debugging API
 ** See Copyright Notice in lua.h
 */
@@ -26,14 +26,9 @@ int lua_setlocal (lua_Function func, int local_number);
 
 int lua_nups (lua_Function func);
 
-extern lua_LHFunction lua_linehook;
-extern lua_CHFunction lua_callhook;
-extern int lua_debug;
-
-
-extern lua_LHFunction lua_setlinehook (lua_LHFunction func);
-extern lua_CHFunction lua_setcallhook (lua_CHFunction func);
-extern int lua_setdebug (int debug);
+lua_LHFunction lua_setlinehook (lua_LHFunction func);
+lua_CHFunction lua_setcallhook (lua_CHFunction func);
+int lua_setdebug (int debug);
 
 
 #endif

+ 4 - 4
lvm.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lvm.c,v 1.43 1999/02/02 19:41:17 roberto Exp roberto $
+** $Id: lvm.c,v 1.44 1999/02/04 16:36:16 roberto Exp roberto $
 ** Lua virtual machine
 ** See Copyright Notice in lua.h
 */
@@ -317,7 +317,7 @@ StkId luaV_execute (Closure *cl, TProtoFunc *tf, StkId base) {
   struct Stack *S = &L->stack;  /* to optimize */
   register Byte *pc = tf->code;
   TObject *consts = tf->consts;
-  if (lua_callhook)
+  if (L->callhook)
     luaD_callHook(base, tf, 0);
   luaD_checkstack((*pc++)+EXTRA_STACK);
   if (*pc < ZEROVARARG)
@@ -335,7 +335,7 @@ StkId luaV_execute (Closure *cl, TProtoFunc *tf, StkId base) {
         S->top = S->stack + base;
         /* goes through */
       case RETCODE:
-        if (lua_callhook)
+        if (L->callhook)
           luaD_callHook(base, NULL, 1);
         return base + (aux ? 0 : *pc);
 
@@ -615,7 +615,7 @@ StkId luaV_execute (Closure *cl, TProtoFunc *tf, StkId base) {
           (S->stack+base-1)->ttype = LUA_T_LINE;
         }
         (S->stack+base-1)->value.i = aux;
-        if (lua_linehook)
+        if (L->linehook)
           luaD_lineHook(aux);
         break;