Browse Source

`TObject' renamed to `TValue' + other name changes and better assertions
for incremental garbage collection

Roberto Ierusalimschy 21 years ago
parent
commit
47fc57a252
29 changed files with 456 additions and 441 deletions
  1. 56 55
      lapi.c
  2. 2 2
      lapi.h
  3. 13 11
      lcode.c
  4. 10 10
      ldebug.c
  5. 4 4
      ldebug.h
  6. 18 17
      ldo.c
  7. 3 3
      ldo.h
  8. 3 3
      ldump.c
  9. 10 10
      lfunc.c
  10. 4 4
      lfunc.h
  11. 52 52
      lgc.c
  12. 5 5
      lgc.h
  13. 2 2
      llex.c
  14. 5 5
      lobject.c
  15. 55 48
      lobject.h
  16. 4 4
      lparser.c
  17. 10 9
      lstate.c
  18. 14 12
      lstate.h
  19. 5 5
      lstring.c
  20. 36 36
      ltable.c
  21. 8 8
      ltable.h
  22. 4 4
      ltests.c
  23. 1 2
      ltests.h
  24. 5 5
      ltm.c
  25. 3 3
      ltm.h
  26. 13 11
      lundump.c
  27. 79 79
      lvm.c
  28. 6 6
      lvm.h
  29. 26 26
      makefile

+ 56 - 55
lapi.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lapi.c,v 1.250 2003/12/01 18:22:56 roberto Exp roberto $
+** $Id: lapi.c,v 1.251 2003/12/09 16:56:11 roberto Exp roberto $
 ** Lua API
 ** See Copyright Notice in lua.h
 */
@@ -41,7 +41,7 @@ const char lua_ident[] =
 
 
 #ifndef api_check
-#define api_check(L, o)		/*{ assert(o); }*/
+#define api_check(L, o)		lua_assert(o)
 #endif
 
 #define api_checknelems(L, n)	api_check(L, (n) <= (L->top - L->base))
@@ -52,11 +52,11 @@ const char lua_ident[] =
 
 
 
