diff --git a/lapi.c b/lapi.c index d342fc94..b5bb81af 100644 --- a/lapi.c +++ b/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); diff --git a/lapi.h b/lapi.h index 61f18b88..618448a6 100644 --- a/lapi.h +++ b/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 diff --git a/lcode.c b/lcode.c index af96d4f8..63f48292 100644 --- a/lcode.c +++ b/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); } diff --git a/ldebug.c b/ldebug.c index b4793984..114214d6 100644 --- a/ldebug.c +++ b/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 */ } diff --git a/ldebug.h b/ldebug.h index 03baaaee..b1c9ed2d 100644 --- a/ldebug.h +++ b/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); diff --git a/ldo.c b/ldo.c index 02f8d53f..be24198b 100644 --- a/ldo.c +++ b/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; itop - 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; ibase + 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); } diff --git a/ldo.h b/ldo.h index f3d528be..fc13692c 100644 --- a/ldo.h +++ b/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))) diff --git a/ldump.c b/ldump.c index 4cf55e09..24367891 100644 --- a/ldump.c +++ b/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; ik[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; diff --git a/lfunc.c b/lfunc.c index 77193ad7..af27bf0d 100644 --- a/lfunc.c +++ b/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 *); diff --git a/lfunc.h b/lfunc.h index bb0fa001..c6e35586 100644 --- a/lfunc.h +++ b/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); diff --git a/lgc.c b/lgc.c index 8cb8620f..147593b0 100644 --- a/lgc.c +++ b/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; isizek; i++) { /* mark literal strings */ if (ttisstring(f->k+i)) - stringmark(tsvalue(f->k+i)); + stringmark(rawtsvalue(f->k+i)); } for (i=0; isizeupvalues; 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 */ diff --git a/lgc.h b/lgc.h index ff1e1115..e20f2afb 100644 --- a/lgc.h +++ b/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); diff --git a/llex.c b/llex.c index e4b2d74f..bb83571e 100644 --- a/llex.c +++ b/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; diff --git a/lobject.c b/lobject.c index 28ae45c5..cce60d92 100644 --- a/lobject.c +++ b/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': diff --git a/lobject.h b/lobject.h index b2987429..fa5364c2 100644 --- a/lobject.h +++ b/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)) -/* 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; } - -#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; } - -#define setbvalue(obj,x) \ - { TObject *i_o=(obj); i_o->value.b=(x); i_o->tt=LUA_TBOOLEAN; } - -#define setsvalue(obj,x) \ - { TObject *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); } - -#define setuvalue(obj,x) \ - { TObject *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); } - -#define setthvalue(obj,x) \ - { TObject *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); } - -#define setclvalue(obj,x) \ - { TObject *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); } - -#define sethvalue(obj,x) \ - { TObject *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); } - -#define setptvalue(obj,x) \ - { TObject *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); } - - - /* ** 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))) -#define setobj(obj1,obj2) \ - { const TObject *o2=(obj2); TObject *o1=(obj1); \ - checkconsistency(o2); \ - o1->tt=o2->tt; o1->value = o2->value; } + +/* Macros to set values */ +#define setnilvalue(obj) ((obj)->tt=LUA_TNIL) + +#define setnvalue(obj,x) \ + { 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) \ + { TValue *i_o=(obj); i_o->value.p=(x); i_o->tt=LUA_TLIGHTUSERDATA; } + +#define setbvalue(obj,x) \ + { TValue *i_o=(obj); i_o->value.b=(x); i_o->tt=LUA_TBOOLEAN; } + +#define setsvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TSTRING; \ + checkliveness(L,i_o); } + +#define setuvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TUSERDATA; \ + checkliveness(L,i_o); } + +#define setthvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TTHREAD; \ + checkliveness(L,i_o); } + +#define setclvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TFUNCTION; \ + checkliveness(L,i_o); } + +#define sethvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TTABLE; \ + checkliveness(L,i_o); } + +#define setptvalue(L,obj,x) \ + { TValue *i_o=(obj); \ + i_o->value.gc=cast(GCObject *, (x)); i_o->tt=LUA_TPROTO; \ + checkliveness(L,i_o); } + + + + +#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<

> 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); diff --git a/lparser.c b/lparser.c index bf2b7e08..42fde44c 100644 --- a/lparser.c +++ b/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; diff --git a/lstate.c b/lstate.c index e59f1a18..913b42d4 100644 --- a/lstate.c +++ b/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; } diff --git a/lstate.h b/lstate.h index 4a3ea577..66db36ae 100644 --- a/lstate.h +++ b/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); diff --git a/lstring.c b/lstring.c index 203c4c98..8de7d2b3 100644 --- a/lstring.c +++ b/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; } diff --git a/ltable.c b/ltable.c index b0db3bce..797690b4 100644 --- a/ltable.c +++ b/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; iarray[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; iarray[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); } } diff --git a/ltable.h b/ltable.h index 5a4076bc..e953bb70 100644 --- a/ltable.h +++ b/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 diff --git a/ltests.c b/ltests.c index b342b169..05093162 100644 --- a/ltests.c +++ b/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++; } diff --git a/ltests.h b/ltests.h index 0eb64bcf..2fc73fda 100644 --- a/ltests.h +++ b/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 #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 */ diff --git a/ltm.c b/ltm.c index b8fbb1f9..230fbba6 100644 --- a/ltm.c +++ b/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<metatable; break; case LUA_TUSERDATA: - mt = uvalue(o)->uv.metatable; + mt = uvalue(o)->metatable; break; default: mt = NULL; diff --git a/ltm.h b/ltm.h index d40bf6c5..6ae743f0 100644 --- a/ltm.h +++ b/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[]; diff --git a/lundump.c b/lundump.c index 0777dc0f..10508ed4 100644 --- a/lundump.c +++ b/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; ik[i]); for (i=0; ik[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; ip[i]=NULL; for (i=0; ip[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; } diff --git a/lvm.c b/lvm.c index 29c27f0f..8ebf102a 100644 --- a/lvm.c +++ b/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; diff --git a/lvm.h b/lvm.h index b2d9f8d5..defe611f 100644 --- a/lvm.h +++ b/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); diff --git a/makefile b/makefile index f9ffe3d9..6a9c0d91 100644 --- a/makefile +++ b/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