Browse Source

new macros to distinguish different types of object moves (for future GC
evolution).

Roberto Ierusalimschy 23 years ago
parent
commit
dff9be4224
9 changed files with 103 additions and 88 deletions
  1. 17 19
      lapi.c
  2. 5 5
      ldebug.c
  3. 13 13
      ldo.c
  4. 2 2
      lgc.c
  5. 3 3
      lobject.c
  6. 18 1
      lobject.h
  7. 9 9
      ltable.c
  8. 2 2
      ltests.c
  9. 34 34
      lvm.c

+ 17 - 19
lapi.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lapi.c,v 1.215 2002/10/25 21:31:28 roberto Exp roberto $
+** $Id: lapi.c,v 1.216 2002/11/06 19:08:00 roberto Exp roberto $
 ** Lua API
 ** Lua API
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -84,7 +84,7 @@ static TObject *luaA_indexAcceptable (lua_State *L, int index) {
 
 
 
 
 void luaA_pushobject (lua_State *L, const TObject *o) {
 void luaA_pushobject (lua_State *L, const TObject *o) {
-  setobj(L->top, o);
+  setobj2s(L->top, o);
   incr_top(L);
   incr_top(L);
 }
 }
 
 
@@ -111,7 +111,7 @@ LUA_API void lua_movethread (lua_State *from, lua_State *to, int n) {
   api_checknelems(from, n);
   api_checknelems(from, n);
   from->top -= n;
   from->top -= n;
   for (i = 0; i < n; i++) {
   for (i = 0; i < n; i++) {
-    setobj(to->top, from->top + i);
+    setobj2s(to->top, from->top + i);
     api_incr_top(to);
     api_incr_top(to);
   }
   }
   lua_unlock(to);
   lua_unlock(to);
@@ -171,7 +171,7 @@ LUA_API void lua_remove (lua_State *L, int index) {
   StkId p;
   StkId p;
   lua_lock(L);
   lua_lock(L);
   p = luaA_index(L, index);
   p = luaA_index(L, index);
-  while (++p < L->top) setobj(p-1, p);
+  while (++p < L->top) setobjs2s(p-1, p);
   L->top--;
   L->top--;
   lua_unlock(L);
   lua_unlock(L);
 }
 }
@@ -182,8 +182,8 @@ LUA_API void lua_insert (lua_State *L, int index) {
   StkId q;
   StkId q;
   lua_lock(L);
   lua_lock(L);
   p = luaA_index(L, index);
   p = luaA_index(L, index);
-  for (q = L->top; q>p; q--) setobj(q, q-1);
-  setobj(p, L->top);
+  for (q = L->top; q>p; q--) setobjs2s(q, q-1);
+  setobjs2s(p, L->top);
   lua_unlock(L);
   lua_unlock(L);
 }
 }
 
 