-static TObject *luaA_index (lua_State *L, int idx) {
+static TValue *luaA_index (lua_State *L, int idx) {
   if (idx > 0) {
-    TObject *o = L->base + (idx - 1);
+    TValue *o = L->base + (idx - 1);
     api_check(L, idx <= L->stack_last - L->base);
-    if (o >= L->top) return cast(TObject *, &luaO_nilobject);
+    if (o >= L->top) return cast(TValue *, &luaO_nilobject);
     else return o;
   }
   else if (idx > LUA_REGISTRYINDEX) {
@@ -67,19 +67,19 @@ static TObject *luaA_index (lua_State *L, int idx) {
     case LUA_REGISTRYINDEX: return registry(L);
     case LUA_GLOBALSINDEX: return gt(L);
     default: {
-      TObject *func = (L->base - 1);
+      TValue *func = (L->base - 1);
       idx = LUA_GLOBALSINDEX - idx;
       lua_assert(iscfunction(func));
       return (idx <= clvalue(func)->c.nupvalues)
                 ? &clvalue(func)->c.upvalue[idx-1]
-                : cast(TObject *, &luaO_nilobject);
+                : cast(TValue *, &luaO_nilobject);
     }
   }
 }
 
 
-void luaA_pushobject (lua_State *L, const TObject *o) {
-  setobj2s(L->top, o);
+void luaA_pushobject (lua_State *L, const TValue *o) {
+  setobj2s(L, L->top, o);
   incr_top(L);
 }
 
@@ -107,7 +107,7 @@ LUA_API void lua_xmove (lua_State *from, lua_State *to, int n) {
   api_checknelems(from, n);
   from->top -= n;
   for (i = 0; i < n; i++) {
-    setobj2s(to->top, from->top + i);
+    setobj2s(to, to->top, from->top + i);
     api_incr_top(to);
   }
   lua_unlock(to);
@@ -129,7 +129,7 @@ LUA_API lua_State *lua_newthread (lua_State *L) {
   lua_lock(L);
   luaC_checkGC(L);
   L1 = luaE_newthread(L);
-  setthvalue(L->top, L1);
+  setthvalue(L, L->top, L1);
   api_incr_top(L);
   lua_unlock(L);
   lua_userstateopen(L1);
@@ -169,7 +169,7 @@ LUA_API void lua_remove (lua_State *L, int idx) {
   lua_lock(L);
   p = luaA_index(L, idx);
   api_checkvalidindex(L, p);
-  while (++p < L->top) setobjs2s(p-1, p);
+  while (++p < L->top) setobjs2s(L, p-1, p);
   L->top--;
   lua_unlock(L);
 }
@@ -181,8 +181,8 @@ LUA_API void lua_insert (lua_State *L, int idx) {
   lua_lock(L);
   p = luaA_index(L, idx);
   api_checkvalidindex(L, p);
-  for (q = L->top; q>p; q--) setobjs2s(q, q-1);
-  setobjs2s(p, L->top);
+  for (q = L->top; q>p; q--) setobjs2s(L, q, q-1);
+  setobjs2s(L, p, L->top);
   lua_unlock(L);
 }
 
@@ -193,7 +193,7 @@ LUA_API void lua_replace (lua_State *L, int idx) {
   api_checknelems(L, 1);
   o = luaA_index(L, idx);
   api_checkvalidindex(L, o);
-  setobj(o, L->top - 1);  /* write barrier???? */
+  setobj(L, o, L->top - 1);  /* write barrier???? */
   L->top--;
   lua_unlock(L);
 }
@@ -201,7 +201,7 @@ LUA_API void lua_replace (lua_State *L, int idx) {
 
 LUA_API void lua_pushvalue (lua_State *L, int idx) {
   lua_lock(L);
-  setobj2s(L->top, luaA_index(L, idx));
+  setobj2s(L, L->top, luaA_index(L, idx));
   api_incr_top(L);
   lua_unlock(L);
 }
@@ -232,8 +232,8 @@ LUA_API int lua_iscfunction (lua_State *L, int idx) {
 
 
 LUA_API int lua_isnumber (lua_State *L, int idx) {
-  TObject n;
-  const TObject *o = luaA_index(L, idx);
+  TValue n;
+  const TValue *o = luaA_index(L, idx);
   return tonumber(o, &n);
 }
 
@@ -245,7 +245,7 @@ LUA_API int lua_isstring (lua_State *L, int idx) {
 
 
 LUA_API int lua_isuserdata (lua_State *L, int idx) {
-  const TObject *o = luaA_index(L, idx);
+  const TValue *o = luaA_index(L, idx);
   return (ttisuserdata(o) || ttislightuserdata(o));
 }
 
@@ -286,8 +286,8 @@ LUA_API int lua_lessthan (lua_State *L, int index1, int index2) {
 
 
 LUA_API lua_Number lua_tonumber (lua_State *L, int idx) {
-  TObject n;
-  const TObject *o = luaA_index(L, idx);
+  TValue n;
+  const TValue *o = luaA_index(L, idx);
   if (tonumber(o, &n))
     return nvalue(o);
   else
@@ -296,8 +296,8 @@ LUA_API lua_Number lua_tonumber (lua_State *L, int idx) {
 
 
 LUA_API lua_Integer lua_tointeger (lua_State *L, int idx) {
-  TObject n;
-  const TObject *o = luaA_index(L, idx);
+  TValue n;
+  const TValue *o = luaA_index(L, idx);
   if (tonumber(o, &n)) {
     lua_Integer res;
     lua_number2integer(res, nvalue(o));
@@ -309,7 +309,7 @@ LUA_API lua_Integer lua_tointeger (lua_State *L, int idx) {
 
 
 LUA_API int lua_toboolean (lua_State *L, int idx) {
-  const TObject *o = luaA_index(L, idx);
+  const TValue *o = luaA_index(L, idx);
   return !l_isfalse(o);
 }
 
@@ -332,11 +332,11 @@ LUA_API const char *lua_tostring (lua_State *L, int idx) {
 LUA_API size_t lua_strlen (lua_State *L, int idx) {
   StkId o = luaA_index(L, idx);
   if (ttisstring(o))
-    return tsvalue(o)->tsv.len;
+    return tsvalue(o)->len;
   else {
     size_t l;
     lua_lock(L);  /* `luaV_tostring' may create a new string */
-    l = (luaV_tostring(L, o) ? tsvalue(o)->tsv.len : 0);
+    l = (luaV_tostring(L, o) ? tsvalue(o)->len : 0);
     lua_unlock(L);
     return l;
   }
@@ -352,7 +352,7 @@ LUA_API lua_CFunction lua_tocfunction (lua_State *L, int idx) {
 LUA_API void *lua_touserdata (lua_State *L, int idx) {
   StkId o = luaA_index(L, idx);
   switch (ttype(o)) {
-    case LUA_TUSERDATA: return (uvalue(o) + 1);
+    case LUA_TUSERDATA: return (rawuvalue(o) + 1);
     case LUA_TLIGHTUSERDATA: return pvalue(o);
     default: return NULL;
   }
@@ -412,7 +412,7 @@ LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) {
 LUA_API void lua_pushlstring (lua_State *L, const char *s, size_t len) {
   lua_lock(L);
   luaC_checkGC(L);
-  setsvalue2s(L->top, luaS_newlstr(L, s, len));
+  setsvalue2s(L, L->top, luaS_newlstr(L, s, len));
   api_incr_top(L);
   lua_unlock(L);
 }
@@ -459,8 +459,9 @@ LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n) {
   cl->c.f = fn;
   L->top -= n;
   while (n--)
-    setobj2n(&cl->c.upvalue[n], L->top+n);
-  setclvalue(L->top, cl);
+    setobj2n(L, &cl->c.upvalue[n], L->top+n);
+  setclvalue(L, L->top, cl);
+  lua_assert(iswhite(obj2gco(cl)));
   api_incr_top(L);
   lua_unlock(L);
 }
@@ -500,11 +501,11 @@ LUA_API void lua_gettable (lua_State *L, int idx) {
 
 LUA_API void lua_getfield (lua_State *L, int idx, const char *k) {
   StkId t;
-  TObject key;
+  TValue key;
   lua_lock(L);
   t = luaA_index(L, idx);
   api_checkvalidindex(L, t);
-  setsvalue(&key, luaS_new(L, k));
+  setsvalue(L, &key, luaS_new(L, k));
   luaV_gettable(L, t, &key, L->top);
   api_incr_top(L);
   lua_unlock(L);
@@ -516,7 +517,7 @@ LUA_API void lua_rawget (lua_State *L, int idx) {
   lua_lock(L);
   t = luaA_index(L, idx);
   api_check(L, ttistable(t));
-  setobj2s(L->top - 1, luaH_get(hvalue(t), L->top - 1));
+  setobj2s(L, L->top - 1, luaH_get(hvalue(t), L->top - 1));
   lua_unlock(L);
 }
 
@@ -526,7 +527,7 @@ LUA_API void lua_rawgeti (lua_State *L, int idx, int n) {
   lua_lock(L);
   o = luaA_index(L, idx);
   api_check(L, ttistable(o));
-  setobj2s(L->top, luaH_getnum(hvalue(o), n));
+  setobj2s(L, L->top, luaH_getnum(hvalue(o), n));
   api_incr_top(L);
   lua_unlock(L);
 }
@@ -535,14 +536,14 @@ LUA_API void lua_rawgeti (lua_State *L, int idx, int n) {
 LUA_API void lua_createtable (lua_State *L, int narray, int nrec) {
   lua_lock(L);
   luaC_checkGC(L);
-  sethvalue(L->top, luaH_new(L, narray, luaO_log2(nrec) + 1));
+  sethvalue(L, L->top, luaH_new(L, narray, luaO_log2(nrec) + 1));
   api_incr_top(L);
   lua_unlock(L);
 }
 
 
 LUA_API int lua_getmetatable (lua_State *L, int objindex) {
-  const TObject *obj;
+  const TValue *obj;
   Table *mt = NULL;
   int res;
   lua_lock(L);
@@ -552,13 +553,13 @@ LUA_API int lua_getmetatable (lua_State *L, int objindex) {
       mt = hvalue(obj)->metatable;
       break;
     case LUA_TUSERDATA:
-      mt = uvalue(obj)->uv.metatable;
+      mt = uvalue(obj)->metatable;
       break;
   }
   if (mt == NULL)
     res = 0;
   else {
-    sethvalue(L->top, mt);
+    sethvalue(L, L->top, mt);
     api_incr_top(L);
     res = 1;
   }
@@ -572,7 +573,7 @@ LUA_API void lua_getfenv (lua_State *L, int idx) {
   lua_lock(L);
   o = luaA_index(L, idx);
   api_checkvalidindex(L, o);
-  setobj2s(L->top, isLfunction(o) ? &clvalue(o)->l.g : gt(L));
+  setobj2s(L, L->top, isLfunction(o) ? &clvalue(o)->l.g : gt(L));
   api_incr_top(L);
   lua_unlock(L);
 }
@@ -597,12 +598,12 @@ LUA_API void lua_settable (lua_State *L, int idx) {
 
 LUA_API void lua_setfield (lua_State *L, int idx, const char *k) {
   StkId t;
-  TObject key;
+  TValue key;
   lua_lock(L);
   api_checknelems(L, 1);
   t = luaA_index(L, idx);
   api_checkvalidindex(L, t);
-  setsvalue(&key, luaS_new(L, k));
+  setsvalue(L, &key, luaS_new(L, k));
   luaV_settable(L, t, &key, L->top - 1);
   L->top--;  /* pop value */
   lua_unlock(L);
@@ -615,7 +616,7 @@ LUA_API void lua_rawset (lua_State *L, int idx) {
   api_checknelems(L, 2);
   t = luaA_index(L, idx);
   api_check(L, ttistable(t));
-  setobj2t(luaH_set(L, hvalue(t), L->top-2), L->top-1);
+  setobj2t(L, luaH_set(L, hvalue(t), L->top-2), L->top-1);
   luaC_barrier(L, hvalue(t), L->top-1);
   L->top -= 2;
   lua_unlock(L);
@@ -628,7 +629,7 @@ LUA_API void lua_rawseti (lua_State *L, int idx, int n) {
   api_checknelems(L, 1);
   o = luaA_index(L, idx);
   api_check(L, ttistable(o));
-  setobj2t(luaH_setnum(L, hvalue(o), n), L->top-1);
+  setobj2t(L, luaH_setnum(L, hvalue(o), n), L->top-1);
   luaC_barrier(L, hvalue(o), L->top-1);
   L->top--;
   lua_unlock(L);
@@ -636,7 +637,7 @@ LUA_API void lua_rawseti (lua_State *L, int idx, int n) {
 
 
 LUA_API int lua_setmetatable (lua_State *L, int objindex) {
-  TObject *obj;
+  TValue *obj;
   Table *mt;
   int res = 1;
   lua_lock(L);
@@ -657,9 +658,9 @@ LUA_API int lua_setmetatable (lua_State *L, int objindex) {
       break;
     }
     case LUA_TUSERDATA: {
-      uvalue(obj)->uv.metatable = mt;
+      uvalue(obj)->metatable = mt;
       if (mt)
-        luaC_objbarrier(L, uvalue(obj), mt);
+        luaC_objbarrier(L, rawuvalue(obj), mt);
       break;
     }
     default: {
@@ -756,7 +757,7 @@ static void f_Ccall (lua_State *L, void *ud) {
   Closure *cl;
   cl = luaF_newCclosure(L, 0);
   cl->c.f = c->func;
-  setclvalue(L->top, cl);  /* push function */
+  setclvalue(L, L->top, cl);  /* push function */
   incr_top(L);
   setpvalue(L->top, c->ud);  /* push only argument */
   incr_top(L);
@@ -791,7 +792,7 @@ LUA_API int lua_load (lua_State *L, lua_Chunkreader reader, void *data,
 
 LUA_API int lua_dump (lua_State *L, lua_Chunkwriter writer, void *data) {
   int status;
-  TObject *o;
+  TValue *o;
   lua_lock(L);
   api_checknelems(L, 1);
   o = L->top - 1;
@@ -885,7 +886,7 @@ LUA_API void lua_concat (lua_State *L, int n) {
     L->top -= (n-1);
   }
   else if (n == 0) {  /* push empty string */
-    setsvalue2s(L->top, luaS_newlstr(L, NULL, 0));
+    setsvalue2s(L, L->top, luaS_newlstr(L, NULL, 0));
     api_incr_top(L);
   }
   /* else n == 1; nothing to do */
@@ -904,7 +905,7 @@ LUA_API void *lua_newuserdata (lua_State *L, size_t size) {
   lua_lock(L);
   luaC_checkGC(L);
   u = luaS_newudata(L, size);
-  setuvalue(L->top, u);
+  setuvalue(L, L->top, u);
   api_incr_top(L);
   lua_unlock(L);
   return u + 1;
@@ -913,7 +914,7 @@ LUA_API void *lua_newuserdata (lua_State *L, size_t size) {
 
 
 
-static const char *aux_upvalue (lua_State *L, StkId fi, int n, TObject **val) {
+static const char *aux_upvalue (lua_State *L, StkId fi, int n, TValue **val) {
   Closure *f;
   if (!ttisfunction(fi)) return NULL;
   f = clvalue(fi);
@@ -933,11 +934,11 @@ static const char *aux_upvalue (lua_State *L, StkId fi, int n, TObject **val) {
 
 LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n) {
   const char *name;
-  TObject *val;
+  TValue *val;
   lua_lock(L);
   name = aux_upvalue(L, luaA_index(L, funcindex), n, &val);
   if (name) {
-    setobj2s(L->top, val);
+    setobj2s(L, L->top, val);
     api_incr_top(L);
   }
   lua_unlock(L);
@@ -947,7 +948,7 @@ LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n) {
 
 LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n) {
   const char *name;
-  TObject *val;
+  TValue *val;
   StkId fi;
   lua_lock(L);
   fi = luaA_index(L, funcindex);
@@ -955,7 +956,7 @@ LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n) {
   name = aux_upvalue(L, fi, n, &val);
   if (name) {
     L->top--;
-    setobj(val, L->top);
+    setobj(L, val, L->top);
     luaC_barrier(L, clvalue(fi), L->top);
   }
   lua_unlock(L);

+ 2 - 2
lapi.h

@@ -1,5 +1,5 @@
 /*
-** $Id: lapi.h,v 1.20 2000/08/31 14:08:27 roberto Exp roberto $
+** $Id: lapi.h,v 1.21 2002/03/04 21:29:41 roberto Exp roberto $
 ** Auxiliary functions from Lua API
 ** See Copyright Notice in lua.h
 */
@@ -11,6 +11,6 @@
 #include "lobject.h"
 
 
-void luaA_pushobject (lua_State *L, const TObject *o);
+void luaA_pushobject (lua_State *L, const TValue *o);
 
 #endif

+ 13 - 11
lcode.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lcode.c,v 1.120 2003/11/19 19:59:18 roberto Exp roberto $
+** $Id: lcode.c,v 1.121 2003/12/09 16:56:11 roberto Exp roberto $
 ** Code generator for Lua
 ** See Copyright Notice in lua.h
 */
@@ -207,8 +207,9 @@ static void freeexp (FuncState *fs, expdesc *e) {
 }
 
 
-static int addk (FuncState *fs, TObject *k, TObject *v) {
-  TObject *idx = luaH_set(fs->L, fs->h, k);
+static int addk (FuncState *fs, TValue *k, TValue *v) {
+  lua_State *L = fs->L;
+  TValue *idx = luaH_set(L, fs->h, k);
   Proto *f = fs->f;
   int oldsize = f->sizek;
   if (ttisnumber(idx)) {
@@ -217,34 +218,35 @@ static int addk (FuncState *fs, TObject *k, TObject *v) {
   }
   else {  /* constant not found; create a new entry */
     setnvalue(idx, cast(lua_Number, fs->nk));
-    luaM_growvector(fs->L, f->k, fs->nk, f->sizek, TObject,
+    luaM_growvector(L, f->k, fs->nk, f->sizek, TValue,
                     MAXARG_Bx, "constant table overflow");
     while (oldsize < f->sizek) setnilvalue(&f->k[oldsize++]);
-    setobj(&f->k[fs->nk], v);
-    luaC_barrier(fs->L, f, v);
+    setobj(L, &f->k[fs->nk], v);
+    luaC_barrier(L, f, v);
     return fs->nk++;
   }
 }
 
 
 int luaK_stringK (FuncState *fs, TString *s) {
-  TObject o;
-  setsvalue(&o, s);
+  TValue o;
+  setsvalue(fs->L, &o, s);
   return addk(fs, &o, &o);
 }
 
 
 int luaK_numberK (FuncState *fs, lua_Number r) {
-  TObject o;
+  TValue o;
   setnvalue(&o, r);
   return addk(fs, &o, &o);
 }
 
 
 static int nil_constant (FuncState *fs) {
-  TObject k, v;
+  TValue k, v;
   setnilvalue(&v);
-  sethvalue(&k, fs->h);  /* cannot use nil as key; instead use table itself */
+  /* cannot use nil as key; instead use table itself to represent nil */
+  sethvalue(fs->L, &k, fs->h);
   return addk(fs, &k, &v);
 }
 

+ 10 - 10
ldebug.c

@@ -1,5 +1,5 @@
 /*
-** $Id: ldebug.c,v 1.156 2003/10/02 19:21:09 roberto Exp roberto $
+** $Id: ldebug.c,v 1.157 2003/10/20 18:42:28 roberto Exp roberto $
 ** Debug Interface
 ** See Copyright Notice in lua.h
 */
@@ -136,7 +136,7 @@ LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n) {
     if (!name || name[0] == '(')  /* `(' starts private locals */
       name = NULL;
     else
-      setobjs2s(ci->base+(n-1), L->top);
+      setobjs2s(L, ci->base+(n-1), L->top);
   }
   lua_unlock(L);
   return name;
@@ -196,7 +196,7 @@ static int auxgetinfo (lua_State *L, const char *what, lua_Debug *ar,
         break;
       }
       case 'f': {
-        setobj2s(L->top, f);
+        setobj2s(L, L->top, f);
         break;
       }
       default: status = 0;  /* invalid option */
@@ -484,7 +484,7 @@ static const char *getfuncname (CallInfo *ci, const char **name) {
 
 
 /* only ANSI way to check whether a pointer points to an array */
-static int isinstack (CallInfo *ci, const TObject *o) {
+static int isinstack (CallInfo *ci, const TValue *o) {
   StkId p;
   for (p = ci->base; p < ci->top; p++)
     if (o == p) return 1;
@@ -492,7 +492,7 @@ static int isinstack (CallInfo *ci, const TObject *o) {
 }
 
 
-void luaG_typeerror (lua_State *L, const TObject *o, const char *op) {
+void luaG_typeerror (lua_State *L, const TValue *o, const char *op) {
   const char *name = NULL;
   const char *t = luaT_typenames[ttype(o)];
   const char *kind = (isinstack(L->ci, o)) ?
@@ -512,15 +512,15 @@ void luaG_concaterror (lua_State *L, StkId p1, StkId p2) {
 }
 
 
-void luaG_aritherror (lua_State *L, const TObject *p1, const TObject *p2) {
-  TObject temp;
+void luaG_aritherror (lua_State *L, const TValue *p1, const TValue *p2) {
+  TValue temp;
   if (luaV_tonumber(p1, &temp) == NULL)
     p2 = p1;  /* first operand is wrong */
   luaG_typeerror(L, p2, "perform arithmetic on");
 }
 
 
-int luaG_ordererror (lua_State *L, const TObject *p1, const TObject *p2) {
+int luaG_ordererror (lua_State *L, const TValue *p1, const TValue *p2) {
   const char *t1 = luaT_typenames[ttype(p1)];
   const char *t2 = luaT_typenames[ttype(p2)];
   if (t1[2] == t2[2])
@@ -546,8 +546,8 @@ void luaG_errormsg (lua_State *L) {
   if (L->errfunc != 0) {  /* is there an error handling function? */
     StkId errfunc = restorestack(L, L->errfunc);
     if (!ttisfunction(errfunc)) luaD_throw(L, LUA_ERRERR);
-    setobjs2s(L->top, L->top - 1);  /* move argument */
-    setobjs2s(L->top - 1, errfunc);  /* push function */
+    setobjs2s(L, L->top, L->top - 1);  /* move argument */
+    setobjs2s(L, L->top - 1, errfunc);  /* push function */
     incr_top(L);
     luaD_call(L, L->top - 2, 1);  /* call it */
   }

+ 4 - 4
ldebug.h

@@ -1,5 +1,5 @@
 /*
-** $Id: ldebug.h,v 1.32 2002/11/18 11:01:55 roberto Exp $
+** $Id: ldebug.h,v 1.33 2003/07/16 20:49:02 roberto Exp roberto $
 ** Auxiliary functions from Debug Interface module
 ** See Copyright Notice in lua.h
 */
@@ -18,10 +18,10 @@
 #define resethookcount(L)	(L->hookcount = L->basehookcount)
 
 
-void luaG_typeerror (lua_State *L, const TObject *o, const char *opname);
+void luaG_typeerror (lua_State *L, const TValue *o, const char *opname);
 void luaG_concaterror (lua_State *L, StkId p1, StkId p2);
-void luaG_aritherror (lua_State *L, const TObject *p1, const TObject *p2);
-int luaG_ordererror (lua_State *L, const TObject *p1, const TObject *p2);
+void luaG_aritherror (lua_State *L, const TValue *p1, const TValue *p2);
+int luaG_ordererror (lua_State *L, const TValue *p1, const TValue *p2);
 void luaG_runerror (lua_State *L, const char *fmt, ...);
 void luaG_errormsg (lua_State *L);
 int luaG_checkcode (const Proto *pt);

+ 18 - 17
ldo.c

@@ -1,5 +1,5 @@
 /*
-** $Id: ldo.c,v 1.228 2003/10/20 17:42:41 roberto Exp roberto $
+** $Id: ldo.c,v 1.229 2003/11/11 16:34:17 roberto Exp roberto $
 ** Stack and Call structure of Lua
 ** See Copyright Notice in lua.h
 */
@@ -64,16 +64,16 @@ struct lua_longjmp {
 static void seterrorobj (lua_State *L, int errcode, StkId oldtop) {
   switch (errcode) {
     case LUA_ERRMEM: {
-      setsvalue2s(oldtop, luaS_newliteral(L, MEMERRMSG));
+      setsvalue2s(L, oldtop, luaS_newliteral(L, MEMERRMSG));
       break;
     }
     case LUA_ERRERR: {
-      setsvalue2s(oldtop, luaS_newliteral(L, "error in error handling"));
+      setsvalue2s(L, oldtop, luaS_newliteral(L, "error in error handling"));
       break;
     }
     case LUA_ERRSYNTAX:
     case LUA_ERRRUN: {
-      setobjs2s(oldtop, L->top - 1);  /* error message on current top */
+      setobjs2s(L, oldtop, L->top - 1);  /* error message on current top */
       break;
     }
   }
@@ -118,12 +118,12 @@ static void restore_stack_limit (lua_State *L) {
 /* }====================================================== */
 
 
-static void correctstack (lua_State *L, TObject *oldstack) {
+static void correctstack (lua_State *L, TValue *oldstack) {
   CallInfo *ci;
   GCObject *up;
   L->top = (L->top - oldstack) + L->stack;
   for (up = L->openupval; up != NULL; up = up->gch.next)
-    gcotouv(up)->v = (gcotouv(up)->v - oldstack) + L->stack;
+    gco2uv(up)->v = (gco2uv(up)->v - oldstack) + L->stack;
   for (ci = L->base_ci; ci <= L->ci; ci++) {
     ci->top = (ci->top - oldstack) + L->stack;
     ci->base = (ci->base - oldstack) + L->stack;
@@ -133,8 +133,8 @@ static void correctstack (lua_State *L, TObject *oldstack) {
 
 
 void luaD_reallocstack (lua_State *L, int newsize) {
-  TObject *oldstack = L->stack;
-  luaM_reallocvector(L, L->stack, L->stacksize, newsize, TObject);
+  TValue *oldstack = L->stack;
+  luaM_reallocvector(L, L->stack, L->stacksize, newsize, TValue);
   L->stacksize = newsize;
   L->stack_last = L->stack+newsize-1-EXTRA_STACK;
   correctstack(L, oldstack);
@@ -207,27 +207,28 @@ static void adjust_varargs (lua_State *L, int nfixargs, StkId base) {
   actual -= nfixargs;  /* number of extra arguments */
   htab = luaH_new(L, actual, 1);  /* create `arg' table */
   for (i=0; i<actual; i++)  /* put extra arguments into `arg' table */
-    setobj2n(luaH_setnum(L, htab, i+1), L->top - actual + i);
+    setobj2n(L, luaH_setnum(L, htab, i+1), L->top - actual + i);
   /* store counter in field `n' */
   setnvalue(luaH_setstr(L, htab, luaS_newliteral(L, "n")),
                                  cast(lua_Number, actual));
   L->top -= actual;  /* remove extra elements from the stack */
-  sethvalue(L->top, htab);
+  sethvalue(L, L->top, htab);
+  lua_assert(iswhite(obj2gco(htab)));
   incr_top(L);
 }
 
 
 static StkId tryfuncTM (lua_State *L, StkId func) {
-  const TObject *tm = luaT_gettmbyobj(L, func, TM_CALL);
+  const TValue *tm = luaT_gettmbyobj(L, func, TM_CALL);
   StkId p;
   ptrdiff_t funcr = savestack(L, func);
   if (!ttisfunction(tm))
     luaG_typeerror(L, func, "call");
   /* Open a hole inside the stack at `func' */
-  for (p = L->top; p > func; p--) setobjs2s(p, p-1);
+  for (p = L->top; p > func; p--) setobjs2s(L, p, p-1);
   incr_top(L);
   func = restorestack(L, funcr);  /* previous call may change stack */
-  setobj2s(func, tm);  /* tag method is the new function to be called */
+  setobj2s(L, func, tm);  /* tag method is the new function to be called */
   return func;
 }
 
@@ -294,7 +295,7 @@ void luaD_poscall (lua_State *L, int wanted, StkId firstResult) {
   L->base = L->ci->base;  /* restore base */
   /* move results to correct place */
   while (wanted != 0 && firstResult < L->top) {
-    setobjs2s(res++, firstResult++);
+    setobjs2s(L, res++, firstResult++);
     wanted--;
   }
   while (wanted-- > 0)
@@ -354,7 +355,7 @@ static void resume (lua_State *L, void *ud) {
 
 static int resume_error (lua_State *L, const char *msg) {
   L->top = L->ci->base;
-  setsvalue2s(L->top, luaS_new(L, msg));
+  setsvalue2s(L, L->top, luaS_new(L, msg));
   incr_top(L);
   lua_unlock(L);
   return LUA_ERRRUN;
@@ -400,7 +401,7 @@ LUA_API int lua_yield (lua_State *L, int nresults) {
     if (L->top - nresults > L->base) {  /* is there garbage in the stack? */
       int i;
       for (i=0; i<nresults; i++)  /* move down results */
-        setobjs2s(L->base + i, L->top - nresults + i);
+        setobjs2s(L, L->base + i, L->top - nresults + i);
       L->top = L->base + nresults;
     }
   } /* else it's an yield inside a hook: nothing to do */
@@ -457,7 +458,7 @@ static void f_parser (lua_State *L, void *ud) {
   cl->l.p = tf;
   for (i = 0; i < tf->nups; i++)  /* initialize eventual upvalues */
     cl->l.upvals[i] = luaF_newupval(L);
-  setclvalue(L->top, cl);
+  setclvalue(L, L->top, cl);
   incr_top(L);
 }
 

+ 3 - 3
ldo.h

@@ -1,5 +1,5 @@
 /*
-** $Id: ldo.h,v 1.57 2003/08/25 19:51:54 roberto Exp roberto $
+** $Id: ldo.h,v 1.58 2003/08/27 21:01:44 roberto Exp roberto $
 ** Stack and Call structure of Lua
 ** See Copyright Notice in lua.h
 */
@@ -24,7 +24,7 @@
 
 
 #define luaD_checkstack(L,n)	\
-  if ((char *)L->stack_last - (char *)L->top <= (n)*(int)sizeof(TObject)) \
+  if ((char *)L->stack_last - (char *)L->top <= (n)*(int)sizeof(TValue)) \
     luaD_growstack(L, n); \
   else condhardstacktests(luaD_reallocstack(L, L->stacksize));
 
@@ -32,7 +32,7 @@
 #define incr_top(L) {luaD_checkstack(L,1); L->top++;}
 
 #define savestack(L,p)		((char *)(p) - (char *)L->stack)
-#define restorestack(L,n)	((TObject *)((char *)L->stack + (n)))
+#define restorestack(L,n)	((TValue *)((char *)L->stack + (n)))
 
 #define saveci(L,p)		((char *)(p) - (char *)L->base_ci)
 #define restoreci(L,n)		((CallInfo *)((char *)L->base_ci + (n)))

+ 3 - 3
ldump.c

@@ -1,5 +1,5 @@
 /*
-** $Id: ldump.c,v 1.4 2003/02/11 23:52:12 lhf Exp lhf $
+** $Id: ldump.c,v 1.6 2003/08/15 13:48:53 roberto Exp roberto $
 ** save bytecodes
 ** See Copyright Notice in lua.h
 */
@@ -104,7 +104,7 @@ static void DumpConstants(const Proto* f, DumpState* D)
  DumpInt(n=f->sizek,D);
  for (i=0; i<n; i++)
  {
-  const TObject* o=&f->k[i];
+  const TValue* o=&f->k[i];
   DumpByte(ttype(o),D);
   switch (ttype(o))
   {
@@ -112,7 +112,7 @@ static void DumpConstants(const Proto* f, DumpState* D)
 	DumpNumber(nvalue(o),D);
 	break;
    case LUA_TSTRING:
-	DumpString(tsvalue(o),D);
+	DumpString(rawtsvalue(o),D);
 	break;
    case LUA_TNIL:
 	break;

+ 10 - 10
lfunc.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lfunc.c,v 1.73 2003/12/03 20:03:07 roberto Exp roberto $
+** $Id: lfunc.c,v 1.74 2003/12/09 16:56:11 roberto Exp roberto $
 ** Auxiliary functions to manipulate prototypes and closures
 ** See Copyright Notice in lua.h
 */
@@ -21,16 +21,16 @@
 
 Closure *luaF_newCclosure (lua_State *L, int nelems) {
   Closure *c = cast(Closure *, luaM_malloc(L, sizeCclosure(nelems)));
-  luaC_link(L, valtogco(c), LUA_TFUNCTION);
+  luaC_link(L, obj2gco(c), LUA_TFUNCTION);
   c->c.isC = 1;
   c->c.nupvalues = cast(lu_byte, nelems);
   return c;
 }
 
 
-Closure *luaF_newLclosure (lua_State *L, int nelems, TObject *e) {
+Closure *luaF_newLclosure (lua_State *L, int nelems, TValue *e) {
   Closure *c = cast(Closure *, luaM_malloc(L, sizeLclosure(nelems)));
-  luaC_link(L, valtogco(c), LUA_TFUNCTION);
+  luaC_link(L, obj2gco(c), LUA_TFUNCTION);
   c->l.isC = 0;
   c->l.g = *e;
   c->l.nupvalues = cast(lu_byte, nelems);
@@ -40,7 +40,7 @@ Closure *luaF_newLclosure (lua_State *L, int nelems, TObject *e) {
 
 UpVal *luaF_newupval (lua_State *L) {
   UpVal *uv = luaM_new(L, UpVal);
-  luaC_link(L, valtogco(uv), LUA_TUPVAL);
+  luaC_link(L, obj2gco(uv), LUA_TUPVAL);
   uv->v = &uv->value;
   setnilvalue(uv->v);
   return uv;
@@ -60,7 +60,7 @@ UpVal *luaF_findupval (lua_State *L, StkId level) {
   uv->marked = bitmask(FIXEDBIT);  /* open upvalues cannot be collected */
   uv->v = level;  /* current value lives in the stack */
   uv->next = *pp;  /* chain it in the proper position */
-  *pp = valtogco(uv);
+  *pp = obj2gco(uv);
   return uv;
 }
 
@@ -68,18 +68,18 @@ UpVal *luaF_findupval (lua_State *L, StkId level) {
 void luaF_close (lua_State *L, StkId level) {
   UpVal *uv;
   while ((uv = ngcotouv(L->openupval)) != NULL && uv->v >= level) {
-    setobj(&uv->value, uv->v);
+    setobj(L, &uv->value, uv->v);
     luaC_barrier(L, uv, uv->v);
     uv->v = &uv->value;  /* now current value lives here */
     L->openupval = uv->next;  /* remove from `open' list */
-    luaC_link(L, valtogco(uv), LUA_TUPVAL);
+    luaC_link(L, obj2gco(uv), LUA_TUPVAL);
   }
 }
 
 
 Proto *luaF_newproto (lua_State *L) {
   Proto *f = luaM_new(L, Proto);
-  luaC_link(L, valtogco(f), LUA_TPROTO);
+  luaC_link(L, obj2gco(f), LUA_TPROTO);
   f->k = NULL;
   f->sizek = 0;
   f->p = NULL;
@@ -105,7 +105,7 @@ Proto *luaF_newproto (lua_State *L) {
 void luaF_freeproto (lua_State *L, Proto *f) {
   luaM_freearray(L, f->code, f->sizecode, Instruction);
   luaM_freearray(L, f->p, f->sizep, Proto *);
-  luaM_freearray(L, f->k, f->sizek, TObject);
+  luaM_freearray(L, f->k, f->sizek, TValue);
   luaM_freearray(L, f->lineinfo, f->sizelineinfo, int);
   luaM_freearray(L, f->locvars, f->sizelocvars, struct LocVar);
   luaM_freearray(L, f->upvalues, f->sizeupvalues, TString *);

+ 4 - 4
lfunc.h

@@ -1,5 +1,5 @@
 /*
-** $Id: lfunc.h,v 1.22 2003/10/20 17:42:41 roberto Exp roberto $
+** $Id: lfunc.h,v 1.23 2003/11/24 18:50:36 roberto Exp roberto $
 ** Auxiliary functions to manipulate prototypes and closures
 ** See Copyright Notice in lua.h
 */
@@ -12,15 +12,15 @@
 
 
 #define sizeCclosure(n)	(cast(int, sizeof(CClosure)) + \
-                         cast(int, sizeof(TObject)*((n)-1)))
+                         cast(int, sizeof(TValue)*((n)-1)))
 
 #define sizeLclosure(n)	(cast(int, sizeof(LClosure)) + \
-                         cast(int, sizeof(TObject *)*((n)-1)))
+                         cast(int, sizeof(TValue *)*((n)-1)))
 
 
 Proto *luaF_newproto (lua_State *L);
 Closure *luaF_newCclosure (lua_State *L, int nelems);
-Closure *luaF_newLclosure (lua_State *L, int nelems, TObject *e);
+Closure *luaF_newLclosure (lua_State *L, int nelems, TValue *e);
 UpVal *luaF_newupval (lua_State *L);
 UpVal *luaF_findupval (lua_State *L, StkId level);
 void luaF_close (lua_State *L, StkId level);

+ 52 - 52
lgc.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lgc.c,v 1.186 2003/12/04 18:52:23 roberto Exp roberto $
+** $Id: lgc.c,v 1.187 2003/12/09 16:56:11 roberto Exp roberto $
 ** Garbage Collector
 ** See Copyright Notice in lua.h
 */
@@ -22,7 +22,7 @@
 #include "ltm.h"
 
 
-#define GCSTEPSIZE	(20*sizeof(TObject))
+#define GCSTEPSIZE	(20*sizeof(TValue))
 
 
 #define gray2black(x)	setbit((x)->gch.marked, BLACKBIT)
@@ -39,8 +39,8 @@
 #define stringmark(s)	reset2bits((s)->tsv.marked, WHITE0BIT, WHITE1BIT)
 
 
-#define isfinalized(u)		testbit((u)->uv.marked, FINALIZEDBIT)
-#define markfinalized(u)	setbit((u)->uv.marked, FINALIZEDBIT)
+#define isfinalized(u)		testbit((u)->marked, FINALIZEDBIT)
+#define markfinalized(u)	setbit((u)->marked, FINALIZEDBIT)
 
 
 #define KEYWEAK         bitmask(KEYWEAKBIT)
@@ -55,8 +55,8 @@
   if (iscollectable(o) && iswhite(gcvalue(o)) && (c)) \
     reallymarkobject(g,gcvalue(o)); }
 
-#define markobject(g,t) { if (iswhite(valtogco(t))) \
-		reallymarkobject(g, valtogco(t)); }
+#define markobject(g,t) { if (iswhite(obj2gco(t))) \
+		reallymarkobject(g, obj2gco(t)); }
 
 
 
@@ -66,34 +66,34 @@
 static size_t objsize (GCObject *o) {
   switch (o->gch.tt) {
     case LUA_TSTRING: {
-      TString *ts = gcotots(o);
+      TString *ts = rawgco2ts(o);
       return sizestring(ts->tsv.len);
     }
     case LUA_TUSERDATA: {
-      Udata *u = gcotou(o);
+      Udata *u = rawgco2u(o);
       return sizeudata(u->uv.len);
     }
     case LUA_TTABLE: {
-      Table *h = gcotoh(o);
-      return sizeof(Table) + sizeof(TObject) * h->sizearray +
+      Table *h = gco2h(o);
+      return sizeof(Table) + sizeof(TValue) * h->sizearray +
                              sizeof(Node) * sizenode(h);
     }
     case LUA_TUPVAL:
       return sizeof(UpVal);
     case LUA_TFUNCTION: {
-      Closure *cl = gcotocl(o);
+      Closure *cl = gco2cl(o);
       return (cl->c.isC) ? sizeCclosure(cl->c.nupvalues) :
                            sizeLclosure(cl->l.nupvalues);
     }
     case LUA_TTHREAD: {
-      lua_State *th = gcototh(o);
-      return sizeof(lua_State) + sizeof(TObject) * th->stacksize +
+      lua_State *th = gco2th(o);
+      return sizeof(lua_State) + sizeof(TValue) * th->stacksize +
              sizeof(CallInfo) * th->size_ci;
     }
     case LUA_TPROTO: {
-      Proto *p = gcotop(o);
+      Proto *p = gco2p(o);
       return sizeof(Proto) + sizeof(Instruction) * p->sizecode +
-             sizeof(Proto *) * p->sizep + sizeof(TObject) * p->sizek + 
+             sizeof(Proto *) * p->sizep + sizeof(TValue) * p->sizek + 
              sizeof(int) * p->sizelineinfo + sizeof(LocVar) * p->sizelocvars +
              sizeof(TString *) * p->sizeupvalues;
     }
@@ -112,29 +112,29 @@ static void reallymarkobject (global_State *g, GCObject *o) {
       return;
     }
     case LUA_TUSERDATA: {
-      Table *mt = gcotou(o)->uv.metatable;
+      Table *mt = gco2u(o)->metatable;
       gray2black(o);  /* udata are never gray */
       if (mt) markobject(g, mt);
       return;
     }
     case LUA_TFUNCTION: {
-      gcotocl(o)->c.gclist = g->gray;
+      gco2cl(o)->c.gclist = g->gray;
       break;
     }
     case LUA_TTABLE: {
-      gcotoh(o)->gclist = g->gray;
+      gco2h(o)->gclist = g->gray;
       break;
     }
     case LUA_TTHREAD: {
-      gcototh(o)->gclist = g->gray;
+      gco2th(o)->gclist = g->gray;
       break;
     }
     case LUA_TPROTO: {
-      gcotop(o)->gclist = g->gray;
+      gco2p(o)->gclist = g->gray;
       break;
     }
     case LUA_TUPVAL: {
-      gcotouv(o)->gclist = g->gray;
+      gco2uv(o)->gclist = g->gray;
       break;
     }
     default: lua_assert(0);
@@ -161,15 +161,15 @@ size_t luaC_separateudata (lua_State *L) {
   GCObject **lastcollected = &collected;
   while ((curr = *p) != NULL) {
     lua_assert(curr->gch.tt == LUA_TUSERDATA);
-    if (!iswhite(curr) || isfinalized(gcotou(curr)))
+    if (!iswhite(curr) || isfinalized(gco2u(curr)))
       p = &curr->gch.next;  /* don't bother with them */
-    else if (fasttm(L, gcotou(curr)->uv.metatable, TM_GC) == NULL) {
-      markfinalized(gcotou(curr));  /* don't need finalization */
+    else if (fasttm(L, gco2u(curr)->metatable, TM_GC) == NULL) {
+      markfinalized(gco2u(curr));  /* don't need finalization */
       p = &curr->gch.next;
     }
     else {  /* must call its gc method */
-      deadmem += sizeudata(gcotou(curr)->uv.len);
-      markfinalized(gcotou(curr));
+      deadmem += sizeudata(gco2u(curr)->len);
+      markfinalized(gco2u(curr));
       *p = curr->gch.next;
       curr->gch.next = NULL;  /* link `curr' at the end of `collected' list */
       *lastcollected = curr;
@@ -187,7 +187,7 @@ static void traversetable (global_State *g, Table *h) {
   int i;
   int weakkey = 0;
   int weakvalue = 0;
-  const TObject *mode;
+  const TValue *mode;
   if (h->metatable)
     markobject(g, h->metatable);
   lua_assert(h->lsizenode || h->node == g->dummynode);
@@ -200,7 +200,7 @@ static void traversetable (global_State *g, Table *h) {
       h->marked |= cast(lu_byte, (weakkey << KEYWEAKBIT) |
                                  (weakvalue << VALUEWEAKBIT));
       h->gclist = g->weak;  /* must be cleared after GC, ... */
-      g->weak = valtogco(h);  /* ... so put in the appropriate list */
+      g->weak = obj2gco(h);  /* ... so put in the appropriate list */
     }
   }
   if (weakkey && weakvalue) return;
@@ -230,7 +230,7 @@ static void traverseproto (global_State *g, Proto *f) {
   if (f->source) stringmark(f->source);
   for (i=0; i<f->sizek; i++) {  /* mark literal strings */
     if (ttisstring(f->k+i))
-      stringmark(tsvalue(f->k+i));
+      stringmark(rawtsvalue(f->k+i));
   }
   for (i=0; i<f->sizeupvalues; i++) {  /* mark upvalue names */
     if (f->upvalues[i])
@@ -306,19 +306,19 @@ static l_mem propagatemarks (global_State *g, l_mem lim) {
     gray2black(o);
     switch (o->gch.tt) {
       case LUA_TTABLE: {
-        Table *h = gcotoh(o);
+        Table *h = gco2h(o);
         g->gray = h->gclist;
         traversetable(g, h);
         break;
       }
       case LUA_TFUNCTION: {
-        Closure *cl = gcotocl(o);
+        Closure *cl = gco2cl(o);
         g->gray = cl->c.gclist;
         traverseclosure(g, cl);
         break;
       }
       case LUA_TTHREAD: {
-        lua_State *th = gcototh(o);
+        lua_State *th = gco2th(o);
         g->gray = th->gclist;
         th->gclist = g->grayagain;
         g->grayagain = o;
@@ -327,13 +327,13 @@ static l_mem propagatemarks (global_State *g, l_mem lim) {
         break;
       }
       case LUA_TPROTO: {
-        Proto *p = gcotop(o);
+        Proto *p = gco2p(o);
         g->gray = p->gclist;
         traverseproto(g, p);
         break;
       }
       case LUA_TUPVAL: {
-        UpVal *uv = gcotouv(o);
+        UpVal *uv = gco2uv(o);
         g->gray = uv->gclist;
         if (uv->v != &uv->value) {  /* open? */
           uv->gclist = g->grayagain;
@@ -360,10 +360,10 @@ static l_mem propagatemarks (global_State *g, l_mem lim) {
 ** other objects: if really collected, cannot keep them; for userdata
 ** being finalized, keep them in keys, but not in values
 */
-static int iscleared (const TObject *o, int iskey) {
+static int iscleared (const TValue *o, int iskey) {
   if (!iscollectable(o)) return 0;
   if (ttisstring(o)) {
-    stringmark(tsvalue(o));  /* strings are `values', so are never weak */
+    stringmark(rawtsvalue(o));  /* strings are `values', so are never weak */
     return 0;
   }
   return iswhite(gcvalue(o)) ||
@@ -383,13 +383,13 @@ static void removekey (Node *n) {
 */
 static void cleartable (GCObject *l) {
   while (l) {
-    Table *h = gcotoh(l);
+    Table *h = gco2h(l);
     int i = h->sizearray;
     lua_assert(testbit(h->marked, VALUEWEAKBIT) ||
                testbit(h->marked, KEYWEAKBIT));
     if (testbit(h->marked, VALUEWEAKBIT)) {
       while (i--) {
-        TObject *o = &h->array[i];
+        TValue *o = &h->array[i];
         if (iscleared(o, 0))  /* value was collected? */
           setnilvalue(o);  /* remove value */
       }
@@ -408,21 +408,21 @@ static void cleartable (GCObject *l) {
 
 static void freeobj (lua_State *L, GCObject *o) {
   switch (o->gch.tt) {
-    case LUA_TPROTO: luaF_freeproto(L, gcotop(o)); break;
-    case LUA_TFUNCTION: luaF_freeclosure(L, gcotocl(o)); break;
-    case LUA_TUPVAL: luaM_freelem(L, gcotouv(o)); break;
-    case LUA_TTABLE: luaH_free(L, gcotoh(o)); break;
+    case LUA_TPROTO: luaF_freeproto(L, gco2p(o)); break;
+    case LUA_TFUNCTION: luaF_freeclosure(L, gco2cl(o)); break;
+    case LUA_TUPVAL: luaM_freelem(L, gco2uv(o)); break;
+    case LUA_TTABLE: luaH_free(L, gco2h(o)); break;
     case LUA_TTHREAD: {
-      lua_assert(gcototh(o) != L && gcototh(o) != G(L)->mainthread);
-      luaE_freethread(L, gcototh(o));
+      lua_assert(gco2th(o) != L && gco2th(o) != G(L)->mainthread);
+      luaE_freethread(L, gco2th(o));
       break;
     }
     case LUA_TSTRING: {
-      luaM_free(L, o, sizestring(gcotots(o)->tsv.len));
+      luaM_free(L, o, sizestring(gco2ts(o)->len));
       break;
     }
     case LUA_TUSERDATA: {
-      luaM_free(L, o, sizeudata(gcotou(o)->uv.len));
+      luaM_free(L, o, sizeudata(gco2u(o)->len));
       break;
     }
     default: lua_assert(0);
@@ -463,7 +463,7 @@ static l_mem sweepstrings (lua_State *L, int all, l_mem lim) {
     GCObject **p = &G(L)->strt.hash[i];
     while ((curr = *p) != NULL) {
       int mark = curr->gch.marked;
-      lu_mem size = sizestring(gcotots(curr)->tsv.len);
+      lu_mem size = sizestring(gco2ts(curr)->len);
       if (!all && (!(mark & dead) || testbit(mark, FIXEDBIT))) {
         makewhite(g, curr);
         lua_assert(iswhite(curr) && !isdead(g, curr));
@@ -503,8 +503,8 @@ static void GCTM (lua_State *L) {
     g->gcstate = GCSroot;  /* will restart GC */
   else {
     GCObject *o = g->tmudata;
-    Udata *udata = gcotou(o);
-    const TObject *tm;
+    Udata *udata = rawgco2u(o);
+    const TValue *tm;
     g->tmudata = udata->uv.next;  /* remove udata from `tmudata' */
     udata->uv.next = g->firstudata->uv.next;  /* return it to `root' list */
     g->firstudata->uv.next = o;
@@ -513,8 +513,8 @@ static void GCTM (lua_State *L) {
     if (tm != NULL) {
       lu_byte oldah = L->allowhook;
       L->allowhook = 0;  /* stop debug hooks during GC tag method */
-      setobj2s(L->top, tm);
-      setuvalue(L->top+1, udata);
+      setobj2s(L, L->top, tm);
+      setuvalue(L, L->top+1, udata);
       L->top += 2;
       luaD_call(L, L->top - 2, 0);
       L->allowhook = oldah;  /* restore hooks */
@@ -545,7 +545,7 @@ static void markroot (lua_State *L) {
   global_State *g = G(L);
   lua_assert(g->gray == NULL);
   g->weak = NULL;
-  makewhite(g, valtogco(g->mainthread));
+  makewhite(g, obj2gco(g->mainthread));
   markobject(g, g->mainthread);
   markvalue(g, registry(L));
   markobject(g, L);  /* mark running thread */

+ 5 - 5
lgc.h

@@ -1,5 +1,5 @@
 /*
-** $Id: lgc.h,v 1.27 2003/12/04 17:22:42 roberto Exp roberto $
+** $Id: lgc.h,v 1.28 2003/12/09 16:56:11 roberto Exp roberto $
 ** Garbage Collector
 ** See Copyright Notice in lua.h
 */
@@ -76,12 +76,12 @@
 	luaC_step(L); }
 
 
-#define luaC_barrier(L,p,v) { if (valiswhite(v) && isblack(valtogco(p)))  \
-	luaC_barrierf(L,valtogco(p),gcvalue(v)); }
+#define luaC_barrier(L,p,v) { if (valiswhite(v) && isblack(obj2gco(p)))  \
+	luaC_barrierf(L,obj2gco(p),gcvalue(v)); }
 
 #define luaC_objbarrier(L,p,o)  \
-	{ if (iswhite(valtogco(o)) && isblack(valtogco(p))) \
-		luaC_barrierf(L,valtogco(p),valtogco(o)); }
+	{ if (iswhite(obj2gco(o)) && isblack(obj2gco(p))) \
+		luaC_barrierf(L,obj2gco(p),obj2gco(o)); }
 
 size_t luaC_separateudata (lua_State *L);
 void luaC_callGCTM (lua_State *L);

+ 2 - 2
llex.c

@@ -1,5 +1,5 @@
 /*
-** $Id: llex.c,v 1.127 2003/10/03 16:07:44 roberto Exp roberto $
+** $Id: llex.c,v 1.128 2003/10/20 12:24:34 roberto Exp roberto $
 ** Lexical Analyzer
 ** See Copyright Notice in lua.h
 */
@@ -110,7 +110,7 @@ void luaX_syntaxerror (LexState *ls, const char *msg) {
 TString *luaX_newstring (LexState *ls, const char *str, size_t l) {
   lua_State *L = ls->L;
   TString *ts = luaS_newlstr(L, str, l);
-  TObject *o = luaH_setstr(L, ls->fs->h, ts);  /* entry for `str' */
+  TValue *o = luaH_setstr(L, ls->fs->h, ts);  /* entry for `str' */
   if (ttisnil(o))
     setbvalue(o, 1);  /* make sure `str' will not be collected */
   return ts;

+ 5 - 5
lobject.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lobject.c,v 1.98 2003/04/28 13:30:14 roberto Exp roberto $
+** $Id: lobject.c,v 1.99 2003/06/10 12:36:26 roberto Exp roberto $
 ** Some generic functions over Lua objects
 ** See Copyright Notice in lua.h
 */
@@ -27,7 +27,7 @@
 #endif
 
 
-const TObject luaO_nilobject = {LUA_TNIL, {NULL}};
+const TValue luaO_nilobject = {LUA_TNIL, {NULL}};
 
 
 /*
@@ -62,7 +62,7 @@ int luaO_log2 (unsigned int x) {
 }
 
 
-int luaO_rawequalObj (const TObject *t1, const TObject *t2) {
+int luaO_rawequalObj (const TValue *t1, const TValue *t2) {
   if (ttype(t1) != ttype(t2)) return 0;
   else switch (ttype(t1)) {
     case LUA_TNIL:
@@ -93,7 +93,7 @@ int luaO_str2d (const char *s, lua_Number *result) {
 
 
 static void pushstr (lua_State *L, const char *str) {
-  setsvalue2s(L->top, luaS_new(L, str));
+  setsvalue2s(L, L->top, luaS_new(L, str));
   incr_top(L);
 }
 
@@ -105,7 +105,7 @@ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) {
   for (;;) {
     const char *e = strchr(fmt, '%');
     if (e == NULL) break;
-    setsvalue2s(L->top, luaS_newlstr(L, fmt, e-fmt));
+    setsvalue2s(L, L->top, luaS_newlstr(L, fmt, e-fmt));
     incr_top(L);
     switch (*(e+1)) {
       case 's':

+ 55 - 48
lobject.h

@@ -1,5 +1,5 @@
 /*
-** $Id: lobject.h,v 1.161 2003/08/27 21:01:44 roberto Exp roberto $
+** $Id: lobject.h,v 1.162 2003/11/18 14:55:11 roberto Exp roberto $
 ** Type definitions for Lua objects
 ** See Copyright Notice in lua.h
 */
@@ -58,12 +58,12 @@ typedef union {
 
 
 /*
-** Lua values (or `tagged objects')
+** Tagged Values
 */
-typedef struct lua_TObject {
+typedef struct lua_TValue {
   int tt;
   Value value;
-} TObject;
+} TValue;
 
 
 /* Macros to test type */
@@ -82,8 +82,10 @@ typedef struct lua_TObject {
 #define gcvalue(o)	check_exp(iscollectable(o), (o)->value.gc)
 #define pvalue(o)	check_exp(ttislightuserdata(o), (o)->value.p)
 #define nvalue(o)	check_exp(ttisnumber(o), (o)->value.n)
-#define tsvalue(o)	check_exp(ttisstring(o), &(o)->value.gc->ts)
-#define uvalue(o)	check_exp(ttisuserdata(o), &(o)->value.gc->u)
+#define rawtsvalue(o)	check_exp(ttisstring(o), &(o)->value.gc->ts)
+#define tsvalue(o)	(&rawtsvalue(o)->tsv)
+#define rawuvalue(o)	check_exp(ttisuserdata(o), &(o)->value.gc->u)
+#define uvalue(o)	(&rawuvalue(o)->uv)
 #define clvalue(o)	check_exp(ttisfunction(o), &(o)->value.gc->cl)
 #define hvalue(o)	check_exp(ttistable(o), &(o)->value.gc->h)
 #define bvalue(o)	check_exp(ttisboolean(o), (o)->value.b)
@@ -91,64 +93,69 @@ typedef struct lua_TObject {
 
 #define l_isfalse(o)	(ttisnil(o) || (ttisboolean(o) && bvalue(o) == 0))
 
+/*
+** for internal debug only
+*/
+#define checkconsistency(obj) \
+  lua_assert(!iscollectable(obj) || (ttype(obj) == (obj)->value.gc->gch.tt))
+
+#define checkliveness(L,obj) \
+  lua_assert(!iscollectable(obj) || \
+  ((ttype(obj) == (obj)->value.gc->gch.tt) && !isdead(G(L), (obj)->value.gc)))
+
+
 /* Macros to set values */
 #define setnilvalue(obj) ((obj)->tt=LUA_TNIL)
 
 #define setnvalue(obj,x) \
-  { TObject *i_o=(obj); i_o->value.n=(x); i_o->tt=LUA_TNUMBER; }
+  { TValue *i_o=(obj); i_o->value.n=(x); i_o->tt=LUA_TNUMBER; }
 
 #define chgnvalue(obj,x) \
 	check_exp(ttype(obj)==LUA_TNUMBER, (obj)->value.n=(x))
 
 #define setpvalue(obj,x) \
-  { TObject *i_o=(obj); i_o->value.p=(x); i_o->tt=LUA_TLIGHTUSERDATA; }
+  { TValue *i_o=(obj); i_o->value.p=(x); i_o->tt=LUA_TLIGHTUSERDATA; }
 
 #define setbvalue(obj,x) \
-  { TObject *i_o=(obj); i_o->value.b=(x); i_o->tt=LUA_TBOOLEAN; }
+  { TValue *i_o=(obj); i_o->value.b=(x); i_o->tt=LUA_TBOOLEAN; }
 
-#define setsvalue(obj,x) \
-  { TObject *i_o=(obj); \
+#define setsvalue(L,obj,x) \
+  { TValue *i_o=(obj); \
     i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TSTRING; \
-    lua_assert(i_o->value.gc->gch.tt == LUA_TSTRING); }
+    checkliveness(L,i_o); }
 
-#define setuvalue(obj,x) \
-  { TObject *i_o=(obj); \
+#define setuvalue(L,obj,x) \
+  { TValue *i_o=(obj); \
     i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TUSERDATA; \
-    lua_assert(i_o->value.gc->gch.tt == LUA_TUSERDATA); }
+    checkliveness(L,i_o); }
 
-#define setthvalue(obj,x) \
-  { TObject *i_o=(obj); \
+#define setthvalue(L,obj,x) \
+  { TValue *i_o=(obj); \
     i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TTHREAD; \
-    lua_assert(i_o->value.gc->gch.tt == LUA_TTHREAD); }
+    checkliveness(L,i_o); }
 
-#define setclvalue(obj,x) \
-  { TObject *i_o=(obj); \
+#define setclvalue(L,obj,x) \
+  { TValue *i_o=(obj); \
     i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TFUNCTION; \
-    lua_assert(i_o->value.gc->gch.tt == LUA_TFUNCTION); }
+    checkliveness(L,i_o); }
 
-#define sethvalue(obj,x) \
-  { TObject *i_o=(obj); \
+#define sethvalue(L,obj,x) \
+  { TValue *i_o=(obj); \
     i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TTABLE; \
-    lua_assert(i_o->value.gc->gch.tt == LUA_TTABLE); }
+    checkliveness(L,i_o); }
 
-#define setptvalue(obj,x) \
-  { TObject *i_o=(obj); \
+#define setptvalue(L,obj,x) \
+  { TValue *i_o=(obj); \
     i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TPROTO; \
-    lua_assert(i_o->value.gc->gch.tt == LUA_TPROTO); }
-
+    checkliveness(L,i_o); }
 
 
-/*
-** for internal debug only
-*/
-#define checkconsistency(obj) \
-  lua_assert(!iscollectable(obj) || (ttype(obj) == (obj)->value.gc->gch.tt))
 
 
-#define setobj(obj1,obj2) \
-  { const TObject *o2=(obj2); TObject *o1=(obj1); \
-    checkconsistency(o2); \
-    o1->tt=o2->tt; o1->value = o2->value; }
+#define setobj(L,obj1,obj2) \
+  { const TValue *o2=(obj2); TValue *o1=(obj1); \
+    o1->tt=o2->tt; o1->value = o2->value; \
+    checkliveness(L,o1); }
 
 
 /*
@@ -177,7 +184,7 @@ typedef struct lua_TObject {
 
 
 
-typedef TObject *StkId;  /* index to stack elements */
+typedef TValue *StkId;  /* index to stack elements */
 
 
 /*
@@ -216,7 +223,7 @@ typedef union Udata {
 */
 typedef struct Proto {
   CommonHeader;
-  TObject *k;  /* constants used by the function */
+  TValue *k;  /* constants used by the function */
   Instruction *code;
   struct Proto **p;  /* functions defined inside the function */
   int *lineinfo;  /* map from opcodes to source lines */
@@ -253,8 +260,8 @@ typedef struct LocVar {
 typedef struct UpVal {
   CommonHeader;
   GCObject *gclist;
-  TObject *v;  /* points to stack or to its own value */
-  TObject value;  /* the value (when closed) */
+  TValue *v;  /* points to stack or to its own value */
+  TValue value;  /* the value (when closed) */
 } UpVal;
 
 
@@ -268,14 +275,14 @@ typedef struct UpVal {
 typedef struct CClosure {
   ClosureHeader;
   lua_CFunction f;
-  TObject upvalue[1];
+  TValue upvalue[1];
 } CClosure;
 
 
 typedef struct LClosure {
   ClosureHeader;
   struct Proto *p;
-  TObject g;  /* global table for this closure */
+  TValue g;  /* global table for this closure */
   UpVal *upvals[1];
 } LClosure;
 
@@ -295,8 +302,8 @@ typedef union Closure {
 */
 
 typedef struct Node {
-  TObject i_key;
-  TObject i_val;
+  TValue i_key;
+  TValue i_val;
   struct Node *next;  /* for chaining */
 } Node;
 
@@ -306,7 +313,7 @@ typedef struct Table {
   lu_byte flags;  /* 1<<p means tagmethod(p) is not present */ 
   lu_byte lsizenode;  /* log2 of size of `node' array */
   struct Table *metatable;
-  TObject *array;  /* array part */
+  TValue *array;  /* array part */
   Node *node;
   Node *firstfree;  /* this position is free; all positions after it are full */
   GCObject *gclist;
@@ -327,13 +334,13 @@ typedef struct Table {
 
 
 
-extern const TObject luaO_nilobject;
+extern const TValue luaO_nilobject;
 
 int luaO_log2 (unsigned int x);
 int luaO_int2fb (unsigned int x);
 #define fb2int(x)	(((x) & 7) << ((x) >> 3))
 
-int luaO_rawequalObj (const TObject *t1, const TObject *t2);
+int luaO_rawequalObj (const TValue *t1, const TValue *t2);
 int luaO_str2d (const char *s, lua_Number *result);
 
 const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp);

+ 4 - 4
lparser.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lparser.c,v 1.221 2003/10/09 17:56:23 roberto Exp roberto $
+** $Id: lparser.c,v 1.222 2003/12/09 16:56:11 roberto Exp roberto $
 ** Lua Parser
 ** See Copyright Notice in lua.h
 */
@@ -340,9 +340,9 @@ static void open_func (LexState *ls, FuncState *fs) {
   f->maxstacksize = 2;  /* registers 0/1 are always valid */
   fs->h = luaH_new(L, 0, 0);
   /* anchor table of constants and prototype (to avoid being collected) */
-  sethvalue2s(L->top, fs->h);
+  sethvalue2s(L, L->top, fs->h);
   incr_top(L);
-  setptvalue2s(L->top, f);
+  setptvalue2s(L, L->top, f);
   incr_top(L);
 }
 
@@ -357,7 +357,7 @@ static void close_func (LexState *ls) {
   f->sizecode = fs->pc;
   luaM_reallocvector(L, f->lineinfo, f->sizelineinfo, fs->pc, int);
   f->sizelineinfo = fs->pc;
-  luaM_reallocvector(L, f->k, f->sizek, fs->nk, TObject);
+  luaM_reallocvector(L, f->k, f->sizek, fs->nk, TValue);
   f->sizek = fs->nk;
   luaM_reallocvector(L, f->p, f->sizep, fs->np, Proto *);
   f->sizep = fs->np;

+ 10 - 9
lstate.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lstate.c,v 1.133 2003/12/04 17:22:42 roberto Exp roberto $
+** $Id: lstate.c,v 1.134 2003/12/04 18:52:23 roberto Exp roberto $
 ** Global State
 ** See Copyright Notice in lua.h
 */
@@ -50,7 +50,7 @@ typedef struct LG {
 
 
 static void stack_init (lua_State *L1, lua_State *L) {
-  L1->stack = luaM_newvector(L, BASIC_STACK_SIZE + EXTRA_STACK, TObject);
+  L1->stack = luaM_newvector(L, BASIC_STACK_SIZE + EXTRA_STACK, TValue);
   L1->stacksize = BASIC_STACK_SIZE + EXTRA_STACK;
   L1->top = L1->stack;
   L1->stack_last = L1->stack+(L1->stacksize - EXTRA_STACK)-1;
@@ -66,7 +66,7 @@ static void stack_init (lua_State *L1, lua_State *L) {
 
 static void freestack (lua_State *L, lua_State *L1) {
   luaM_freearray(L, L1->base_ci, L1->size_ci, CallInfo);
-  luaM_freearray(L, L1->stack, L1->stacksize, TObject);
+  luaM_freearray(L, L1->stack, L1->stacksize, TValue);
 }
 
 
@@ -79,12 +79,12 @@ static void f_luaopen (lua_State *L, void *ud) {
   u = cast(Udata *, luaM_malloc(L, sizeudata(0)));
   u->uv.len = 0;
   u->uv.metatable = NULL;
-  G(L)->firstudata = valtogco(u);
-  luaC_link(L, valtogco(u), LUA_TUSERDATA);
+  G(L)->firstudata = obj2gco(u);
+  luaC_link(L, obj2gco(u), LUA_TUSERDATA);
   setbit(u->uv.marked, FIXEDBIT);
   stack_init(L, L);  /* init stack */
-  sethvalue(gt(L), luaH_new(L, 0, 4));  /* table of globals */
-  sethvalue(registry(L), luaH_new(L, 4, 4));  /* registry */
+  sethvalue(L, gt(L), luaH_new(L, 0, 4));  /* table of globals */
+  sethvalue(L, registry(L), luaH_new(L, 4, 4));  /* registry */
   luaS_resize(L, MINSTRTABSIZE);  /* initial size of string table */
   luaT_init(L);
   luaX_init(L);
@@ -127,11 +127,12 @@ static void close_state (lua_State *L) {
 
 lua_State *luaE_newthread (lua_State *L) {
   lua_State *L1 = tostate(luaM_malloc(L, state_size(lua_State)));
-  luaC_link(L, valtogco(L1), LUA_TTHREAD);
+  luaC_link(L, obj2gco(L1), LUA_TTHREAD);
   preinit_state(L1);
   L1->l_G = L->l_G;
   stack_init(L1, L);  /* init stack */
-  setobj2n(gt(L1), gt(L));  /* share table of globals */
+  setobj2n(L, gt(L1), gt(L));  /* share table of globals */
+  lua_assert(iswhite(obj2gco(L1)));
   return L1;
 }
 

+ 14 - 12
lstate.h

@@ -1,5 +1,5 @@
 /*
-** $Id: lstate.h,v 1.118 2003/12/04 17:22:42 roberto Exp roberto $
+** $Id: lstate.h,v 1.119 2003/12/04 18:52:23 roberto Exp roberto $
 ** Global State
 ** See Copyright Notice in lua.h
 */
@@ -111,7 +111,7 @@ typedef struct global_State {
   lu_mem GCthreshold;
   lu_mem nblocks;  /* number of `bytes' currently allocated */
   lua_CFunction panic;  /* to be called in unprotected errors */
-  TObject _registry;
+  TValue _registry;
   struct lua_State *mainthread;
   Node dummynode[1];  /* common node array for all empty tables */
   TString *tmname[TM_N];  /* array with tag-method names */
@@ -140,7 +140,7 @@ struct lua_State {
   int basehookcount;
   int hookcount;
   lua_Hook hook;
-  TObject _gt;  /* table of globals */
+  TValue _gt;  /* table of globals */
   GCObject *openupval;  /* list of open upvalues in this stack */
   GCObject *gclist;
   struct lua_longjmp *errorJmp;  /* current error recover point */
@@ -167,18 +167,20 @@ union GCObject {
 
 
 /* macros to convert a GCObject into a specific value */
-#define gcotots(o)	check_exp((o)->gch.tt == LUA_TSTRING, &((o)->ts))
-#define gcotou(o)	check_exp((o)->gch.tt == LUA_TUSERDATA, &((o)->u))
-#define gcotocl(o)	check_exp((o)->gch.tt == LUA_TFUNCTION, &((o)->cl))
-#define gcotoh(o)	check_exp((o)->gch.tt == LUA_TTABLE, &((o)->h))
-#define gcotop(o)	check_exp((o)->gch.tt == LUA_TPROTO, &((o)->p))
-#define gcotouv(o)	check_exp((o)->gch.tt == LUA_TUPVAL, &((o)->uv))
+#define rawgco2ts(o)	check_exp((o)->gch.tt == LUA_TSTRING, &((o)->ts))
+#define gco2ts(o)	(&rawgco2ts(o)->tsv)
+#define rawgco2u(o)	check_exp((o)->gch.tt == LUA_TUSERDATA, &((o)->u))
+#define gco2u(o)	(&rawgco2u(o)->uv)
+#define gco2cl(o)	check_exp((o)->gch.tt == LUA_TFUNCTION, &((o)->cl))
+#define gco2h(o)	check_exp((o)->gch.tt == LUA_TTABLE, &((o)->h))
+#define gco2p(o)	check_exp((o)->gch.tt == LUA_TPROTO, &((o)->p))
+#define gco2uv(o)	check_exp((o)->gch.tt == LUA_TUPVAL, &((o)->uv))
 #define ngcotouv(o) \
 	check_exp((o) == NULL || (o)->gch.tt == LUA_TUPVAL, &((o)->uv))
-#define gcototh(o)	check_exp((o)->gch.tt == LUA_TTHREAD, &((o)->th))
+#define gco2th(o)	check_exp((o)->gch.tt == LUA_TTHREAD, &((o)->th))
 
-/* macro to convert any value into a GCObject */
-#define valtogco(v)	(cast(GCObject *, (v)))
+/* macro to convert any Lua object into a GCObject */
+#define obj2gco(v)	(cast(GCObject *, (v)))
 
 
 lua_State *luaE_newthread (lua_State *L);

+ 5 - 5
lstring.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lstring.c,v 1.84 2003/12/04 17:22:42 roberto Exp roberto $
+** $Id: lstring.c,v 1.85 2003/12/09 16:56:11 roberto Exp roberto $
 ** String table (keeps all strings handled by Lua)
 ** See Copyright Notice in lua.h
 */
@@ -37,7 +37,7 @@ void luaS_resize (lua_State *L, int newsize) {
     GCObject *p = tb->hash[i];
     while (p) {  /* for each node in the list */
       GCObject *next = p->gch.next;  /* save next */
-      unsigned int h = gcotots(p)->tsv.hash;
+      unsigned int h = gco2ts(p)->hash;
       int h1 = lmod(h, newsize);  /* new position */
       lua_assert(cast(int, h%newsize) == lmod(h, newsize));
       p->gch.next = newhash[h1];  /* chain it */
@@ -65,7 +65,7 @@ static TString *newlstr (lua_State *L, const char *str, size_t l,
   tb = &G(L)->strt;
   h = lmod(h, tb->size);
   ts->tsv.next = tb->hash[h];  /* chain new entry */
-  tb->hash[h] = valtogco(ts);
+  tb->hash[h] = obj2gco(ts);
   tb->nuse++;
   if (tb->nuse > cast(lu_int32, tb->size) && tb->size <= MAX_INT/2)
     luaS_resize(L, tb->size*2);  /* too crowded */
@@ -83,7 +83,7 @@ TString *luaS_newlstr (lua_State *L, const char *str, size_t l) {
   for (o = G(L)->strt.hash[lmod(h, G(L)->strt.size)];
        o != NULL;
        o = o->gch.next) {
-    TString *ts = gcotots(o);
+    TString *ts = rawgco2ts(o);
     if (ts->tsv.len == l && (memcmp(str, getstr(ts), l) == 0)) {
       /* string may be dead */
       if (isdead(G(L), o)) changewhite(o);
@@ -103,7 +103,7 @@ Udata *luaS_newudata (lua_State *L, size_t s) {
   u->uv.metatable = NULL;
   /* chain it on udata list */
   u->uv.next = G(L)->firstudata->uv.next;
-  G(L)->firstudata->uv.next = valtogco(u);
+  G(L)->firstudata->uv.next = obj2gco(u);
   return u;
 }
 

+ 36 - 36
ltable.c

@@ -1,5 +1,5 @@
 /*
-** $Id: ltable.c,v 1.137 2003/12/01 18:22:56 roberto Exp roberto $
+** $Id: ltable.c,v 1.138 2003/12/09 16:56:11 roberto Exp roberto $
 ** Lua tables (hash)
 ** See Copyright Notice in lua.h
 */
@@ -91,12 +91,12 @@ static Node *hashnum (const Table *t, lua_Number n) {
 ** returns the `main' position of an element in a table (that is, the index
 ** of its hash value)
 */
-Node *luaH_mainposition (const Table *t, const TObject *key) {
+Node *luaH_mainposition (const Table *t, const TValue *key) {
   switch (ttype(key)) {
     case LUA_TNUMBER:
       return hashnum(t, nvalue(key));
     case LUA_TSTRING:
-      return hashstr(t, tsvalue(key));
+      return hashstr(t, rawtsvalue(key));
     case LUA_TBOOLEAN:
       return hashboolean(t, bvalue(key));
     case LUA_TLIGHTUSERDATA:
@@ -111,7 +111,7 @@ Node *luaH_mainposition (const Table *t, const TObject *key) {
 ** returns the index for `key' if `key' is an appropriate key to live in
 ** the array part of the table, -1 otherwise.
 */
-static int arrayindex (const TObject *key, lua_Number lim) {
+static int arrayindex (const TValue *key, lua_Number lim) {
   if (ttisnumber(key)) {
     lua_Number n = nvalue(key);
     int k;
@@ -137,7 +137,7 @@ static int luaH_index (lua_State *L, Table *t, StkId key) {
     return i-1;  /* yes; that's the index (corrected to C) */
   }
   else {
-    const TObject *v = luaH_get(t, key);
+    const TValue *v = luaH_get(t, key);
     if (v == &luaO_nilobject)
       luaG_runerror(L, "invalid key for `next'");
     i = cast(int, (cast(const lu_byte *, v) -
@@ -152,14 +152,14 @@ int luaH_next (lua_State *L, Table *t, StkId key) {
   for (i++; i < t->sizearray; i++) {  /* try first array part */
     if (!ttisnil(&t->array[i])) {  /* a non-nil value? */
       setnvalue(key, cast(lua_Number, i+1));
-      setobj2s(key+1, &t->array[i]);
+      setobj2s(L, key+1, &t->array[i]);
       return 1;
     }
   }
   for (i -= t->sizearray; i < sizenode(t); i++) {  /* then hash part */
     if (!ttisnil(gval(gnode(t, i)))) {  /* a non-nil value? */
-      setobj2s(key, gkey(gnode(t, i)));
-      setobj2s(key+1, gval(gnode(t, i)));
+      setobj2s(L, key, gkey(gnode(t, i)));
+      setobj2s(L, key+1, gval(gnode(t, i)));
       return 1;
     }
   }
@@ -239,7 +239,7 @@ static void numuse (const Table *t, int *narray, int *nhash) {
 
 static void setarrayvector (lua_State *L, Table *t, int size) {
   int i;
-  luaM_reallocvector(L, t->array, t->sizearray, size, TObject);
+  luaM_reallocvector(L, t->array, t->sizearray, size, TValue);
   for (i=t->sizearray; i<size; i++)
      setnilvalue(&t->array[i]);
   t->sizearray = size;
@@ -296,16 +296,16 @@ static void resize (lua_State *L, Table *t, int nasize, int nhsize) {
     /* re-insert elements from vanishing slice */
     for (i=nasize; i<oldasize; i++) {
       if (!ttisnil(&t->array[i]))
-        setobjt2t(luaH_setnum(L, t, i+1), &t->array[i]);
+        setobjt2t(L, luaH_setnum(L, t, i+1), &t->array[i]);
     }
     /* shrink array */
-    luaM_reallocvector(L, t->array, oldasize, nasize, TObject);
+    luaM_reallocvector(L, t->array, oldasize, nasize, TValue);
   }
   /* re-insert elements in hash part */
   for (i = twoto(oldhsize) - 1; i >= 0; i--) {
     Node *old = nold+i;
     if (!ttisnil(gval(old)))
-      setobjt2t(luaH_set(L, t, gkey(old)), gval(old));
+      setobjt2t(L, luaH_set(L, t, gkey(old)), gval(old));
   }
   if (oldhsize)
     luaM_freearray(L, nold, twoto(oldhsize), Node);  /* free old array */
@@ -327,7 +327,7 @@ static void rehash (lua_State *L, Table *t) {
 
 Table *luaH_new (lua_State *L, int narray, int lnhash) {
   Table *t = luaM_new(L, Table);
-  luaC_link(L, valtogco(t), LUA_TTABLE);
+  luaC_link(L, obj2gco(t), LUA_TTABLE);
   t->metatable = NULL;
   t->flags = cast(lu_byte, ~0);
   /* temporary values (kept only if some malloc fails) */
@@ -344,7 +344,7 @@ Table *luaH_new (lua_State *L, int narray, int lnhash) {
 void luaH_free (lua_State *L, Table *t) {
   if (t->lsizenode)
     luaM_freearray(L, t->node, sizenode(t), Node);
-  luaM_freearray(L, t->array, t->sizearray, TObject);
+  luaM_freearray(L, t->array, t->sizearray, TValue);
   luaM_freelem(L, t);
 }
 
@@ -377,8 +377,8 @@ void luaH_remove (Table *t, Node *e) {
 ** put new key in its main position; otherwise (colliding node is in its main 
 ** position), new key goes to an empty position. 
 */
-static TObject *newkey (lua_State *L, Table *t, const TObject *key) {
-  TObject *val;
+static TValue *newkey (lua_State *L, Table *t, const TValue *key) {
+  TValue *val;
   Node *mp = luaH_mainposition(t, key);
   if (!ttisnil(gval(mp))) {  /* main position is not free? */
     Node *othern = luaH_mainposition(t, gkey(mp));  /* `mp' of colliding node */
@@ -398,7 +398,7 @@ static TObject *newkey (lua_State *L, Table *t, const TObject *key) {
       mp = n;
     }
   }
-  setobj2t(gkey(mp), key);
+  setobj2t(L, gkey(mp), key);
   luaC_barrier(L, t, key);
   lua_assert(ttisnil(gval(mp)));
   for (;;) {  /* correct `firstfree' */
@@ -410,7 +410,7 @@ static TObject *newkey (lua_State *L, Table *t, const TObject *key) {
   /* no more free places; must create one */
   setbvalue(gval(mp), 0);  /* avoid new key being removed */
   rehash(L, t);  /* grow table */
-  val = cast(TObject *, luaH_get(t, key));  /* get new position */
+  val = cast(TValue *, luaH_get(t, key));  /* get new position */
   lua_assert(ttisboolean(val));
   setnilvalue(val);
   return val;
@@ -420,7 +420,7 @@ static TObject *newkey (lua_State *L, Table *t, const TObject *key) {
 /*
 ** generic search function
 */
-static const TObject *luaH_getany (Table *t, const TObject *key) {
+static const TValue *luaH_getany (Table *t, const TValue *key) {
   if (!ttisnil(key)) {
     Node *n = luaH_mainposition(t, key);
     do {  /* check whether `key' is somewhere in the chain */
@@ -435,7 +435,7 @@ static const TObject *luaH_getany (Table *t, const TObject *key) {
 /*
 ** search function for integers
 */
-const TObject *luaH_getnum (Table *t, int key) {
+const TValue *luaH_getnum (Table *t, int key) {
   if (1 <= key && key <= t->sizearray)
     return &t->array[key-1];
   else {
@@ -454,10 +454,10 @@ const TObject *luaH_getnum (Table *t, int key) {
 /*
 ** search function for strings
 */
-const TObject *luaH_getstr (Table *t, TString *key) {
+const TValue *luaH_getstr (Table *t, TString *key) {
   Node *n = hashstr(t, key);
   do {  /* check whether `key' is somewhere in the chain */
-    if (ttisstring(gkey(n)) && tsvalue(gkey(n)) == key)
+    if (ttisstring(gkey(n)) && rawtsvalue(gkey(n)) == key)
       return gval(n);  /* that's it */
     else n = n->next;
   } while (n);
@@ -468,9 +468,9 @@ const TObject *luaH_getstr (Table *t, TString *key) {
 /*
 ** main search function
 */
-const TObject *luaH_get (Table *t, const TObject *key) {
+const TValue *luaH_get (Table *t, const TValue *key) {
   switch (ttype(key)) {
-    case LUA_TSTRING: return luaH_getstr(t, tsvalue(key));
+    case LUA_TSTRING: return luaH_getstr(t, rawtsvalue(key));
     case LUA_TNUMBER: {
       int k;
       lua_number2int(k, (nvalue(key)));
@@ -483,11 +483,11 @@ const TObject *luaH_get (Table *t, const TObject *key) {
 }
 
 
-TObject *luaH_set (lua_State *L, Table *t, const TObject *key) {
-  const TObject *p = luaH_get(t, key);
+TValue *luaH_set (lua_State *L, Table *t, const TValue *key) {
+  const TValue *p = luaH_get(t, key);
   t->flags = 0;
   if (p != &luaO_nilobject)
-    return cast(TObject *, p);
+    return cast(TValue *, p);
   else {
     if (ttisnil(key)) luaG_runerror(L, "table index is nil");
     else if (ttisnumber(key) && nvalue(key) != nvalue(key))
@@ -497,25 +497,25 @@ TObject *luaH_set (lua_State *L, Table *t, const TObject *key) {
 }
 
 
-TObject *luaH_setnum (lua_State *L, Table *t, int key) {
-  const TObject *p = luaH_getnum(t, key);
+TValue *luaH_setnum (lua_State *L, Table *t, int key) {
+  const TValue *p = luaH_getnum(t, key);
   if (p != &luaO_nilobject)
-    return cast(TObject *, p);
+    return cast(TValue *, p);
   else {
-    TObject k;
+    TValue k;
     setnvalue(&k, cast(lua_Number, key));
     return newkey(L, t, &k);
   }
 }
 
 
-TObject *luaH_setstr (lua_State *L, Table *t, TString *key) {
-  const TObject *p = luaH_getstr(t, key);
+TValue *luaH_setstr (lua_State *L, Table *t, TString *key) {
+  const TValue *p = luaH_getstr(t, key);
   if (p != &luaO_nilobject)
-    return cast(TObject *, p);
+    return cast(TValue *, p);
   else {
-    TObject k;
-    setsvalue(&k, key);
+    TValue k;
+    setsvalue(L, &k, key);
     return newkey(L, t, &k);
   }
 }

+ 8 - 8
ltable.h

@@ -1,5 +1,5 @@
 /*
-** $Id: ltable.h,v 1.44 2003/03/18 12:50:04 roberto Exp roberto $
+** $Id: ltable.h,v 1.45 2003/08/26 12:04:13 roberto Exp roberto $
 ** Lua tables (hash)
 ** See Copyright Notice in lua.h
 */
@@ -15,18 +15,18 @@
 #define gval(n)		(&(n)->i_val)
 
 
-const TObject *luaH_getnum (Table *t, int key);
-TObject *luaH_setnum (lua_State *L, Table *t, int key);
-const TObject *luaH_getstr (Table *t, TString *key);
-TObject *luaH_setstr (lua_State *L, Table *t, TString *key);
-const TObject *luaH_get (Table *t, const TObject *key);
-TObject *luaH_set (lua_State *L, Table *t, const TObject *key);
+const TValue *luaH_getnum (Table *t, int key);
+TValue *luaH_setnum (lua_State *L, Table *t, int key);
+const TValue *luaH_getstr (Table *t, TString *key);
+TValue *luaH_setstr (lua_State *L, Table *t, TString *key);
+const TValue *luaH_get (Table *t, const TValue *key);
+TValue *luaH_set (lua_State *L, Table *t, const TValue *key);
 Table *luaH_new (lua_State *L, int narray, int lnhash);
 void luaH_free (lua_State *L, Table *t);
 int luaH_next (lua_State *L, Table *t, StkId key);
 
 /* exported only for debugging */
-Node *luaH_mainposition (const Table *t, const TObject *key);
+Node *luaH_mainposition (const Table *t, const TValue *key);
 
 
 #endif

+ 4 - 4
ltests.c

@@ -1,5 +1,5 @@
 /*
-** $Id: ltests.c,v 1.168 2003/11/05 11:59:14 roberto Exp roberto $
+** $Id: ltests.c,v 1.169 2003/11/19 12:21:57 roberto Exp roberto $
 ** Internal Module for Debugging of the Lua Implementation
 ** See Copyright Notice in lua.h
 */
@@ -269,10 +269,10 @@ static int mem_query (lua_State *L) {
 static int hash_query (lua_State *L) {
   if (lua_isnone(L, 2)) {
     luaL_argcheck(L, lua_type(L, 1) == LUA_TSTRING, 1, "string expected");
-    lua_pushinteger(L, tsvalue(func_at(L, 1))->tsv.hash);
+    lua_pushinteger(L, tsvalue(func_at(L, 1))->hash);
   }
   else {
-    TObject *o = func_at(L, 1);
+    TValue *o = func_at(L, 1);
     Table *t;
     luaL_checktype(L, 2, LUA_TTABLE);
     t = hvalue(func_at(L, 2));
@@ -338,7 +338,7 @@ static int string_query (lua_State *L) {
     GCObject *ts;
     int n = 0;
     for (ts = tb->hash[s]; ts; ts = ts->gch.next) {
-      setsvalue2s(L->top, gcotots(ts));
+      setsvalue2s(L, L->top, gco2ts(ts));
       incr_top(L);
       n++;
     }

+ 1 - 2
ltests.h

@@ -1,5 +1,5 @@
 /*
-** $Id: ltests.h,v 1.20 2002/12/04 17:29:05 roberto Exp roberto $
+** $Id: ltests.h,v 1.21 2003/10/02 20:31:17 roberto Exp roberto $
 ** Internal Header for Debugging of the Lua Implementation
 ** See Copyright Notice in lua.h
 */
@@ -19,7 +19,6 @@
 #include <assert.h>
 #define lua_assert(c)           assert(c)
 #define check_exp(c,e)		(lua_assert(c), (e))
-#define api_check(L, o)		lua_assert(o)
 
 
 /* to avoid warnings, and to make sure value is really unused */

+ 5 - 5
ltm.c

@@ -1,5 +1,5 @@
 /*
-** $Id: ltm.c,v 1.106 2003/04/03 13:35:34 roberto Exp roberto $
+** $Id: ltm.c,v 1.107 2003/12/01 18:22:56 roberto Exp roberto $
 ** Tag methods
 ** See Copyright Notice in lua.h
 */
@@ -45,8 +45,8 @@ void luaT_init (lua_State *L) {
 ** function to be used with macro "fasttm": optimized for absence of
 ** tag methods
 */
-const TObject *luaT_gettm (Table *events, TMS event, TString *ename) {
-  const TObject *tm = luaH_getstr(events, ename);
+const TValue *luaT_gettm (Table *events, TMS event, TString *ename) {
+  const TValue *tm = luaH_getstr(events, ename);
   lua_assert(event <= TM_EQ);
   if (ttisnil(tm)) {  /* no tag method? */
     events->flags |= cast(lu_byte, 1u<<event);  /* cache this fact */
@@ -56,14 +56,14 @@ const TObject *luaT_gettm (Table *events, TMS event, TString *ename) {
 }
 
 
-const TObject *luaT_gettmbyobj (lua_State *L, const TObject *o, TMS event) {
+const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, TMS event) {
   Table *mt;
   switch (ttype(o)) {
     case LUA_TTABLE:
       mt = hvalue(o)->metatable;
       break;
     case LUA_TUSERDATA:
-      mt = uvalue(o)->uv.metatable;
+      mt = uvalue(o)->metatable;
       break;
     default:
       mt = NULL;

+ 3 - 3
ltm.h

@@ -1,5 +1,5 @@
 /*
-** $Id: ltm.h,v 1.41 2002/11/14 11:51:50 roberto Exp roberto $
+** $Id: ltm.h,v 1.42 2003/12/01 18:22:56 roberto Exp roberto $
 ** Tag methods
 ** See Copyright Notice in lua.h
 */
@@ -42,8 +42,8 @@ typedef enum {
 #define fasttm(l,et,e)	gfasttm(G(l), et, e)
 
 
-const TObject *luaT_gettm (Table *events, TMS event, TString *ename);
-const TObject *luaT_gettmbyobj (lua_State *L, const TObject *o, TMS event);
+const TValue *luaT_gettm (Table *events, TMS event, TString *ename);
+const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, TMS event);
 void luaT_init (lua_State *L);
 
 extern const char *const luaT_typenames[];

+ 13 - 11
lundump.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lundump.c,v 1.63 2003/08/25 19:51:54 roberto Exp roberto $
+** $Id: lundump.c,v 1.64 2003/08/27 21:01:44 roberto Exp roberto $
 ** load pre-compiled Lua chunks
 ** See Copyright Notice in lua.h
 */
@@ -158,13 +158,14 @@ static Proto* LoadFunction (LoadState* S, TString* p);
 static void LoadConstants (LoadState* S, Proto* f)
 {
  int i,n;
+ lua_State *L=S->L;
  n=LoadInt(S);
- f->k=luaM_newvector(S->L,n,TObject);
+ f->k=luaM_newvector(L,n,TValue);
  f->sizek=n;
  for (i=0; i<n; i++) setnilvalue(&f->k[i]);
  for (i=0; i<n; i++)
  {
-  TObject* o=&f->k[i];
+  TValue* o=&f->k[i];
   int t=LoadByte(S);
   switch (t)
   {
@@ -172,18 +173,18 @@ static void LoadConstants (LoadState* S, Proto* f)
 	setnvalue(o,LoadNumber(S));
 	break;
    case LUA_TSTRING:
-	setsvalue2n(o,LoadString(S));
+	setsvalue2n(L, o,LoadString(S));
 	break;
    case LUA_TNIL:
    	setnilvalue(o);
 	break;
    default:
-	luaG_runerror(S->L,"bad constant type (%d) in %s",t,S->name);
+	luaG_runerror(L,"bad constant type (%d) in %s",t,S->name);
 	break;
   }
  }
  n=LoadInt(S);
- f->p=luaM_newvector(S->L,n,Proto*);
+ f->p=luaM_newvector(L,n,Proto*);
  f->sizep=n;
  for (i=0; i<n; i++) f->p[i]=NULL;
  for (i=0; i<n; i++) f->p[i]=LoadFunction(S,f->source);
@@ -191,9 +192,10 @@ static void LoadConstants (LoadState* S, Proto* f)
 
 static Proto* LoadFunction (LoadState* S, TString* p)
 {
- Proto* f=luaF_newproto(S->L);
- setptvalue2s(S->L->top, f);
- incr_top(S->L);
+ lua_State *L=S->L;
+ Proto* f=luaF_newproto(L);
+ setptvalue2s(L, L->top, f);
+ incr_top(L);
  f->source=LoadString(S); if (f->source==NULL) f->source=p;
  f->lineDefined=LoadInt(S);
  f->nups=LoadByte(S);
@@ -206,9 +208,9 @@ static Proto* LoadFunction (LoadState* S, TString* p)
  LoadConstants(S,f);
  LoadCode(S,f);
 #ifndef TRUST_BINARIES
- if (!luaG_checkcode(f)) luaG_runerror(S->L,"bad code in %s",S->name);
+ if (!luaG_checkcode(f)) luaG_runerror(L,"bad code in %s",S->name);
 #endif
- S->L->top--;
+ L->top--;
  return f;
 }
 

+ 79 - 79
lvm.c

@@ -1,5 +1,5 @@
 /*
-** $Id: lvm.c,v 1.290 2003/10/27 19:14:31 roberto Exp roberto $
+** $Id: lvm.c,v 1.291 2003/12/09 16:56:11 roberto Exp roberto $
 ** Lua virtual machine
 ** See Copyright Notice in lua.h
 */
@@ -40,7 +40,7 @@
 #define MAXTAGLOOP	100
 
 
-const TObject *luaV_tonumber (const TObject *obj, TObject *n) {
+const TValue *luaV_tonumber (const TValue *obj, TValue *n) {
   lua_Number num;
   if (ttisnumber(obj)) return obj;
   if (ttisstring(obj) && luaO_str2d(svalue(obj), &num)) {
@@ -58,7 +58,7 @@ int luaV_tostring (lua_State *L, StkId obj) {
   else {
     char s[32];  /* 16 digits, sign, point and \0  (+ some extra...) */
     lua_number2str(s, nvalue(obj));
-    setsvalue2s(obj, luaS_new(L, s));
+    setsvalue2s(L, obj, luaS_new(L, s));
     return 1;
   }
 }
@@ -88,11 +88,11 @@ static void traceexec (lua_State *L, const Instruction *pc) {
 }
 
 
-static void prepTMcall (lua_State *L, const TObject *f,
-                        const TObject *p1, const TObject *p2) {
-  setobj2s(L->top, f);  /* push function */
-  setobj2s(L->top+1, p1);  /* 1st argument */
-  setobj2s(L->top+2, p2);  /* 2nd argument */
+static void prepTMcall (lua_State *L, const TValue *f,
+                        const TValue *p1, const TValue *p2) {
+  setobj2s(L, L->top, f);  /* push function */
+  setobj2s(L, L->top+1, p1);  /* 1st argument */
+  setobj2s(L, L->top+2, p2);  /* 2nd argument */
 }
 
 
@@ -103,7 +103,7 @@ static void callTMres (lua_State *L, StkId res) {
   luaD_call(L, L->top - 3, 1);
   res = restorestack(L, result);
   L->top--;
-  setobjs2s(res, L->top);
+  setobjs2s(L, res, L->top);
 }
 
 
@@ -115,16 +115,16 @@ static void callTM (lua_State *L) {
 }
 
 
-void luaV_gettable (lua_State *L, const TObject *t, TObject *key, StkId val) {
+void luaV_gettable (lua_State *L, const TValue *t, TValue *key, StkId val) {
   int loop;
   for (loop = 0; loop < MAXTAGLOOP; loop++) {
-    const TObject *tm;
+    const TValue *tm;
     if (ttistable(t)) {  /* `t' is a table? */
       Table *h = hvalue(t);
-      const TObject *res = luaH_get(h, key); /* do a primitive set */
+      const TValue *res = luaH_get(h, key); /* do a primitive set */
       if (!ttisnil(res) ||  /* result is no nil? */
           (tm = fasttm(L, h->metatable, TM_INDEX)) == NULL) { /* or no TM? */
-        setobj2s(val, res);
+        setobj2s(L, val, res);
         return;
       }
       /* else will try the tag method */
@@ -142,16 +142,16 @@ void luaV_gettable (lua_State *L, const TObject *t, TObject *key, StkId val) {
 }
 
 
-void luaV_settable (lua_State *L, const TObject *t, TObject *key, StkId val) {
+void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val) {
   int loop;
   for (loop = 0; loop < MAXTAGLOOP; loop++) {
-    const TObject *tm;
+    const TValue *tm;
     if (ttistable(t)) {  /* `t' is a table? */
       Table *h = hvalue(t);
-      TObject *oldval = luaH_set(L, h, key); /* do a primitive set */
+      TValue *oldval = luaH_set(L, h, key); /* do a primitive set */
       if (!ttisnil(oldval) ||  /* result is no nil? */
           (tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL) { /* or no TM? */
-        setobj2t(oldval, val);
+        setobj2t(L, oldval, val);
         luaC_barrier(L, h, val);
         return;
       }
@@ -161,7 +161,7 @@ void luaV_settable (lua_State *L, const TObject *t, TObject *key, StkId val) {
       luaG_typeerror(L, t, "index");
     if (ttisfunction(tm)) {
       prepTMcall(L, tm, t, key);
-      setobj2s(L->top+3, val);  /* 3th argument */
+      setobj2s(L, L->top+3, val);  /* 3th argument */
       callTM(L);
       return;
     }
@@ -171,9 +171,9 @@ void luaV_settable (lua_State *L, const TObject *t, TObject *key, StkId val) {
 }
 
 
-static int call_binTM (lua_State *L, const TObject *p1, const TObject *p2,
+static int call_binTM (lua_State *L, const TValue *p1, const TValue *p2,
                        StkId res, TMS event) {
-  const TObject *tm = luaT_gettmbyobj(L, p1, event);  /* try first operand */
+  const TValue *tm = luaT_gettmbyobj(L, p1, event);  /* try first operand */
   if (ttisnil(tm))
     tm = luaT_gettmbyobj(L, p2, event);  /* try second operand */
   if (!ttisfunction(tm)) return 0;
@@ -183,10 +183,10 @@ static int call_binTM (lua_State *L, const TObject *p1, const TObject *p2,
 }
 
 
-static const TObject *get_compTM (lua_State *L, Table *mt1, Table *mt2,
+static const TValue *get_compTM (lua_State *L, Table *mt1, Table *mt2,
                                   TMS event) {
-  const TObject *tm1 = fasttm(L, mt1, event);
-  const TObject *tm2;
+  const TValue *tm1 = fasttm(L, mt1, event);
+  const TValue *tm2;
   if (tm1 == NULL) return NULL;  /* no metamethod */
   if (mt1 == mt2) return tm1;  /* same metatables => same metamethods */
   tm2 = fasttm(L, mt2, event);
@@ -197,10 +197,10 @@ static const TObject *get_compTM (lua_State *L, Table *mt1, Table *mt2,
 }
 
 
-static int call_orderTM (lua_State *L, const TObject *p1, const TObject *p2,
+static int call_orderTM (lua_State *L, const TValue *p1, const TValue *p2,
                          TMS event) {
-  const TObject *tm1 = luaT_gettmbyobj(L, p1, event);
-  const TObject *tm2;
+  const TValue *tm1 = luaT_gettmbyobj(L, p1, event);
+  const TValue *tm2;
   if (ttisnil(tm1)) return -1;  /* no metamethod? */
   tm2 = luaT_gettmbyobj(L, p2, event);
   if (!luaO_rawequalObj(tm1, tm2))  /* different metamethods? */
@@ -233,28 +233,28 @@ static int luaV_strcmp (const TString *ls, const TString *rs) {
 }
 
 
-int luaV_lessthan (lua_State *L, const TObject *l, const TObject *r) {
+int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r) {
   int res;
   if (ttype(l) != ttype(r))
     return luaG_ordererror(L, l, r);
   else if (ttisnumber(l))
     return nvalue(l) < nvalue(r);
   else if (ttisstring(l))
-    return luaV_strcmp(tsvalue(l), tsvalue(r)) < 0;
+    return luaV_strcmp(rawtsvalue(l), rawtsvalue(r)) < 0;
   else if ((res = call_orderTM(L, l, r, TM_LT)) != -1)
     return res;
   return luaG_ordererror(L, l, r);
 }
 
 
-static int luaV_lessequal (lua_State *L, const TObject *l, const TObject *r) {
+static int luaV_lessequal (lua_State *L, const TValue *l, const TValue *r) {
   int res;
   if (ttype(l) != ttype(r))
     return luaG_ordererror(L, l, r);
   else if (ttisnumber(l))
     return nvalue(l) <= nvalue(r);
   else if (ttisstring(l))
-    return luaV_strcmp(tsvalue(l), tsvalue(r)) <= 0;
+    return luaV_strcmp(rawtsvalue(l), rawtsvalue(r)) <= 0;
   else if ((res = call_orderTM(L, l, r, TM_LE)) != -1)  /* first try `le' */
     return res;
   else if ((res = call_orderTM(L, r, l, TM_LT)) != -1)  /* else try `lt' */
@@ -263,8 +263,8 @@ static int luaV_lessequal (lua_State *L, const TObject *l, const TObject *r) {
 }
 
 
-int luaV_equalval (lua_State *L, const TObject *t1, const TObject *t2) {
-  const TObject *tm;
+int luaV_equalval (lua_State *L, const TValue *t1, const TValue *t2) {
+  const TValue *tm;
   lua_assert(ttype(t1) == ttype(t2));
   switch (ttype(t1)) {
     case LUA_TNIL: return 1;
@@ -273,7 +273,7 @@ int luaV_equalval (lua_State *L, const TObject *t1, const TObject *t2) {
     case LUA_TLIGHTUSERDATA: return pvalue(t1) == pvalue(t2);
     case LUA_TUSERDATA: {
       if (uvalue(t1) == uvalue(t2)) return 1;
-      tm = get_compTM(L, uvalue(t1)->uv.metatable, uvalue(t2)->uv.metatable,
+      tm = get_compTM(L, uvalue(t1)->metatable, uvalue(t2)->metatable,
                          TM_EQ);
       break;  /* will try TM */
     }
@@ -298,25 +298,25 @@ void luaV_concat (lua_State *L, int total, int last) {
     if (!tostring(L, top-2) || !tostring(L, top-1)) {
       if (!call_binTM(L, top-2, top-1, top-2, TM_CONCAT))
         luaG_concaterror(L, top-2, top-1);
-    } else if (tsvalue(top-1)->tsv.len > 0) {  /* if len=0, do nothing */
+    } else if (tsvalue(top-1)->len > 0) {  /* if len=0, do nothing */
       /* at least two string values; get as many as possible */
-      lu_mem tl = cast(lu_mem, tsvalue(top-1)->tsv.len) +
-                  cast(lu_mem, tsvalue(top-2)->tsv.len);
+      lu_mem tl = cast(lu_mem, tsvalue(top-1)->len) +
+                  cast(lu_mem, tsvalue(top-2)->len);
       char *buffer;
       int i;
       while (n < total && tostring(L, top-n-1)) {  /* collect total length */
-        tl += tsvalue(top-n-1)->tsv.len;
+        tl += tsvalue(top-n-1)->len;
         n++;
       }
       if (tl > MAX_SIZET) luaG_runerror(L, "string size overflow");
       buffer = luaZ_openspace(L, &G(L)->buff, tl);
       tl = 0;
       for (i=n; i>0; i--) {  /* concat all strings */
-        size_t l = tsvalue(top-i)->tsv.len;
+        size_t l = tsvalue(top-i)->len;
         memcpy(buffer+tl, svalue(top-i), l);
         tl += l;
       }
-      setsvalue2s(top-n, luaS_newlstr(L, buffer, tl));
+      setsvalue2s(L, top-n, luaS_newlstr(L, buffer, tl));
     }
     total -= n-1;  /* got `n' strings to create 1 new */
     last -= n-1;
@@ -324,10 +324,10 @@ void luaV_concat (lua_State *L, int total, int last) {
 }
 
 
-static StkId Arith (lua_State *L, StkId ra, const TObject *rb,
-                    const TObject *rc, TMS op, const Instruction *pc) {
-  TObject tempb, tempc;
-  const TObject *b, *c;
+static StkId Arith (lua_State *L, StkId ra, const TValue *rb,
+                    const TValue *rc, TMS op, const Instruction *pc) {
+  TValue tempb, tempc;
+  const TValue *b, *c;
   L->ci->u.l.savedpc = pc;
   if ((b = luaV_tonumber(rb, &tempb)) != NULL &&
       (c = luaV_tonumber(rc, &tempc)) != NULL) {
@@ -337,7 +337,7 @@ static StkId Arith (lua_State *L, StkId ra, const TObject *rb,
       case TM_MUL: setnvalue(ra, nvalue(b) * nvalue(c)); break;
       case TM_DIV: setnvalue(ra, nvalue(b) / nvalue(c)); break;
       case TM_POW: {
-        const TObject *f = luaH_getstr(hvalue(gt(L)), G(L)->tmname[TM_POW]);
+        const TValue *f = luaH_getstr(hvalue(gt(L)), G(L)->tmname[TM_POW]);
         if (!ttisfunction(f))
           luaG_runerror(L, "`__pow' (`^' operator) is not a function");
         prepTMcall(L, f, b, c);
@@ -376,7 +376,7 @@ static StkId Arith (lua_State *L, StkId ra, const TObject *rb,
 
 StkId luaV_execute (lua_State *L, int nexeccalls) {
   LClosure *cl;
-  TObject *k;
+  TValue *k;
   StkId base;
   const Instruction *pc;
  callentry:  /* entry point when calling new functions */
@@ -409,11 +409,11 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
          GET_OPCODE(i) == OP_RETURN || GET_OPCODE(i) == OP_SETLISTO);
     switch (GET_OPCODE(i)) {
       case OP_MOVE: {
-        setobjs2s(ra, RB(i));
+        setobjs2s(L, ra, RB(i));
         break;
       }
       case OP_LOADK: {
-        setobj2s(ra, KBx(i));
+        setobj2s(L, ra, KBx(i));
         break;
       }
       case OP_LOADBOOL: {
@@ -422,7 +422,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
         break;
       }
       case OP_LOADNIL: {
-        TObject *rb = RB(i);
+        TValue *rb = RB(i);
         do {
           setnilvalue(rb--);
         } while (rb >= ra);
@@ -430,11 +430,11 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
       }
       case OP_GETUPVAL: {
         int b = GETARG_B(i);
-        setobj2s(ra, cl->upvals[b]->v);
+        setobj2s(L, ra, cl->upvals[b]->v);
         break;
       }
       case OP_GETGLOBAL: {
-        TObject *rb = KBx(i);
+        TValue *rb = KBx(i);
         lua_assert(ttisstring(rb) && ttistable(&cl->g));
         L->ci->u.l.savedpc = pc;
         luaV_gettable(L, &cl->g, rb, ra);  /***/
@@ -456,7 +456,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
       }
       case OP_SETUPVAL: {
         UpVal *uv = cl->upvals[GETARG_B(i)];
-        setobj(uv->v, ra);
+        setobj(L, uv->v, ra);
         luaC_barrier(L, uv, ra);
         break;
       }
@@ -469,7 +469,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
       case OP_NEWTABLE: {
         int b = GETARG_B(i);
         b = fb2int(b);
-        sethvalue(ra, luaH_new(L, b, GETARG_C(i)));
+        sethvalue(L, ra, luaH_new(L, b, GETARG_C(i)));
         L->ci->u.l.savedpc = pc;
         luaC_checkGC(L);  /***/
         base = L->base;
@@ -477,15 +477,15 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
       }
       case OP_SELF: {
         StkId rb = RB(i);
-        setobjs2s(ra+1, rb);
+        setobjs2s(L, ra+1, rb);
         L->ci->u.l.savedpc = pc;
         luaV_gettable(L, rb, RKC(i), ra);  /***/
         base = L->base;
         break;
       }
       case OP_ADD: {
-        TObject *rb = RKB(i);
-        TObject *rc = RKC(i);
+        TValue *rb = RKB(i);
+        TValue *rc = RKC(i);
         if (ttisnumber(rb) && ttisnumber(rc)) {
           setnvalue(ra, nvalue(rb) + nvalue(rc));
         }
@@ -494,8 +494,8 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
         break;
       }
       case OP_SUB: {
-        TObject *rb = RKB(i);
-        TObject *rc = RKC(i);
+        TValue *rb = RKB(i);
+        TValue *rc = RKC(i);
         if (ttisnumber(rb) && ttisnumber(rc)) {
           setnvalue(ra, nvalue(rb) - nvalue(rc));
         }
@@ -504,8 +504,8 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
         break;
       }
       case OP_MUL: {
-        TObject *rb = RKB(i);
-        TObject *rc = RKC(i);
+        TValue *rb = RKB(i);
+        TValue *rc = RKC(i);
         if (ttisnumber(rb) && ttisnumber(rc)) {
           setnvalue(ra, nvalue(rb) * nvalue(rc));
         }
@@ -514,8 +514,8 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
         break;
       }
       case OP_DIV: {
-        TObject *rb = RKB(i);
-        TObject *rc = RKC(i);
+        TValue *rb = RKB(i);
+        TValue *rc = RKC(i);
         if (ttisnumber(rb) && ttisnumber(rc)) {
           setnvalue(ra, nvalue(rb) / nvalue(rc));
         }
@@ -528,8 +528,8 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
         break;
       }
       case OP_UNM: {
-        const TObject *rb = RB(i);
-        TObject temp;
+        const TValue *rb = RB(i);
+        TValue temp;
         if (tonumber(rb, &temp)) {
           setnvalue(ra, -nvalue(rb));
         }
@@ -554,7 +554,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
         luaV_concat(L, c-b+1, c);  /* may change `base' (and `ra') */  /***/
         luaC_checkGC(L);  /***/
         base = L->base;
-        setobjs2s(RA(i), base+b);
+        setobjs2s(L, RA(i), base+b);
         break;
       }
       case OP_JMP: {
@@ -583,10 +583,10 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
         break;
       }
       case OP_TEST: {
-        TObject *rb = RB(i);
+        TValue *rb = RB(i);
         if (l_isfalse(rb) == GETARG_C(i)) pc++;
         else {
-          setobjs2s(ra, rb);
+          setobjs2s(L, ra, rb);
           dojump(pc, GETARG_sBx(*pc) + 1);
         }
         break;
@@ -617,7 +617,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
             ra = RA(i);
             if (L->openupval) luaF_close(L, base);
             for (aux = 0; ra+aux < L->top; aux++)  /* move frame down */
-              setobjs2s(base+aux-1, ra+aux);
+              setobjs2s(L, base+aux-1, ra+aux);
             (L->ci - 1)->top = L->top = base+aux;  /* correct top */
             (L->ci - 1)->u.l.savedpc = L->ci->u.l.savedpc;
             (L->ci - 1)->u.l.tailcalls++;  /* one more call lost */
@@ -659,9 +659,9 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
         break;
       }
       case OP_FORPREP: {  /***/
-        const TObject *init = ra;
-        const TObject *plimit = ra+1;
-        const TObject *pstep = ra+2;
+        const TValue *init = ra;
+        const TValue *plimit = ra+1;
+        const TValue *pstep = ra+2;
         L->ci->u.l.savedpc = pc;
         if (!tonumber(init, ra))
           luaG_runerror(L, "`for' initial value must be a number");
@@ -675,9 +675,9 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
       }
       case OP_TFORLOOP: {
         StkId cb = ra + 3;  /* call base */
-        setobjs2s(cb+2, ra+2);
-        setobjs2s(cb+1, ra+1);
-        setobjs2s(cb, ra);
+        setobjs2s(L, cb+2, ra+2);
+        setobjs2s(L, cb+1, ra+1);
+        setobjs2s(L, cb, ra);
         L->top = cb+3;  /* func. + 2 args (state and index) */
         L->ci->u.l.savedpc = pc;
         luaD_call(L, cb, GETARG_C(i));  /***/
@@ -687,15 +687,15 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
         if (ttisnil(cb))  /* break loop? */
           pc++;  /* skip jump (break loop) */
         else {
-          setobjs2s(cb-1, cb);  /* save control variable */
+          setobjs2s(L, cb-1, cb);  /* save control variable */
           dojump(pc, GETARG_sBx(*pc) + 1);  /* jump back */
         }
         break;
       }
       case OP_TFORPREP: {  /* for compatibility only */
         if (ttistable(ra)) {
-          setobjs2s(ra+1, ra);
-          setobj2s(ra, luaH_getstr(hvalue(gt(L)), luaS_new(L, "next")));
+          setobjs2s(L, ra+1, ra);
+          setobj2s(L, ra, luaH_getstr(hvalue(gt(L)), luaS_new(L, "next")));
         }
         dojump(pc, GETARG_sBx(i));
         break;
@@ -716,8 +716,8 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
         }
         bc &= ~(LFIELDS_PER_FLUSH-1);  /* bc = bc - bc%FPF */
         for (; n > 0; n--) {
-          TObject *val = ra+n;
-          setobj2t(luaH_setnum(L, h, bc+n), val);
+          TValue *val = ra+n;
+          setobj2t(L, luaH_setnum(L, h, bc+n), val);
           luaC_barrier(L, h, val);
         }
         break;
@@ -742,7 +742,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
             ncl->l.upvals[j] = luaF_findupval(L, base + GETARG_B(*pc));
           }
         }
-        setclvalue(ra, ncl);
+        setclvalue(L, ra, ncl);
         L->ci->u.l.savedpc = pc;
         luaC_checkGC(L);  /***/
         base = L->base;

+ 6 - 6
lvm.h

@@ -1,5 +1,5 @@
 /*
-** $Id: lvm.h,v 1.48 2003/05/05 18:39:57 roberto Exp $
+** $Id: lvm.h,v 1.49 2003/07/16 20:49:02 roberto Exp roberto $
 ** Lua virtual machine
 ** See Copyright Notice in lua.h
 */
@@ -22,12 +22,12 @@
 	(ttype(o1) == ttype(o2) && luaV_equalval(L, o1, o2))
 
 
-int luaV_lessthan (lua_State *L, const TObject *l, const TObject *r);
-int luaV_equalval (lua_State *L, const TObject *t1, const TObject *t2);
-const TObject *luaV_tonumber (const TObject *obj, TObject *n);
+int luaV_lessthan (lua_State *L, const TValue *l, const TValue *r);
+int luaV_equalval (lua_State *L, const TValue *t1, const TValue *t2);
+const TValue *luaV_tonumber (const TValue *obj, TValue *n);
 int luaV_tostring (lua_State *L, StkId obj);
-void luaV_gettable (lua_State *L, const TObject *t, TObject *key, StkId val);
-void luaV_settable (lua_State *L, const TObject *t, TObject *key, StkId val);
+void luaV_gettable (lua_State *L, const TValue *t, TValue *key, StkId val);
+void luaV_settable (lua_State *L, const TValue *t, TValue *key, StkId val);
 StkId luaV_execute (lua_State *L, int nexeccalls);
 void luaV_concat (lua_State *L, int total, int last);
 

+ 26 - 26
makefile

@@ -1,5 +1,5 @@
 #
-## $Id: makefile,v 1.40 2003/03/19 21:27:30 roberto Exp roberto $
+## $Id: makefile,v 1.41 2003/04/07 20:11:53 roberto Exp roberto $
 ## Makefile
 ## See Copyright Notice in lua.h
 #
@@ -8,7 +8,7 @@
 #CONFIGURATION
 
 # -DEXTERNMEMCHECK -DHARDSTACKTESTS
-# DEBUG = -g -DLUA_USER_H='"ltests.h"'
+DEBUG = -g -DLUA_USER_H='"ltests.h"'
 OPTIMIZE =  -O2 \
   -D'lua_number2int(i,d)=__asm__("fldl %1\nfistpl %0":"=m"(i):"m"(d))' \
 #   -fomit-frame-pointer
@@ -104,53 +104,53 @@ clear	:
 
 
 lapi.o: lapi.c lua.h lapi.h lobject.h llimits.h ldebug.h lstate.h ltm.h \
-  lzio.h ldo.h lfunc.h lgc.h lmem.h lstring.h ltable.h lundump.h lvm.h
+  lzio.h lmem.h ldo.h lfunc.h lgc.h lstring.h ltable.h lundump.h lvm.h
 lauxlib.o: lauxlib.c lua.h lauxlib.h
 lbaselib.o: lbaselib.c lua.h lauxlib.h lualib.h
-lcode.o: lcode.c lua.h lcode.h llex.h lobject.h llimits.h lzio.h \
-  lopcodes.h lparser.h ltable.h ldebug.h lstate.h ltm.h ldo.h lmem.h
+lcode.o: lcode.c lua.h lcode.h llex.h lobject.h llimits.h lzio.h lmem.h \
+  lopcodes.h lparser.h ltable.h ldebug.h lstate.h ltm.h ldo.h lgc.h
 ldblib.o: ldblib.c lua.h lauxlib.h lualib.h
 ldebug.o: ldebug.c lua.h lapi.h lobject.h llimits.h lcode.h llex.h lzio.h \
-  lopcodes.h lparser.h ltable.h ldebug.h lstate.h ltm.h ldo.h lfunc.h \
-  lstring.h lvm.h
+  lmem.h lopcodes.h lparser.h ltable.h ldebug.h lstate.h ltm.h ldo.h \
+  lfunc.h lstring.h lgc.h lvm.h
 ldo.o: ldo.c lua.h ldebug.h lstate.h lobject.h llimits.h ltm.h lzio.h \
-  ldo.h lfunc.h lgc.h lmem.h lopcodes.h lparser.h ltable.h lstring.h \
+  lmem.h ldo.h lfunc.h lgc.h lopcodes.h lparser.h ltable.h lstring.h \
   lundump.h lvm.h
 ldump.o: ldump.c lua.h lobject.h llimits.h lopcodes.h lstate.h ltm.h \
-  lzio.h lundump.h
+  lzio.h lmem.h lundump.h
 lfunc.o: lfunc.c lua.h lfunc.h lobject.h llimits.h lgc.h lmem.h lstate.h \
   ltm.h lzio.h
 lgc.o: lgc.c lua.h ldebug.h lstate.h lobject.h llimits.h ltm.h lzio.h \
-  ldo.h lfunc.h lgc.h lmem.h lstring.h ltable.h
+  lmem.h ldo.h lfunc.h lgc.h lstring.h ltable.h
 liolib.o: liolib.c lua.h lauxlib.h lualib.h
 llex.o: llex.c lua.h ldo.h lobject.h llimits.h lstate.h ltm.h lzio.h \
-  llex.h lparser.h ltable.h lstring.h
+  lmem.h llex.h lparser.h ltable.h lstring.h lgc.h
 lmathlib.o: lmathlib.c lua.h lauxlib.h lualib.h
 lmem.o: lmem.c lua.h ldebug.h lstate.h lobject.h llimits.h ltm.h lzio.h \
-  ldo.h lmem.h
-lobject.o: lobject.c lua.h ldo.h lobject.h llimits.h lstate.h ltm.h \
-  lzio.h lmem.h lstring.h lvm.h
+  lmem.h ldo.h
 loadlib.o: loadlib.c lua.h lauxlib.h lualib.h
+lobject.o: lobject.c lua.h ldo.h lobject.h llimits.h lstate.h ltm.h \
+  lzio.h lmem.h lstring.h lgc.h lvm.h
 lopcodes.o: lopcodes.c lua.h lobject.h llimits.h lopcodes.h
 lparser.o: lparser.c lua.h lcode.h llex.h lobject.h llimits.h lzio.h \
-  lopcodes.h lparser.h ltable.h ldebug.h lstate.h ltm.h lfunc.h lmem.h \
-  lstring.h
+  lmem.h lopcodes.h lparser.h ltable.h ldebug.h lstate.h ltm.h ldo.h \
+  lfunc.h lstring.h lgc.h
 lstate.o: lstate.c lua.h ldebug.h lstate.h lobject.h llimits.h ltm.h \
-  lzio.h ldo.h lfunc.h lgc.h llex.h lmem.h lstring.h ltable.h
+  lzio.h lmem.h ldo.h lfunc.h lgc.h llex.h lstring.h ltable.h
 lstring.o: lstring.c lua.h lmem.h llimits.h lobject.h lstate.h ltm.h \
-  lzio.h lstring.h
+  lzio.h lstring.h lgc.h
 lstrlib.o: lstrlib.c lua.h lauxlib.h lualib.h
 ltable.o: ltable.c lua.h ldebug.h lstate.h lobject.h llimits.h ltm.h \
-  lzio.h ldo.h lgc.h lmem.h ltable.h
+  lzio.h lmem.h ldo.h lgc.h ltable.h
 ltablib.o: ltablib.c lua.h lauxlib.h lualib.h
 ltests.o: ltests.c lua.h lapi.h lobject.h llimits.h lauxlib.h lcode.h \
-  llex.h lzio.h lopcodes.h lparser.h ltable.h ldebug.h lstate.h ltm.h \
-  ldo.h lfunc.h lmem.h lstring.h lualib.h
-ltm.o: ltm.c lua.h lobject.h llimits.h lstate.h ltm.h lzio.h lstring.h \
-  ltable.h
+  llex.h lzio.h lmem.h lopcodes.h lparser.h ltable.h ldebug.h lstate.h \
+  ltm.h ldo.h lfunc.h lstring.h lgc.h lualib.h
+ltm.o: ltm.c lua.h lobject.h llimits.h lstate.h ltm.h lzio.h lmem.h \
+  lstring.h lgc.h ltable.h
 lua.o: lua.c lua.h lauxlib.h lualib.h
 lundump.o: lundump.c lua.h ldebug.h lstate.h lobject.h llimits.h ltm.h \
-  lzio.h lfunc.h lmem.h lopcodes.h lstring.h lundump.h
+  lzio.h lmem.h ldo.h lfunc.h lopcodes.h lstring.h lgc.h lundump.h
 lvm.o: lvm.c lua.h ldebug.h lstate.h lobject.h llimits.h ltm.h lzio.h \
-  ldo.h lfunc.h lgc.h lopcodes.h lstring.h ltable.h lvm.h
-lzio.o: lzio.c lua.h llimits.h lmem.h lzio.h
+  lmem.h ldo.h lfunc.h lgc.h lopcodes.h lstring.h ltable.h lvm.h
+lzio.o: lzio.c lua.h llimits.h lmem.h lstate.h lobject.h ltm.h lzio.h