@@ -191,7 +191,7 @@ LUA_API void lua_insert (lua_State *L, int index) {
 LUA_API void lua_replace (lua_State *L, int index) {
 LUA_API void lua_replace (lua_State *L, int index) {
   lua_lock(L);
   lua_lock(L);
   api_checknelems(L, 1);
   api_checknelems(L, 1);
-  setobj(luaA_index(L, index), L->top - 1);
+  setobj(luaA_index(L, index), L->top - 1);  /* unknown destination */
   L->top--;
   L->top--;
   lua_unlock(L);
   lua_unlock(L);
 }
 }
@@ -199,7 +199,7 @@ LUA_API void lua_replace (lua_State *L, int index) {
 
 
 LUA_API void lua_pushvalue (lua_State *L, int index) {
 LUA_API void lua_pushvalue (lua_State *L, int index) {
   lua_lock(L);
   lua_lock(L);
-  setobj(L->top, luaA_index(L, index));
+  setobj2s(L->top, luaA_index(L, index));
   api_incr_top(L);
   api_incr_top(L);
   lua_unlock(L);
   lua_unlock(L);
 }
 }
@@ -394,7 +394,7 @@ LUA_API void lua_pushnumber (lua_State *L, lua_Number n) {
 
 
 LUA_API void lua_pushlstring (lua_State *L, const char *s, size_t len) {
 LUA_API void lua_pushlstring (lua_State *L, const char *s, size_t len) {
   lua_lock(L);
   lua_lock(L);
-  setsvalue(L->top, luaS_newlstr(L, s, len));
+  setsvalue2s(L->top, luaS_newlstr(L, s, len));
   api_incr_top(L);
   api_incr_top(L);
   lua_unlock(L);
   lua_unlock(L);
 }
 }
@@ -469,11 +469,9 @@ LUA_API void lua_pushlightuserdata (lua_State *L, void *p) {
 
 
 LUA_API void lua_gettable (lua_State *L, int index) {
 LUA_API void lua_gettable (lua_State *L, int index) {
   StkId t;
   StkId t;
-  const TObject *v;
   lua_lock(L);
   lua_lock(L);
   t = luaA_index(L, index);
   t = luaA_index(L, index);
-  v = luaV_gettable(L, t, L->top-1, 0);
-  setobj(L->top - 1, v);
+  setobj2s(L->top - 1, luaV_gettable(L, t, L->top - 1, 0));
   lua_unlock(L);
   lua_unlock(L);
 }
 }
 
 
@@ -483,7 +481,7 @@ LUA_API void lua_rawget (lua_State *L, int index) {
   lua_lock(L);
   lua_lock(L);
   t = luaA_index(L, index);
   t = luaA_index(L, index);
   api_check(L, ttistable(t));
   api_check(L, ttistable(t));
-  setobj(L->top - 1, luaH_get(hvalue(t), L->top - 1));
+  setobj2s(L->top - 1, luaH_get(hvalue(t), L->top - 1));
   lua_unlock(L);
   lua_unlock(L);
 }
 }
 
 
@@ -493,7 +491,7 @@ LUA_API void lua_rawgeti (lua_State *L, int index, int n) {
   lua_lock(L);
   lua_lock(L);
   o = luaA_index(L, index);
   o = luaA_index(L, index);
   api_check(L, ttistable(o));
   api_check(L, ttistable(o));
-  setobj(L->top, luaH_getnum(hvalue(o), n));
+  setobj2s(L->top, luaH_getnum(hvalue(o), n));
   api_incr_top(L);
   api_incr_top(L);
   lua_unlock(L);
   lua_unlock(L);
 }
 }
@@ -553,7 +551,7 @@ LUA_API void lua_getglobals (lua_State *L, int index) {
   StkId o;
   StkId o;
   lua_lock(L);
   lua_lock(L);
   o = luaA_index(L, index);
   o = luaA_index(L, index);
-  setobj(L->top, isLfunction(o) ? &clvalue(o)->l.g : gt(L));
+  setobj2s(L->top, isLfunction(o) ? &clvalue(o)->l.g : gt(L));
   api_incr_top(L);
   api_incr_top(L);
   lua_unlock(L);
   lua_unlock(L);
 }
 }
@@ -581,7 +579,7 @@ LUA_API void lua_rawset (lua_State *L, int index) {
   api_checknelems(L, 2);
   api_checknelems(L, 2);
   t = luaA_index(L, index);
   t = luaA_index(L, index);
   api_check(L, ttistable(t));
   api_check(L, ttistable(t));
-  setobj(luaH_set(L, hvalue(t), L->top-2), L->top-1);
+  setobj2t(luaH_set(L, hvalue(t), L->top-2), L->top-1);
   L->top -= 2;
   L->top -= 2;
   lua_unlock(L);
   lua_unlock(L);
 }
 }
@@ -593,7 +591,7 @@ LUA_API void lua_rawseti (lua_State *L, int index, int n) {
   api_checknelems(L, 1);
   api_checknelems(L, 1);
   o = luaA_index(L, index);
   o = luaA_index(L, index);
   api_check(L, ttistable(o));
   api_check(L, ttistable(o));
-  setobj(luaH_setnum(L, hvalue(o), n), L->top-1);
+  setobj2t(luaH_setnum(L, hvalue(o), n), L->top-1);
   L->top--;
   L->top--;
   lua_unlock(L);
   lua_unlock(L);
 }
 }
@@ -787,7 +785,7 @@ LUA_API void lua_concat (lua_State *L, int n) {
     luaC_checkGC(L);
     luaC_checkGC(L);
   }
   }
   else if (n == 0) {  /* push empty string */
   else if (n == 0) {  /* push empty string */
-    setsvalue(L->top, luaS_newlstr(L, NULL, 0));
+    setsvalue2s(L->top, luaS_newlstr(L, NULL, 0));
     api_incr_top(L);
     api_incr_top(L);
   }
   }
   /* else n == 1; nothing to do */
   /* else n == 1; nothing to do */
@@ -815,7 +813,7 @@ LUA_API int lua_pushupvalues (lua_State *L) {
   n = func->c.nupvalues;
   n = func->c.nupvalues;
   luaD_checkstack(L, n + LUA_MINSTACK);
   luaD_checkstack(L, n + LUA_MINSTACK);
   for (i=0; i<n; i++) {
   for (i=0; i<n; i++) {
-    setobj(L->top, &func->c.upvalue[i]);
+    setobj2s(L->top, &func->c.upvalue[i]);
     L->top++;
     L->top++;
   }
   }
   lua_unlock(L);
   lua_unlock(L);

+ 5 - 5
ldebug.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: ldebug.c,v 1.134 2002/09/05 19:45:42 roberto Exp roberto $
+** $Id: ldebug.c,v 1.135 2002/10/16 20:40:58 roberto Exp roberto $
 ** Debug Interface
 ** Debug Interface
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -127,7 +127,7 @@ LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n) {
     if (!name || name[0] == '(')  /* `(' starts private locals */
     if (!name || name[0] == '(')  /* `(' starts private locals */
       name = NULL;
       name = NULL;
     else
     else
-      setobj(ci->base+(n-1), L->top);
+      setobjs2s(ci->base+(n-1), L->top);
   }
   }
   lua_unlock(L);
   lua_unlock(L);
   return name;
   return name;
@@ -218,7 +218,7 @@ LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) {
         break;
         break;
       }
       }
       case 'f': {
       case 'f': {
-        setobj(L->top, f);
+        setobj2s(L->top, f);
         status = 2;
         status = 2;
         break;
         break;
       }
       }
@@ -538,8 +538,8 @@ void luaG_errormsg (lua_State *L) {
   if (L->errfunc != 0) {  /* is there an error handling function? */
   if (L->errfunc != 0) {  /* is there an error handling function? */
     StkId errfunc = restorestack(L, L->errfunc);
     StkId errfunc = restorestack(L, L->errfunc);
     if (!ttisfunction(errfunc)) luaD_throw(L, LUA_ERRERR);
     if (!ttisfunction(errfunc)) luaD_throw(L, LUA_ERRERR);
-    setobj(L->top, L->top - 1);  /* move argument */
-    setobj(L->top - 1, errfunc);  /* push function */
+    setobjs2s(L->top, L->top - 1);  /* move argument */
+    setobjs2s(L->top - 1, errfunc);  /* push function */
     incr_top(L);
     incr_top(L);
     luaD_call(L, L->top - 2, 1);  /* call it */
     luaD_call(L, L->top - 2, 1);  /* call it */
   }
   }

+ 13 - 13
ldo.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: ldo.c,v 1.197 2002/10/25 20:05:28 roberto Exp roberto $
+** $Id: ldo.c,v 1.198 2002/11/06 19:08:00 roberto Exp roberto $
 ** Stack and Call structure of Lua
 ** Stack and Call structure of Lua
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -47,16 +47,16 @@ struct lua_longjmp {
 static void seterrorobj (lua_State *L, int errcode, StkId oldtop) {
 static void seterrorobj (lua_State *L, int errcode, StkId oldtop) {
   switch (errcode) {
   switch (errcode) {
     case LUA_ERRMEM: {
     case LUA_ERRMEM: {
-      setsvalue(oldtop, luaS_new(L, MEMERRMSG));
+      setsvalue2s(oldtop, luaS_new(L, MEMERRMSG));
       break;
       break;
     }
     }
     case LUA_ERRERR: {
     case LUA_ERRERR: {
-      setsvalue(oldtop, luaS_new(L, "error in error handling"));
+      setsvalue2s(oldtop, luaS_new(L, "error in error handling"));
       break;
       break;
     }
     }
     case LUA_ERRSYNTAX:
     case LUA_ERRSYNTAX:
     case LUA_ERRRUN: {
     case LUA_ERRRUN: {
-      setobj(oldtop, L->top - 1);  /* error message on current top */
+      setobjs2s(oldtop, L->top - 1);  /* error message on current top */
       break;
       break;
     }
     }
   }
   }
@@ -188,7 +188,7 @@ static void adjust_varargs (lua_State *L, int nfixargs, StkId base) {
   actual -= nfixargs;  /* number of extra arguments */
   actual -= nfixargs;  /* number of extra arguments */
   htab = luaH_new(L, 0, 0);  /* create `arg' table */
   htab = luaH_new(L, 0, 0);  /* create `arg' table */
   for (i=0; i<actual; i++)  /* put extra arguments into `arg' table */
   for (i=0; i<actual; i++)  /* put extra arguments into `arg' table */
-    setobj(luaH_setnum(L, htab, i+1), L->top - actual + i);
+    setobj2t(luaH_setnum(L, htab, i+1), L->top - actual + i);
   /* store counter in field `n' */
   /* store counter in field `n' */
   setsvalue(&nname, luaS_newliteral(L, "n"));
   setsvalue(&nname, luaS_newliteral(L, "n"));
   setnvalue(luaH_set(L, htab, &nname), actual);
   setnvalue(luaH_set(L, htab, &nname), actual);
@@ -205,10 +205,10 @@ static StkId tryfuncTM (lua_State *L, StkId func) {
   if (!ttisfunction(tm))
   if (!ttisfunction(tm))
     luaG_typeerror(L, func, "call");
     luaG_typeerror(L, func, "call");
   /* Open a hole inside the stack at `func' */
   /* Open a hole inside the stack at `func' */
-  for (p = L->top; p > func; p--) setobj(p, p-1);
+  for (p = L->top; p > func; p--) setobjs2s(p, p-1);
   incr_top(L);
   incr_top(L);
   func = restorestack(L, funcr);  /* previous call may change stack */
   func = restorestack(L, funcr);  /* previous call may change stack */
-  setobj(func, tm);  /* tag method is the new function to be called */
+  setobj2s(func, tm);  /* tag method is the new function to be called */
   return func;
   return func;
 }
 }
 
 
@@ -270,7 +270,7 @@ void luaD_poscall (lua_State *L, int wanted, StkId firstResult) {
   L->ci--;
   L->ci--;
   /* move results to correct place */
   /* move results to correct place */
   while (wanted != 0 && firstResult < L->top) {
   while (wanted != 0 && firstResult < L->top) {
-    setobj(res++, firstResult++);
+    setobjs2s(res++, firstResult++);
     wanted--;
     wanted--;
   }
   }
   while (wanted-- > 0)
   while (wanted-- > 0)
@@ -333,10 +333,10 @@ LUA_API int lua_resume (lua_State *L, int nargs) {
   old_allowhooks = allowhook(L);
   old_allowhooks = allowhook(L);
   lua_assert(L->errfunc == 0);
   lua_assert(L->errfunc == 0);
   status = luaD_rawrunprotected(L, resume, &nargs);
   status = luaD_rawrunprotected(L, resume, &nargs);
-  if (status != 0) {
-    L->ci = L->base_ci;  /* `kill' thread (??) */
+  if (status != 0) {  /* error? */
+    L->ci = L->base_ci;  /* go back to initial level */
+    luaF_close(L, L->ci->base);  /* close eventual pending closures */
     seterrorobj(L, status, L->ci->base);
     seterrorobj(L, status, L->ci->base);
-    luaF_close(L, L->top);  /* close eventual pending closures */
     setallowhook(L, old_allowhooks);
     setallowhook(L, old_allowhooks);
     restore_stack_limit(L);
     restore_stack_limit(L);
   }
   }
@@ -355,7 +355,7 @@ LUA_API int lua_yield (lua_State *L, int nresults) {
   if (L->top - nresults > ci->base) {  /* is there garbage in the stack? */
   if (L->top - nresults > ci->base) {  /* is there garbage in the stack? */
     int i;
     int i;
     for (i=0; i<nresults; i++)  /* move down results */
     for (i=0; i<nresults; i++)  /* move down results */
-      setobj(ci->base + i, L->top - nresults + i);
+      setobjs2s(ci->base + i, L->top - nresults + i);
     L->top = ci->base + nresults;
     L->top = ci->base + nresults;
   }
   }
   lua_unlock(L);
   lua_unlock(L);
@@ -391,8 +391,8 @@ int luaD_pcall (lua_State *L, int nargs, int nresults, ptrdiff_t errfunc) {
   status = luaD_rawrunprotected(L, &f_call, &c);
   status = luaD_rawrunprotected(L, &f_call, &c);
   if (status != 0) {  /* an error occurred? */
   if (status != 0) {  /* an error occurred? */
     StkId oldtop = restorestack(L, old_top) - (nargs+1);
     StkId oldtop = restorestack(L, old_top) - (nargs+1);
+    luaF_close(L, oldtop);  /* close eventual pending closures */
     seterrorobj(L, status, oldtop);
     seterrorobj(L, status, oldtop);
-    luaF_close(L, L->top);  /* close eventual pending closures */
     L->ci = restoreci(L, old_ci);
     L->ci = restoreci(L, old_ci);
     setallowhook(L, old_allowhooks);
     setallowhook(L, old_allowhooks);
     restore_stack_limit(L);
     restore_stack_limit(L);

+ 2 - 2
lgc.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lgc.c,v 1.153 2002/10/22 17:58:14 roberto Exp roberto $
+** $Id: lgc.c,v 1.154 2002/10/25 20:05:28 roberto Exp roberto $
 ** Garbage Collector
 ** Garbage Collector
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -344,7 +344,7 @@ static void checkSizes (lua_State *L) {
 static void do1gcTM (lua_State *L, Udata *udata) {
 static void do1gcTM (lua_State *L, Udata *udata) {
   const TObject *tm = fasttm(L, udata->uv.metatable, TM_GC);
   const TObject *tm = fasttm(L, udata->uv.metatable, TM_GC);
   if (tm != NULL) {
   if (tm != NULL) {
-    setobj(L->top, tm);
+    setobj2s(L->top, tm);
     setuvalue(L->top+1, udata);
     setuvalue(L->top+1, udata);
     L->top += 2;
     L->top += 2;
     luaD_call(L, L->top - 2, 0);
     luaD_call(L, L->top - 2, 0);

+ 3 - 3
lobject.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lobject.c,v 1.90 2002/10/08 18:46:08 roberto Exp roberto $
+** $Id: lobject.c,v 1.91 2002/10/22 17:18:28 roberto Exp roberto $
 ** Some generic functions over Lua objects
 ** Some generic functions over Lua objects
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -86,7 +86,7 @@ int luaO_str2d (const char *s, lua_Number *result) {
 
 
 
 
 static void pushstr (lua_State *L, const char *str) {
 static void pushstr (lua_State *L, const char *str) {
-  setsvalue(L->top, luaS_new(L, str));
+  setsvalue2s(L->top, luaS_new(L, str));
   incr_top(L);
   incr_top(L);
 }
 }
 
 
@@ -98,7 +98,7 @@ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) {
   for (;;) {
   for (;;) {
     const char *e = strchr(fmt, '%');
     const char *e = strchr(fmt, '%');
     if (e == NULL) break;
     if (e == NULL) break;
-    setsvalue(L->top, luaS_newlstr(L, fmt, e-fmt));
+    setsvalue2s(L->top, luaS_newlstr(L, fmt, e-fmt));
     incr_top(L);
     incr_top(L);
     switch (*(e+1)) {
     switch (*(e+1)) {
       case 's':
       case 's':

+ 18 - 1
lobject.h

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lobject.h,v 1.150 2002/10/25 20:05:28 roberto Exp roberto $
+** $Id: lobject.h,v 1.151 2002/11/04 12:31:44 roberto Exp roberto $
 ** Type definitions for Lua objects
 ** Type definitions for Lua objects
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -132,6 +132,7 @@ typedef struct lua_TObject {
 #define setnilvalue(obj) ((obj)->tt=LUA_TNIL)
 #define setnilvalue(obj) ((obj)->tt=LUA_TNIL)
 
 
 
 
+
 /*
 /*
 ** for internal debug only
 ** for internal debug only
 */
 */
@@ -144,6 +145,22 @@ typedef struct lua_TObject {
     checkconsistency(o2); \
     checkconsistency(o2); \
     o1->tt=o2->tt; o1->value = o2->value; }
     o1->tt=o2->tt; o1->value = o2->value; }
 
 
+
+/*
+** different types of sets, according to destination
+*/
+
+/* from stack to (same) stack */
+#define setobjs2s	setobj
+/* to stack (not from same stack) */
+#define setobj2s	setobj
+/* from table to same table */
+#define setobjt2t	setobj
+/* to table */
+#define setobj2t	setobj
+/* string to stack */
+#define setsvalue2s	setsvalue
+
 #define setttype(obj, tt) (ttype(obj) = (tt))
 #define setttype(obj, tt) (ttype(obj) = (tt))
 
 
 
 

+ 9 - 9
ltable.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: ltable.c,v 1.118 2002/08/30 19:09:21 roberto Exp roberto $
+** $Id: ltable.c,v 1.119 2002/09/02 19:54:49 roberto Exp roberto $
 ** Lua tables (hash)
 ** Lua tables (hash)
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -111,7 +111,7 @@ static int arrayindex (const TObject *key) {
 ** elements in the array part, then elements in the hash part. The
 ** elements in the array part, then elements in the hash part. The
 ** beginning and end of a traversal are signalled by -1.
 ** beginning and end of a traversal are signalled by -1.
 */
 */
-static int luaH_index (lua_State *L, Table *t, const TObject *key) {
+static int luaH_index (lua_State *L, Table *t, StkId key) {
   int i;
   int i;
   if (ttisnil(key)) return -1;  /* first iteration */
   if (ttisnil(key)) return -1;  /* first iteration */
   i = arrayindex(key);
   i = arrayindex(key);
@@ -129,19 +129,19 @@ static int luaH_index (lua_State *L, Table *t, const TObject *key) {
 }
 }
 
 
 
 
-int luaH_next (lua_State *L, Table *t, TObject *key) {
+int luaH_next (lua_State *L, Table *t, StkId key) {
   int i = luaH_index(L, t, key);  /* find original element */
   int i = luaH_index(L, t, key);  /* find original element */
   for (i++; i < t->sizearray; i++) {  /* try first array part */
   for (i++; i < t->sizearray; i++) {  /* try first array part */
     if (!ttisnil(&t->array[i])) {  /* a non-nil value? */
     if (!ttisnil(&t->array[i])) {  /* a non-nil value? */
       setnvalue(key, i+1);
       setnvalue(key, i+1);
-      setobj(key+1, &t->array[i]);
+      setobj2s(key+1, &t->array[i]);
       return 1;
       return 1;
     }
     }
   }
   }
   for (i -= t->sizearray; i < sizenode(t); i++) {  /* then hash part */
   for (i -= t->sizearray; i < sizenode(t); i++) {  /* then hash part */
     if (!ttisnil(val(node(t, i)))) {  /* a non-nil value? */
     if (!ttisnil(val(node(t, i)))) {  /* a non-nil value? */
-      setobj(key, key(node(t, i)));
-      setobj(key+1, val(node(t, i)));
+      setobj2s(key, key(node(t, i)));
+      setobj2s(key+1, val(node(t, i)));
       return 1;
       return 1;
     }
     }
   }
   }
@@ -270,7 +270,7 @@ static void resize (lua_State *L, Table *t, int nasize, int nhsize) {
     /* re-insert elements from vanishing slice */
     /* re-insert elements from vanishing slice */
     for (i=nasize; i<oldasize; i++) {
     for (i=nasize; i<oldasize; i++) {
       if (!ttisnil(&t->array[i]))
       if (!ttisnil(&t->array[i]))
-        setobj(luaH_setnum(L, t, i+1), &t->array[i]);
+        setobjt2t(luaH_setnum(L, t, i+1), &t->array[i]);
     }
     }
     /* shrink array */
     /* shrink array */
     luaM_reallocvector(L, t->array, oldasize, nasize, TObject);
     luaM_reallocvector(L, t->array, oldasize, nasize, TObject);
@@ -279,7 +279,7 @@ static void resize (lua_State *L, Table *t, int nasize, int nhsize) {
   for (i = twoto(oldhsize) - 1; i >= 0; i--) {
   for (i = twoto(oldhsize) - 1; i >= 0; i--) {
     Node *old = nold+i;
     Node *old = nold+i;
     if (!ttisnil(val(old)))
     if (!ttisnil(val(old)))
-      setobj(luaH_set(L, t, key(old)), val(old));
+      setobjt2t(luaH_set(L, t, key(old)), val(old));
   }
   }
   if (oldhsize)
   if (oldhsize)
     luaM_freearray(L, nold, twoto(oldhsize), Node);  /* free old array */
     luaM_freearray(L, nold, twoto(oldhsize), Node);  /* free old array */
@@ -373,7 +373,7 @@ static TObject *newkey (lua_State *L, Table *t, const TObject *key) {
       mp = n;
       mp = n;
     }
     }
   }
   }
-  setobj(key(mp), key);
+  setobj2t(key(mp), key);
   lua_assert(ttisnil(val(mp)));
   lua_assert(ttisnil(val(mp)));
   for (;;) {  /* correct `firstfree' */
   for (;;) {  /* correct `firstfree' */
     if (ttisnil(key(t->firstfree)))
     if (ttisnil(key(t->firstfree)))

+ 2 - 2
ltests.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: ltests.c,v 1.138 2002/10/25 20:05:28 roberto Exp roberto $
+** $Id: ltests.c,v 1.139 2002/10/25 21:29:20 roberto Exp roberto $
 ** Internal Module for Debugging of the Lua Implementation
 ** Internal Module for Debugging of the Lua Implementation
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -326,7 +326,7 @@ static int string_query (lua_State *L) {
     GCObject *ts;
     GCObject *ts;
     int n = 0;
     int n = 0;
     for (ts = tb->hash[s]; ts; ts = ts->gch.next) {
     for (ts = tb->hash[s]; ts; ts = ts->gch.next) {
-      setsvalue(L->top, &ts->ts);
+      setsvalue2s(L->top, &ts->ts);
       incr_top(L);
       incr_top(L);
       n++;
       n++;
     }
     }

+ 34 - 34
lvm.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lvm.c,v 1.258 2002/10/25 20:05:28 roberto Exp roberto $
+** $Id: lvm.c,v 1.259 2002/11/06 19:08:00 roberto Exp roberto $
 ** Lua virtual machine
 ** Lua virtual machine
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -98,9 +98,9 @@ static void traceexec (lua_State *L) {
 
 
 static void callTMres (lua_State *L, const TObject *f,
 static void callTMres (lua_State *L, const TObject *f,
                        const TObject *p1, const TObject *p2) {
                        const TObject *p1, const TObject *p2) {
-  setobj(L->top, f);  /* push function */
-  setobj(L->top+1, p1);  /* 1st argument */
-  setobj(L->top+2, p2);  /* 2nd argument */
+  setobj2s(L->top, f);  /* push function */
+  setobj2s(L->top+1, p1);  /* 1st argument */
+  setobj2s(L->top+2, p2);  /* 2nd argument */
   luaD_checkstack(L, 3);  /* cannot check before (could invalidate p1, p2) */
   luaD_checkstack(L, 3);  /* cannot check before (could invalidate p1, p2) */
   L->top += 3;
   L->top += 3;
   luaD_call(L, L->top - 3, 1);
   luaD_call(L, L->top - 3, 1);
@@ -111,10 +111,10 @@ static void callTMres (lua_State *L, const TObject *f,
 
 
 static void callTM (lua_State *L, const TObject *f,
 static void callTM (lua_State *L, const TObject *f,
                     const TObject *p1, const TObject *p2, const TObject *p3) {
                     const TObject *p1, const TObject *p2, const TObject *p3) {
-  setobj(L->top, f);  /* push function */
-  setobj(L->top+1, p1);  /* 1st argument */
-  setobj(L->top+2, p2);  /* 2nd argument */
-  setobj(L->top+3, p3);  /* 3th argument */
+  setobj2s(L->top, f);  /* push function */
+  setobj2s(L->top+1, p1);  /* 1st argument */
+  setobj2s(L->top+2, p2);  /* 2nd argument */
+  setobj2s(L->top+3, p3);  /* 3th argument */
   luaD_checkstack(L, 4);  /* cannot check before (could invalidate p1...p3) */
   luaD_checkstack(L, 4);  /* cannot check before (could invalidate p1...p3) */
   L->top += 4;
   L->top += 4;
   luaD_call(L, L->top - 4, 0);
   luaD_call(L, L->top - 4, 0);
@@ -176,7 +176,7 @@ void luaV_settable (lua_State *L, const TObject *t, TObject *key, StkId val) {
       TObject *oldval = luaH_set(L, h, key); /* do a primitive set */
       TObject *oldval = luaH_set(L, h, key); /* do a primitive set */
       if (!ttisnil(oldval) ||  /* result is no nil? */
       if (!ttisnil(oldval) ||  /* result is no nil? */
           (tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL) { /* or no TM? */
           (tm = fasttm(L, h->metatable, TM_NEWINDEX)) == NULL) { /* or no TM? */
-        setobj(oldval, val);
+        setobj2t(oldval, val);
         return;
         return;
       }
       }
       /* else will try the tag method */
       /* else will try the tag method */
@@ -194,7 +194,7 @@ 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 TObject *p1, const TObject *p2,
-                       TObject *res, TMS event) {
+                       StkId res, TMS event) {
   ptrdiff_t result = savestack(L, res);
   ptrdiff_t result = savestack(L, res);
   const TObject *tm = luaT_gettmbyobj(L, p1, event);  /* try first operand */
   const TObject *tm = luaT_gettmbyobj(L, p1, event);  /* try first operand */
   if (ttisnil(tm))
   if (ttisnil(tm))
@@ -202,7 +202,7 @@ static int call_binTM (lua_State *L, const TObject *p1, const TObject *p2,
   if (!ttisfunction(tm)) return 0;
   if (!ttisfunction(tm)) return 0;
   callTMres(L, tm, p1, p2);
   callTMres(L, tm, p1, p2);
   res = restorestack(L, result);  /* previous call may change stack */
   res = restorestack(L, result);  /* previous call may change stack */
-  setobj(res, L->top);
+  setobjs2s(res, L->top);
   return 1;
   return 1;
 }
 }
 
 
@@ -311,7 +311,7 @@ void luaV_concat (lua_State *L, int total, int last) {
         memcpy(buffer+tl, svalue(top-i), l);
         memcpy(buffer+tl, svalue(top-i), l);
         tl += l;
         tl += l;
       }
       }
-      setsvalue(top-n, luaS_newlstr(L, buffer, tl));
+      setsvalue2s(top-n, luaS_newlstr(L, buffer, tl));
     }
     }
     total -= n-1;  /* got `n' strings to create 1 new */
     total -= n-1;  /* got `n' strings to create 1 new */
     last -= n-1;
     last -= n-1;
@@ -338,7 +338,7 @@ static void Arith (lua_State *L, StkId ra,
           luaG_runerror(L, "`pow' (for `^' operator) is not a function");
           luaG_runerror(L, "`pow' (for `^' operator) is not a function");
         callTMres(L, f, b, c);
         callTMres(L, f, b, c);
         ra = restorestack(L, res);  /* previous call may change stack */
         ra = restorestack(L, res);  /* previous call may change stack */
-        setobj(ra, L->top);
+        setobjs2s(ra, L->top);
         break;
         break;
       }
       }
       default: lua_assert(0); break;
       default: lua_assert(0); break;
@@ -399,11 +399,11 @@ StkId luaV_execute (lua_State *L) {
          GET_OPCODE(i) == OP_RETURN || GET_OPCODE(i) == OP_SETLISTO);
          GET_OPCODE(i) == OP_RETURN || GET_OPCODE(i) == OP_SETLISTO);
     switch (GET_OPCODE(i)) {
     switch (GET_OPCODE(i)) {
       case OP_MOVE: {
       case OP_MOVE: {
-        setobj(ra, RB(i));
+        setobjs2s(ra, RB(i));
         break;
         break;
       }
       }
       case OP_LOADK: {
       case OP_LOADK: {
-        setobj(ra, KBx(i));
+        setobj2s(ra, KBx(i));
         break;
         break;
       }
       }
       case OP_LOADBOOL: {
       case OP_LOADBOOL: {
@@ -420,7 +420,7 @@ StkId luaV_execute (lua_State *L) {
       }
       }
       case OP_GETUPVAL: {
       case OP_GETUPVAL: {
         int b = GETARG_B(i);
         int b = GETARG_B(i);
-        setobj(ra, cl->upvals[b]->v);
+        setobj2s(ra, cl->upvals[b]->v);
         break;
         break;
       }
       }
       case OP_GETGLOBAL: {
       case OP_GETGLOBAL: {
@@ -428,9 +428,9 @@ StkId luaV_execute (lua_State *L) {
         const TObject *v;
         const TObject *v;
         lua_assert(ttisstring(rb) && ttistable(&cl->g));
         lua_assert(ttisstring(rb) && ttistable(&cl->g));
         v = luaH_getstr(hvalue(&cl->g), tsvalue(rb));
         v = luaH_getstr(hvalue(&cl->g), tsvalue(rb));
-        if (!ttisnil(v)) { setobj(ra, v); }
+        if (!ttisnil(v)) { setobj2s(ra, v); }
         else
         else
-          setobj(RA(i), luaV_index(L, &cl->g, rb, 0));
+          setobj2s(RA(i), luaV_index(L, &cl->g, rb, 0));
         break;
         break;
       }
       }
       case OP_GETTABLE: {
       case OP_GETTABLE: {
@@ -438,12 +438,12 @@ StkId luaV_execute (lua_State *L) {
         TObject *rc = RKC(i);
         TObject *rc = RKC(i);
         if (ttistable(rb)) {
         if (ttistable(rb)) {
           const TObject *v = luaH_get(hvalue(rb), rc);
           const TObject *v = luaH_get(hvalue(rb), rc);
-          if (!ttisnil(v)) { setobj(ra, v); }
+          if (!ttisnil(v)) { setobj2s(ra, v); }
           else
           else
-            setobj(RA(i), luaV_index(L, rb, rc, 0));
+            setobj2s(RA(i), luaV_index(L, rb, rc, 0));
         }
         }
         else
         else
-          setobj(RA(i), luaV_getnotable(L, rb, rc, 0));
+          setobj2s(RA(i), luaV_getnotable(L, rb, rc, 0));
         break;
         break;
       }
       }
       case OP_SETGLOBAL: {
       case OP_SETGLOBAL: {
@@ -471,15 +471,15 @@ StkId luaV_execute (lua_State *L) {
         StkId rb = RB(i);
         StkId rb = RB(i);
         TObject *rc = RKC(i);
         TObject *rc = RKC(i);
         runtime_check(L, ttisstring(rc));
         runtime_check(L, ttisstring(rc));
-        setobj(ra+1, rb);
+        setobjs2s(ra+1, rb);
         if (ttistable(rb)) {
         if (ttistable(rb)) {
           const TObject *v = luaH_getstr(hvalue(rb), tsvalue(rc));
           const TObject *v = luaH_getstr(hvalue(rb), tsvalue(rc));
-          if (!ttisnil(v)) { setobj(ra, v); }
+          if (!ttisnil(v)) { setobj2s(ra, v); }
           else
           else
-            setobj(RA(i), luaV_index(L, rb, rc, 0));
+            setobj2s(RA(i), luaV_index(L, rb, rc, 0));
         }
         }
         else
         else
-          setobj(RA(i), luaV_getnotable(L, rb, rc, 0));
+          setobj2s(RA(i), luaV_getnotable(L, rb, rc, 0));
         break;
         break;
       }
       }
       case OP_ADD: {
       case OP_ADD: {
@@ -548,7 +548,7 @@ StkId luaV_execute (lua_State *L) {
         int b = GETARG_B(i);
         int b = GETARG_B(i);
         int c = GETARG_C(i);
         int c = GETARG_C(i);
         luaV_concat(L, c-b+1, c);  /* may change `base' (and `ra') */
         luaV_concat(L, c-b+1, c);  /* may change `base' (and `ra') */
-        setobj(RA(i), base+b);
+        setobjs2s(RA(i), base+b);
         luaV_checkGC(L, base+c+1);
         luaV_checkGC(L, base+c+1);
         break;
         break;
       }
       }
@@ -575,7 +575,7 @@ StkId luaV_execute (lua_State *L) {
         TObject *rb = RB(i);
         TObject *rb = RB(i);
         if (l_isfalse(rb) == GETARG_C(i)) pc++;
         if (l_isfalse(rb) == GETARG_C(i)) pc++;
         else {
         else {
-          setobj(ra, rb);
+          setobjs2s(ra, rb);
           dojump(pc, GETARG_sBx(*pc) + 1);
           dojump(pc, GETARG_sBx(*pc) + 1);
         }
         }
         break;
         break;
@@ -609,7 +609,7 @@ StkId luaV_execute (lua_State *L) {
             StkId ra1 = RA(i);  /* `luaD_precall' may change the stack */
             StkId ra1 = RA(i);  /* `luaD_precall' may change the stack */
             if (L->openupval) luaF_close(L, base);
             if (L->openupval) luaF_close(L, base);
             for (aux = 0; ra1+aux < L->top; aux++)  /* move frame down */
             for (aux = 0; ra1+aux < L->top; aux++)  /* move frame down */
-              setobj(base+aux-1, ra1+aux);
+              setobjs2s(base+aux-1, ra1+aux);
             (L->ci - 1)->top = L->top = base+aux;  /* correct top */
             (L->ci - 1)->top = L->top = base+aux;  /* correct top */
             lua_assert(L->ci->state & CI_SAVEDPC);
             lua_assert(L->ci->state & CI_SAVEDPC);
             (L->ci - 1)->u.l.savedpc = L->ci->u.l.savedpc;
             (L->ci - 1)->u.l.savedpc = L->ci->u.l.savedpc;
@@ -662,9 +662,9 @@ StkId luaV_execute (lua_State *L) {
         break;
         break;
       }
       }
       case OP_TFORLOOP: {
       case OP_TFORLOOP: {
-        setobj(ra+4, ra+2);
-        setobj(ra+3, ra+1);
-        setobj(ra+2, ra);
+        setobjs2s(ra+4, ra+2);
+        setobjs2s(ra+3, ra+1);
+        setobjs2s(ra+2, ra);
         L->top = ra+5;
         L->top = ra+5;
         luaD_call(L, ra+2, GETARG_C(i) + 1);
         luaD_call(L, ra+2, GETARG_C(i) + 1);
         L->top = L->ci->top;
         L->top = L->ci->top;
@@ -674,8 +674,8 @@ StkId luaV_execute (lua_State *L) {
       }
       }
       case OP_TFORPREP: {  /* for compatibility only */
       case OP_TFORPREP: {  /* for compatibility only */
         if (ttistable(ra)) {
         if (ttistable(ra)) {
-          setobj(ra+1, ra);
-          setobj(ra, luaH_getstr(hvalue(gt(L)), luaS_new(L, "next")));
+          setobjs2s(ra+1, ra);
+          setobj2s(ra, luaH_getstr(hvalue(gt(L)), luaS_new(L, "next")));
         }
         }
         dojump(pc, GETARG_sBx(i));
         dojump(pc, GETARG_sBx(i));
         break;
         break;
@@ -696,7 +696,7 @@ StkId luaV_execute (lua_State *L) {
         }
         }
         bc &= ~(LFIELDS_PER_FLUSH-1);  /* bc = bc - bc%FPF */
         bc &= ~(LFIELDS_PER_FLUSH-1);  /* bc = bc - bc%FPF */
         for (; n > 0; n--)
         for (; n > 0; n--)
-          setobj(luaH_setnum(L, h, bc+n), ra+n);
+          setobj2t(luaH_setnum(L, h, bc+n), ra+n);
         break;
         break;
       }
       }
       case OP_CLOSE: {
       case OP_CLOSE: {