diff options
| -rw-r--r-- | lapi.c | 22 | ||||
| -rw-r--r-- | lcode.c | 12 | ||||
| -rw-r--r-- | ldebug.c | 2 | ||||
| -rw-r--r-- | ldo.c | 6 | ||||
| -rw-r--r-- | ldump.c | 18 | ||||
| -rw-r--r-- | lfunc.c | 10 | ||||
| -rw-r--r-- | lgc.c | 58 | ||||
| -rw-r--r-- | liolib.c | 4 | ||||
| -rw-r--r-- | lobject.h | 136 | ||||
| -rw-r--r-- | lopcodes.h | 10 | ||||
| -rw-r--r-- | lstate.c | 4 | ||||
| -rw-r--r-- | lstate.h | 14 | ||||
| -rw-r--r-- | lstring.c | 10 | ||||
| -rw-r--r-- | lstring.h | 4 | ||||
| -rw-r--r-- | ltable.c | 46 | ||||
| -rw-r--r-- | ltests.c | 38 | ||||
| -rw-r--r-- | ltests.h | 2 | ||||
| -rw-r--r-- | ltm.c | 2 | ||||
| -rw-r--r-- | ltm.h | 2 | ||||
| -rw-r--r-- | lua.h | 4 | ||||
| -rw-r--r-- | lundump.c | 14 | ||||
| -rw-r--r-- | lvm.c | 24 |
22 files changed, 230 insertions, 212 deletions
| @@ -262,7 +262,7 @@ LUA_API int lua_type (lua_State *L, int idx) { | |||
| 262 | 262 | ||
| 263 | LUA_API const char *lua_typename (lua_State *L, int t) { | 263 | LUA_API const char *lua_typename (lua_State *L, int t) { |
| 264 | UNUSED(L); | 264 | UNUSED(L); |
| 265 | api_check(L, LUA_TNONE <= t && t < LUA_NUMTAGS, "invalid tag"); | 265 | api_check(L, LUA_TNONE <= t && t < LUA_NUMTYPES, "invalid type"); |
| 266 | return ttypename(t); | 266 | return ttypename(t); |
| 267 | } | 267 | } |
| 268 | 268 | ||
| @@ -397,10 +397,10 @@ LUA_API const char *lua_tolstring (lua_State *L, int idx, size_t *len) { | |||
| 397 | LUA_API lua_Unsigned lua_rawlen (lua_State *L, int idx) { | 397 | LUA_API lua_Unsigned lua_rawlen (lua_State *L, int idx) { |
| 398 | const TValue *o = index2value(L, idx); | 398 | const TValue *o = index2value(L, idx); |
| 399 | switch (ttypetag(o)) { | 399 | switch (ttypetag(o)) { |
| 400 | case LUA_TSHRSTR: return tsvalue(o)->shrlen; | 400 | case LUA_VSHRSTR: return tsvalue(o)->shrlen; |
| 401 | case LUA_TLNGSTR: return tsvalue(o)->u.lnglen; | 401 | case LUA_VLNGSTR: return tsvalue(o)->u.lnglen; |
| 402 | case LUA_TUSERDATA: return uvalue(o)->len; | 402 | case LUA_VUSERDATA: return uvalue(o)->len; |
| 403 | case LUA_TTABLE: return luaH_getn(hvalue(o)); | 403 | case LUA_VTABLE: return luaH_getn(hvalue(o)); |
| 404 | default: return 0; | 404 | default: return 0; |
| 405 | } | 405 | } |
| 406 | } | 406 | } |
| @@ -446,8 +446,8 @@ LUA_API lua_State *lua_tothread (lua_State *L, int idx) { | |||
| 446 | LUA_API const void *lua_topointer (lua_State *L, int idx) { | 446 | LUA_API const void *lua_topointer (lua_State *L, int idx) { |
| 447 | const TValue *o = index2value(L, idx); | 447 | const TValue *o = index2value(L, idx); |
| 448 | switch (ttypetag(o)) { | 448 | switch (ttypetag(o)) { |
| 449 | case LUA_TLCF: return cast_voidp(cast_sizet(fvalue(o))); | 449 | case LUA_VLCF: return cast_voidp(cast_sizet(fvalue(o))); |
| 450 | case LUA_TUSERDATA: case LUA_TLIGHTUSERDATA: | 450 | case LUA_VUSERDATA: case LUA_VLIGHTUSERDATA: |
| 451 | return touserdata(o); | 451 | return touserdata(o); |
| 452 | default: { | 452 | default: { |
| 453 | if (iscollectable(o)) | 453 | if (iscollectable(o)) |
| @@ -1312,7 +1312,7 @@ LUA_API void *lua_newuserdatauv (lua_State *L, size_t size, int nuvalue) { | |||
| 1312 | static const char *aux_upvalue (TValue *fi, int n, TValue **val, | 1312 | static const char *aux_upvalue (TValue *fi, int n, TValue **val, |
| 1313 | GCObject **owner) { | 1313 | GCObject **owner) { |
| 1314 | switch (ttypetag(fi)) { | 1314 | switch (ttypetag(fi)) { |
| 1315 | case LUA_TCCL: { /* C closure */ | 1315 | case LUA_VCCL: { /* C closure */ |
| 1316 | CClosure *f = clCvalue(fi); | 1316 | CClosure *f = clCvalue(fi); |
| 1317 | if (!(cast_uint(n) - 1u < cast_uint(f->nupvalues))) | 1317 | if (!(cast_uint(n) - 1u < cast_uint(f->nupvalues))) |
| 1318 | return NULL; /* 'n' not in [1, f->nupvalues] */ | 1318 | return NULL; /* 'n' not in [1, f->nupvalues] */ |
| @@ -1320,7 +1320,7 @@ static const char *aux_upvalue (TValue *fi, int n, TValue **val, | |||
| 1320 | if (owner) *owner = obj2gco(f); | 1320 | if (owner) *owner = obj2gco(f); |
| 1321 | return ""; | 1321 | return ""; |
| 1322 | } | 1322 | } |
| 1323 | case LUA_TLCL: { /* Lua closure */ | 1323 | case LUA_VLCL: { /* Lua closure */ |
| 1324 | LClosure *f = clLvalue(fi); | 1324 | LClosure *f = clLvalue(fi); |
| 1325 | TString *name; | 1325 | TString *name; |
| 1326 | Proto *p = f->p; | 1326 | Proto *p = f->p; |
| @@ -1383,10 +1383,10 @@ static UpVal **getupvalref (lua_State *L, int fidx, int n, LClosure **pf) { | |||
| 1383 | LUA_API void *lua_upvalueid (lua_State *L, int fidx, int n) { | 1383 | LUA_API void *lua_upvalueid (lua_State *L, int fidx, int n) { |
| 1384 | TValue *fi = index2value(L, fidx); | 1384 | TValue *fi = index2value(L, fidx); |
| 1385 | switch (ttypetag(fi)) { | 1385 | switch (ttypetag(fi)) { |
| 1386 | case LUA_TLCL: { /* lua closure */ | 1386 | case LUA_VLCL: { /* lua closure */ |
| 1387 | return *getupvalref(L, fidx, n, NULL); | 1387 | return *getupvalref(L, fidx, n, NULL); |
| 1388 | } | 1388 | } |
| 1389 | case LUA_TCCL: { /* C closure */ | 1389 | case LUA_VCCL: { /* C closure */ |
| 1390 | CClosure *f = clCvalue(fi); | 1390 | CClosure *f = clCvalue(fi); |
| 1391 | api_check(L, 1 <= n && n <= f->nupvalues, "invalid upvalue index"); | 1391 | api_check(L, 1 <= n && n <= f->nupvalues, "invalid upvalue index"); |
| 1392 | return &f->upvalue[n - 1]; | 1392 | return &f->upvalue[n - 1]; |
| @@ -678,22 +678,22 @@ static void luaK_float (FuncState *fs, int reg, lua_Number f) { | |||
| 678 | */ | 678 | */ |
| 679 | static void const2exp (TValue *v, expdesc *e) { | 679 | static void const2exp (TValue *v, expdesc *e) { |
| 680 | switch (ttypetag(v)) { | 680 | switch (ttypetag(v)) { |
| 681 | case LUA_TNUMINT: | 681 | case LUA_VNUMINT: |
| 682 | e->k = VKINT; e->u.ival = ivalue(v); | 682 | e->k = VKINT; e->u.ival = ivalue(v); |
| 683 | break; | 683 | break; |
| 684 | case LUA_TNUMFLT: | 684 | case LUA_VNUMFLT: |
| 685 | e->k = VKFLT; e->u.nval = fltvalue(v); | 685 | e->k = VKFLT; e->u.nval = fltvalue(v); |
| 686 | break; | 686 | break; |
| 687 | case LUA_TFALSE: | 687 | case LUA_VFALSE: |
| 688 | e->k = VFALSE; | 688 | e->k = VFALSE; |
| 689 | break; | 689 | break; |
| 690 | case LUA_TTRUE: | 690 | case LUA_VTRUE: |
| 691 | e->k = VTRUE; | 691 | e->k = VTRUE; |
| 692 | break; | 692 | break; |
| 693 | case LUA_TNIL: | 693 | case LUA_VNIL: |
| 694 | e->k = VNIL; | 694 | e->k = VNIL; |
| 695 | break; | 695 | break; |
| 696 | case LUA_TSHRSTR: case LUA_TLNGSTR: | 696 | case LUA_VSHRSTR: case LUA_VLNGSTR: |
| 697 | e->k = VKSTR; e->u.strval = tsvalue(v); | 697 | e->k = VKSTR; e->u.strval = tsvalue(v); |
| 698 | break; | 698 | break; |
| 699 | default: lua_assert(0); | 699 | default: lua_assert(0); |
| @@ -31,7 +31,7 @@ | |||
| 31 | 31 | ||
| 32 | 32 | ||
| 33 | 33 | ||
| 34 | #define noLuaClosure(f) ((f) == NULL || (f)->c.tt == LUA_TCCL) | 34 | #define noLuaClosure(f) ((f) == NULL || (f)->c.tt == LUA_VCCL) |
| 35 | 35 | ||
| 36 | 36 | ||
| 37 | /* Active Lua function (given call info) */ | 37 | /* Active Lua function (given call info) */ |
| @@ -459,10 +459,10 @@ void luaD_call (lua_State *L, StkId func, int nresults) { | |||
| 459 | lua_CFunction f; | 459 | lua_CFunction f; |
| 460 | retry: | 460 | retry: |
| 461 | switch (ttypetag(s2v(func))) { | 461 | switch (ttypetag(s2v(func))) { |
| 462 | case LUA_TCCL: /* C closure */ | 462 | case LUA_VCCL: /* C closure */ |
| 463 | f = clCvalue(s2v(func))->f; | 463 | f = clCvalue(s2v(func))->f; |
| 464 | goto Cfunc; | 464 | goto Cfunc; |
| 465 | case LUA_TLCF: /* light C function */ | 465 | case LUA_VLCF: /* light C function */ |
| 466 | f = fvalue(s2v(func)); | 466 | f = fvalue(s2v(func)); |
| 467 | Cfunc: { | 467 | Cfunc: { |
| 468 | int n; /* number of returns */ | 468 | int n; /* number of returns */ |
| @@ -485,7 +485,7 @@ void luaD_call (lua_State *L, StkId func, int nresults) { | |||
| 485 | luaD_poscall(L, ci, n); | 485 | luaD_poscall(L, ci, n); |
| 486 | break; | 486 | break; |
| 487 | } | 487 | } |
| 488 | case LUA_TLCL: { /* Lua function */ | 488 | case LUA_VLCL: { /* Lua function */ |
| 489 | CallInfo *ci; | 489 | CallInfo *ci; |
| 490 | Proto *p = clLvalue(s2v(func))->p; | 490 | Proto *p = clLvalue(s2v(func))->p; |
| 491 | int narg = cast_int(L->top - func) - 1; /* number of real arguments */ | 491 | int narg = cast_int(L->top - func) - 1; /* number of real arguments */ |
| @@ -111,21 +111,21 @@ static void DumpConstants (const Proto *f, DumpState *D) { | |||
| 111 | DumpInt(n, D); | 111 | DumpInt(n, D); |
| 112 | for (i = 0; i < n; i++) { | 112 | for (i = 0; i < n; i++) { |
| 113 | const TValue *o = &f->k[i]; | 113 | const TValue *o = &f->k[i]; |
| 114 | DumpByte(ttypetag(o), D); | 114 | int tt = ttypetag(o); |
| 115 | switch (ttypetag(o)) { | 115 | DumpByte(tt, D); |
| 116 | case LUA_TNIL: case LUA_TFALSE: case LUA_TTRUE: | 116 | switch (tt) { |
| 117 | break; | 117 | case LUA_VNUMFLT: |
| 118 | case LUA_TNUMFLT: | ||
| 119 | DumpNumber(fltvalue(o), D); | 118 | DumpNumber(fltvalue(o), D); |
| 120 | break; | 119 | break; |
| 121 | case LUA_TNUMINT: | 120 | case LUA_VNUMINT: |
| 122 | DumpInteger(ivalue(o), D); | 121 | DumpInteger(ivalue(o), D); |
| 123 | break; | 122 | break; |
| 124 | case LUA_TSHRSTR: | 123 | case LUA_VSHRSTR: |
| 125 | case LUA_TLNGSTR: | 124 | case LUA_VLNGSTR: |
| 126 | DumpString(tsvalue(o), D); | 125 | DumpString(tsvalue(o), D); |
| 127 | break; | 126 | break; |
| 128 | default: lua_assert(0); | 127 | default: |
| 128 | lua_assert(tt == LUA_VNIL || tt == LUA_VFALSE || tt == LUA_VTRUE); | ||
| 129 | } | 129 | } |
| 130 | } | 130 | } |
| 131 | } | 131 | } |
| @@ -25,7 +25,7 @@ | |||
| 25 | 25 | ||
| 26 | 26 | ||
| 27 | CClosure *luaF_newCclosure (lua_State *L, int nupvals) { | 27 | CClosure *luaF_newCclosure (lua_State *L, int nupvals) { |
| 28 | GCObject *o = luaC_newobj(L, LUA_TCCL, sizeCclosure(nupvals)); | 28 | GCObject *o = luaC_newobj(L, LUA_VCCL, sizeCclosure(nupvals)); |
| 29 | CClosure *c = gco2ccl(o); | 29 | CClosure *c = gco2ccl(o); |
| 30 | c->nupvalues = cast_byte(nupvals); | 30 | c->nupvalues = cast_byte(nupvals); |
| 31 | return c; | 31 | return c; |
| @@ -33,7 +33,7 @@ CClosure *luaF_newCclosure (lua_State *L, int nupvals) { | |||
| 33 | 33 | ||
| 34 | 34 | ||
| 35 | LClosure *luaF_newLclosure (lua_State *L, int nupvals) { | 35 | LClosure *luaF_newLclosure (lua_State *L, int nupvals) { |
| 36 | GCObject *o = luaC_newobj(L, LUA_TLCL, sizeLclosure(nupvals)); | 36 | GCObject *o = luaC_newobj(L, LUA_VLCL, sizeLclosure(nupvals)); |
| 37 | LClosure *c = gco2lcl(o); | 37 | LClosure *c = gco2lcl(o); |
| 38 | c->p = NULL; | 38 | c->p = NULL; |
| 39 | c->nupvalues = cast_byte(nupvals); | 39 | c->nupvalues = cast_byte(nupvals); |
| @@ -48,7 +48,7 @@ LClosure *luaF_newLclosure (lua_State *L, int nupvals) { | |||
| 48 | void luaF_initupvals (lua_State *L, LClosure *cl) { | 48 | void luaF_initupvals (lua_State *L, LClosure *cl) { |
| 49 | int i; | 49 | int i; |
| 50 | for (i = 0; i < cl->nupvalues; i++) { | 50 | for (i = 0; i < cl->nupvalues; i++) { |
| 51 | GCObject *o = luaC_newobj(L, LUA_TUPVAL, sizeof(UpVal)); | 51 | GCObject *o = luaC_newobj(L, LUA_VUPVAL, sizeof(UpVal)); |
| 52 | UpVal *uv = gco2upv(o); | 52 | UpVal *uv = gco2upv(o); |
| 53 | uv->v = &uv->u.value; /* make it closed */ | 53 | uv->v = &uv->u.value; /* make it closed */ |
| 54 | setnilvalue(uv->v); | 54 | setnilvalue(uv->v); |
| @@ -63,7 +63,7 @@ void luaF_initupvals (lua_State *L, LClosure *cl) { | |||
| 63 | ** open upvalues of 'L' after entry 'prev'. | 63 | ** open upvalues of 'L' after entry 'prev'. |
| 64 | **/ | 64 | **/ |
| 65 | static UpVal *newupval (lua_State *L, int tbc, StkId level, UpVal **prev) { | 65 | static UpVal *newupval (lua_State *L, int tbc, StkId level, UpVal **prev) { |
| 66 | GCObject *o = luaC_newobj(L, LUA_TUPVAL, sizeof(UpVal)); | 66 | GCObject *o = luaC_newobj(L, LUA_VUPVAL, sizeof(UpVal)); |
| 67 | UpVal *uv = gco2upv(o); | 67 | UpVal *uv = gco2upv(o); |
| 68 | UpVal *next = *prev; | 68 | UpVal *next = *prev; |
| 69 | uv->v = s2v(level); /* current value lives in the stack */ | 69 | uv->v = s2v(level); /* current value lives in the stack */ |
| @@ -243,7 +243,7 @@ int luaF_close (lua_State *L, StkId level, int status) { | |||
| 243 | 243 | ||
| 244 | 244 | ||
| 245 | Proto *luaF_newproto (lua_State *L) { | 245 | Proto *luaF_newproto (lua_State *L) { |
| 246 | GCObject *o = luaC_newobj(L, LUA_TPROTO, sizeof(Proto)); | 246 | GCObject *o = luaC_newobj(L, LUA_VPROTO, sizeof(Proto)); |
| 247 | Proto *f = gco2p(o); | 247 | Proto *f = gco2p(o); |
| 248 | f->k = NULL; | 248 | f->k = NULL; |
| 249 | f->sizek = 0; | 249 | f->sizek = 0; |
| @@ -119,12 +119,12 @@ static void entersweep (lua_State *L); | |||
| 119 | 119 | ||
| 120 | static GCObject **getgclist (GCObject *o) { | 120 | static GCObject **getgclist (GCObject *o) { |
| 121 | switch (o->tt) { | 121 | switch (o->tt) { |
| 122 | case LUA_TTABLE: return &gco2t(o)->gclist; | 122 | case LUA_VTABLE: return &gco2t(o)->gclist; |
| 123 | case LUA_TLCL: return &gco2lcl(o)->gclist; | 123 | case LUA_VLCL: return &gco2lcl(o)->gclist; |
| 124 | case LUA_TCCL: return &gco2ccl(o)->gclist; | 124 | case LUA_VCCL: return &gco2ccl(o)->gclist; |
| 125 | case LUA_TTHREAD: return &gco2th(o)->gclist; | 125 | case LUA_VTHREAD: return &gco2th(o)->gclist; |
| 126 | case LUA_TPROTO: return &gco2p(o)->gclist; | 126 | case LUA_VPROTO: return &gco2p(o)->gclist; |
| 127 | case LUA_TUSERDATA: { | 127 | case LUA_VUSERDATA: { |
| 128 | Udata *u = gco2u(o); | 128 | Udata *u = gco2u(o); |
| 129 | lua_assert(u->nuvalue > 0); | 129 | lua_assert(u->nuvalue > 0); |
| 130 | return &u->gclist; | 130 | return &u->gclist; |
| @@ -268,19 +268,19 @@ GCObject *luaC_newobj (lua_State *L, int tt, size_t sz) { | |||
| 268 | static void reallymarkobject (global_State *g, GCObject *o) { | 268 | static void reallymarkobject (global_State *g, GCObject *o) { |
| 269 | white2gray(o); | 269 | white2gray(o); |
| 270 | switch (o->tt) { | 270 | switch (o->tt) { |
| 271 | case LUA_TSHRSTR: | 271 | case LUA_VSHRSTR: |
| 272 | case LUA_TLNGSTR: { | 272 | case LUA_VLNGSTR: { |
| 273 | gray2black(o); | 273 | gray2black(o); |
| 274 | break; | 274 | break; |
| 275 | } | 275 | } |
| 276 | case LUA_TUPVAL: { | 276 | case LUA_VUPVAL: { |
| 277 | UpVal *uv = gco2upv(o); | 277 | UpVal *uv = gco2upv(o); |
| 278 | if (!upisopen(uv)) /* open upvalues are kept gray */ | 278 | if (!upisopen(uv)) /* open upvalues are kept gray */ |
| 279 | gray2black(o); | 279 | gray2black(o); |
| 280 | markvalue(g, uv->v); /* mark its content */ | 280 | markvalue(g, uv->v); /* mark its content */ |
| 281 | break; | 281 | break; |
| 282 | } | 282 | } |
| 283 | case LUA_TUSERDATA: { | 283 | case LUA_VUSERDATA: { |
| 284 | Udata *u = gco2u(o); | 284 | Udata *u = gco2u(o); |
| 285 | if (u->nuvalue == 0) { /* no user values? */ | 285 | if (u->nuvalue == 0) { /* no user values? */ |
| 286 | markobjectN(g, u->metatable); /* mark its metatable */ | 286 | markobjectN(g, u->metatable); /* mark its metatable */ |
| @@ -289,8 +289,8 @@ static void reallymarkobject (global_State *g, GCObject *o) { | |||
| 289 | } | 289 | } |
| 290 | /* else... */ | 290 | /* else... */ |
| 291 | } /* FALLTHROUGH */ | 291 | } /* FALLTHROUGH */ |
| 292 | case LUA_TLCL: case LUA_TCCL: case LUA_TTABLE: | 292 | case LUA_VLCL: case LUA_VCCL: case LUA_VTABLE: |
| 293 | case LUA_TTHREAD: case LUA_TPROTO: { | 293 | case LUA_VTHREAD: case LUA_VPROTO: { |
| 294 | linkobjgclist(o, g->gray); | 294 | linkobjgclist(o, g->gray); |
| 295 | break; | 295 | break; |
| 296 | } | 296 | } |
| @@ -598,12 +598,12 @@ static lu_mem propagatemark (global_State *g) { | |||
| 598 | gray2black(o); | 598 | gray2black(o); |
| 599 | g->gray = *getgclist(o); /* remove from 'gray' list */ | 599 | g->gray = *getgclist(o); /* remove from 'gray' list */ |
| 600 | switch (o->tt) { | 600 | switch (o->tt) { |
| 601 | case LUA_TTABLE: return traversetable(g, gco2t(o)); | 601 | case LUA_VTABLE: return traversetable(g, gco2t(o)); |
| 602 | case LUA_TUSERDATA: return traverseudata(g, gco2u(o)); | 602 | case LUA_VUSERDATA: return traverseudata(g, gco2u(o)); |
| 603 | case LUA_TLCL: return traverseLclosure(g, gco2lcl(o)); | 603 | case LUA_VLCL: return traverseLclosure(g, gco2lcl(o)); |
| 604 | case LUA_TCCL: return traverseCclosure(g, gco2ccl(o)); | 604 | case LUA_VCCL: return traverseCclosure(g, gco2ccl(o)); |
| 605 | case LUA_TPROTO: return traverseproto(g, gco2p(o)); | 605 | case LUA_VPROTO: return traverseproto(g, gco2p(o)); |
| 606 | case LUA_TTHREAD: { | 606 | case LUA_VTHREAD: { |
| 607 | lua_State *th = gco2th(o); | 607 | lua_State *th = gco2th(o); |
| 608 | linkgclist(th, g->grayagain); /* insert into 'grayagain' list */ | 608 | linkgclist(th, g->grayagain); /* insert into 'grayagain' list */ |
| 609 | black2gray(o); | 609 | black2gray(o); |
| @@ -710,34 +710,34 @@ static void freeupval (lua_State *L, UpVal *uv) { | |||
| 710 | 710 | ||
| 711 | static void freeobj (lua_State *L, GCObject *o) { | 711 | static void freeobj (lua_State *L, GCObject *o) { |
| 712 | switch (o->tt) { | 712 | switch (o->tt) { |
| 713 | case LUA_TPROTO: | 713 | case LUA_VPROTO: |
| 714 | luaF_freeproto(L, gco2p(o)); | 714 | luaF_freeproto(L, gco2p(o)); |
| 715 | break; | 715 | break; |
| 716 | case LUA_TUPVAL: | 716 | case LUA_VUPVAL: |
| 717 | freeupval(L, gco2upv(o)); | 717 | freeupval(L, gco2upv(o)); |
| 718 | break; | 718 | break; |
| 719 | case LUA_TLCL: | 719 | case LUA_VLCL: |
| 720 | luaM_freemem(L, o, sizeLclosure(gco2lcl(o)->nupvalues)); | 720 | luaM_freemem(L, o, sizeLclosure(gco2lcl(o)->nupvalues)); |
| 721 | break; | 721 | break; |
| 722 | case LUA_TCCL: | 722 | case LUA_VCCL: |
| 723 | luaM_freemem(L, o, sizeCclosure(gco2ccl(o)->nupvalues)); | 723 | luaM_freemem(L, o, sizeCclosure(gco2ccl(o)->nupvalues)); |
| 724 | break; | 724 | break; |
| 725 | case LUA_TTABLE: | 725 | case LUA_VTABLE: |
| 726 | luaH_free(L, gco2t(o)); | 726 | luaH_free(L, gco2t(o)); |
| 727 | break; | 727 | break; |
| 728 | case LUA_TTHREAD: | 728 | case LUA_VTHREAD: |
| 729 | luaE_freethread(L, gco2th(o)); | 729 | luaE_freethread(L, gco2th(o)); |
| 730 | break; | 730 | break; |
| 731 | case LUA_TUSERDATA: { | 731 | case LUA_VUSERDATA: { |
| 732 | Udata *u = gco2u(o); | 732 | Udata *u = gco2u(o); |
| 733 | luaM_freemem(L, o, sizeudata(u->nuvalue, u->len)); | 733 | luaM_freemem(L, o, sizeudata(u->nuvalue, u->len)); |
| 734 | break; | 734 | break; |
| 735 | } | 735 | } |
| 736 | case LUA_TSHRSTR: | 736 | case LUA_VSHRSTR: |
| 737 | luaS_remove(L, gco2ts(o)); /* remove it from hash table */ | 737 | luaS_remove(L, gco2ts(o)); /* remove it from hash table */ |
| 738 | luaM_freemem(L, o, sizelstring(gco2ts(o)->shrlen)); | 738 | luaM_freemem(L, o, sizelstring(gco2ts(o)->shrlen)); |
| 739 | break; | 739 | break; |
| 740 | case LUA_TLNGSTR: | 740 | case LUA_VLNGSTR: |
| 741 | luaM_freemem(L, o, sizelstring(gco2ts(o)->u.lnglen)); | 741 | luaM_freemem(L, o, sizelstring(gco2ts(o)->u.lnglen)); |
| 742 | break; | 742 | break; |
| 743 | default: lua_assert(0); | 743 | default: lua_assert(0); |
| @@ -1049,7 +1049,7 @@ static GCObject **correctgraylist (GCObject **p) { | |||
| 1049 | GCObject *curr; | 1049 | GCObject *curr; |
| 1050 | while ((curr = *p) != NULL) { | 1050 | while ((curr = *p) != NULL) { |
| 1051 | switch (curr->tt) { | 1051 | switch (curr->tt) { |
| 1052 | case LUA_TTABLE: case LUA_TUSERDATA: { | 1052 | case LUA_VTABLE: case LUA_VUSERDATA: { |
| 1053 | GCObject **next = getgclist(curr); | 1053 | GCObject **next = getgclist(curr); |
| 1054 | if (getage(curr) == G_TOUCHED1) { /* touched in this cycle? */ | 1054 | if (getage(curr) == G_TOUCHED1) { /* touched in this cycle? */ |
| 1055 | lua_assert(isgray(curr)); | 1055 | lua_assert(isgray(curr)); |
| @@ -1069,7 +1069,7 @@ static GCObject **correctgraylist (GCObject **p) { | |||
| 1069 | } | 1069 | } |
| 1070 | break; | 1070 | break; |
| 1071 | } | 1071 | } |
| 1072 | case LUA_TTHREAD: { | 1072 | case LUA_VTHREAD: { |
| 1073 | lua_State *th = gco2th(curr); | 1073 | lua_State *th = gco2th(curr); |
| 1074 | lua_assert(!isblack(th)); | 1074 | lua_assert(!isblack(th)); |
| 1075 | if (iswhite(th)) /* new object? */ | 1075 | if (iswhite(th)) /* new object? */ |
| @@ -215,7 +215,7 @@ static int f_close (lua_State *L) { | |||
| 215 | 215 | ||
| 216 | static int io_close (lua_State *L) { | 216 | static int io_close (lua_State *L) { |
| 217 | if (lua_isnone(L, 1)) /* no argument? */ | 217 | if (lua_isnone(L, 1)) /* no argument? */ |
| 218 | lua_getfield(L, LUA_REGISTRYINDEX, IO_OUTPUT); /* use standard output */ | 218 | lua_getfield(L, LUA_REGISTRYINDEX, IO_OUTPUT); /* use default output */ |
| 219 | return f_close(L); | 219 | return f_close(L); |
| 220 | } | 220 | } |
| 221 | 221 | ||
| @@ -296,7 +296,7 @@ static FILE *getiofile (lua_State *L, const char *findex) { | |||
| 296 | lua_getfield(L, LUA_REGISTRYINDEX, findex); | 296 | lua_getfield(L, LUA_REGISTRYINDEX, findex); |
| 297 | p = (LStream *)lua_touserdata(L, -1); | 297 | p = (LStream *)lua_touserdata(L, -1); |
| 298 | if (isclosed(p)) | 298 | if (isclosed(p)) |
| 299 | luaL_error(L, "standard %s file is closed", findex + IOPREF_LEN); | 299 | luaL_error(L, "default %s file is closed", findex + IOPREF_LEN); |
| 300 | return p->f; | 300 | return p->f; |
| 301 | } | 301 | } |
| 302 | 302 | ||
| @@ -17,16 +17,16 @@ | |||
| 17 | 17 | ||
| 18 | 18 | ||
| 19 | /* | 19 | /* |
| 20 | ** Extra tags for collectable non-values | 20 | ** Extra types for collectable non-values |
| 21 | */ | 21 | */ |
| 22 | #define LUA_TUPVAL LUA_NUMTAGS /* upvalues */ | 22 | #define LUA_TUPVAL LUA_NUMTYPES /* upvalues */ |
| 23 | #define LUA_TPROTO (LUA_NUMTAGS+1) /* function prototypes */ | 23 | #define LUA_TPROTO (LUA_NUMTYPES+1) /* function prototypes */ |
| 24 | 24 | ||
| 25 | 25 | ||
| 26 | /* | 26 | /* |
| 27 | ** number of all possible tags (including LUA_TNONE) | 27 | ** number of all possible types (including LUA_TNONE) |
| 28 | */ | 28 | */ |
| 29 | #define LUA_TOTALTAGS (LUA_TPROTO + 2) | 29 | #define LUA_TOTALTYPES (LUA_TPROTO + 2) |
| 30 | 30 | ||
| 31 | 31 | ||
| 32 | /* | 32 | /* |
| @@ -154,30 +154,28 @@ typedef StackValue *StkId; | |||
| 154 | ** =================================================================== | 154 | ** =================================================================== |
| 155 | */ | 155 | */ |
| 156 | 156 | ||
| 157 | /* macro to test for (any kind of) nil */ | 157 | /* Standard nil */ |
| 158 | #define ttisnil(v) checktype((v), LUA_TNIL) | 158 | #define LUA_VNIL makevariant(LUA_TNIL, 1) |
| 159 | 159 | ||
| 160 | /* macro to test for a "pure" nil */ | 160 | /* Empty slot (which might be different from a slot containing nil) */ |
| 161 | #define ttisstrictnil(o) checktag((o), LUA_TNIL) | 161 | #define LUA_VEMPTY makevariant(LUA_TNIL, 2) |
| 162 | 162 | ||
| 163 | /* Value returned for a key not found in a table (absent key) */ | ||
| 164 | #define LUA_VABSTKEY makevariant(LUA_TNIL, 3) | ||
| 163 | 165 | ||
| 164 | #define setnilvalue(obj) settt_(obj, LUA_TNIL) | ||
| 165 | 166 | ||
| 167 | /* macro to test for (any kind of) nil */ | ||
| 168 | #define ttisnil(v) checktype((v), LUA_TNIL) | ||
| 166 | 169 | ||
| 167 | /* | ||
| 168 | ** Variant tag, used only in tables to signal an empty slot | ||
| 169 | ** (which might be different from a slot containing nil) | ||
| 170 | */ | ||
| 171 | #define LUA_TEMPTY makevariant(LUA_TNIL, 1) | ||
| 172 | 170 | ||
| 173 | /* | 171 | /* macro to test for a standard nil */ |
| 174 | ** Variant used only in the value returned for a key not found in a | 172 | #define ttisstrictnil(o) checktag((o), LUA_VNIL) |
| 175 | ** table (absent key). | 173 | |
| 176 | */ | 174 | |
| 177 | #define LUA_TABSTKEY makevariant(LUA_TNIL, 2) | 175 | #define setnilvalue(obj) settt_(obj, LUA_VNIL) |
| 178 | 176 | ||
| 179 | 177 | ||
| 180 | #define isabstkey(v) checktag((v), LUA_TABSTKEY) | 178 | #define isabstkey(v) checktag((v), LUA_VABSTKEY) |
| 181 | 179 | ||
| 182 | 180 | ||
| 183 | /* | 181 | /* |
| @@ -195,11 +193,11 @@ typedef StackValue *StkId; | |||
| 195 | 193 | ||
| 196 | 194 | ||
| 197 | /* macro defining a value corresponding to an absent key */ | 195 | /* macro defining a value corresponding to an absent key */ |
| 198 | #define ABSTKEYCONSTANT {NULL}, LUA_TABSTKEY | 196 | #define ABSTKEYCONSTANT {NULL}, LUA_VABSTKEY |
| 199 | 197 | ||
| 200 | 198 | ||
| 201 | /* mark an entry as empty */ | 199 | /* mark an entry as empty */ |
| 202 | #define setempty(v) settt_(v, LUA_TEMPTY) | 200 | #define setempty(v) settt_(v, LUA_VEMPTY) |
| 203 | 201 | ||
| 204 | 202 | ||
| 205 | 203 | ||
| @@ -213,19 +211,19 @@ typedef StackValue *StkId; | |||
| 213 | */ | 211 | */ |
| 214 | 212 | ||
| 215 | 213 | ||
| 216 | #define LUA_TFALSE makevariant(LUA_TBOOLEAN, 1) | 214 | #define LUA_VFALSE makevariant(LUA_TBOOLEAN, 1) |
| 217 | #define LUA_TTRUE makevariant(LUA_TBOOLEAN, 2) | 215 | #define LUA_VTRUE makevariant(LUA_TBOOLEAN, 2) |
| 218 | 216 | ||
| 219 | #define ttisboolean(o) checktype((o), LUA_TBOOLEAN) | 217 | #define ttisboolean(o) checktype((o), LUA_TBOOLEAN) |
| 220 | #define ttisfalse(o) checktag((o), LUA_TFALSE) | 218 | #define ttisfalse(o) checktag((o), LUA_VFALSE) |
| 221 | #define ttistrue(o) checktag((o), LUA_TTRUE) | 219 | #define ttistrue(o) checktag((o), LUA_VTRUE) |
| 222 | 220 | ||
| 223 | 221 | ||
| 224 | #define l_isfalse(o) (ttisfalse(o) || ttisnil(o)) | 222 | #define l_isfalse(o) (ttisfalse(o) || ttisnil(o)) |
| 225 | 223 | ||
| 226 | 224 | ||
| 227 | #define setbfvalue(obj) settt_(obj, LUA_TFALSE) | 225 | #define setbfvalue(obj) settt_(obj, LUA_VFALSE) |
| 228 | #define setbtvalue(obj) settt_(obj, LUA_TTRUE) | 226 | #define setbtvalue(obj) settt_(obj, LUA_VTRUE) |
| 229 | 227 | ||
| 230 | /* }================================================================== */ | 228 | /* }================================================================== */ |
| 231 | 229 | ||
| @@ -236,13 +234,15 @@ typedef StackValue *StkId; | |||
| 236 | ** =================================================================== | 234 | ** =================================================================== |
| 237 | */ | 235 | */ |
| 238 | 236 | ||
| 239 | #define ttisthread(o) checktag((o), ctb(LUA_TTHREAD)) | 237 | #define LUA_VTHREAD makevariant(LUA_TTHREAD, 1) |
| 238 | |||
| 239 | #define ttisthread(o) checktag((o), ctb(LUA_VTHREAD)) | ||
| 240 | 240 | ||
| 241 | #define thvalue(o) check_exp(ttisthread(o), gco2th(val_(o).gc)) | 241 | #define thvalue(o) check_exp(ttisthread(o), gco2th(val_(o).gc)) |
| 242 | 242 | ||
| 243 | #define setthvalue(L,obj,x) \ | 243 | #define setthvalue(L,obj,x) \ |
| 244 | { TValue *io = (obj); lua_State *x_ = (x); \ | 244 | { TValue *io = (obj); lua_State *x_ = (x); \ |
| 245 | val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_TTHREAD)); \ | 245 | val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_VTHREAD)); \ |
| 246 | checkliveness(L,io); } | 246 | checkliveness(L,io); } |
| 247 | 247 | ||
| 248 | #define setthvalue2s(L,o,t) setthvalue(L,s2v(o),t) | 248 | #define setthvalue2s(L,o,t) setthvalue(L,s2v(o),t) |
| @@ -295,12 +295,12 @@ typedef struct GCObject { | |||
| 295 | */ | 295 | */ |
| 296 | 296 | ||
| 297 | /* Variant tags for numbers */ | 297 | /* Variant tags for numbers */ |
| 298 | #define LUA_TNUMINT makevariant(LUA_TNUMBER, 1) /* integer numbers */ | 298 | #define LUA_VNUMINT makevariant(LUA_TNUMBER, 1) /* integer numbers */ |
| 299 | #define LUA_TNUMFLT makevariant(LUA_TNUMBER, 2) /* float numbers */ | 299 | #define LUA_VNUMFLT makevariant(LUA_TNUMBER, 2) /* float numbers */ |
| 300 | 300 | ||
| 301 | #define ttisnumber(o) checktype((o), LUA_TNUMBER) | 301 | #define ttisnumber(o) checktype((o), LUA_TNUMBER) |
| 302 | #define ttisfloat(o) checktag((o), LUA_TNUMFLT) | 302 | #define ttisfloat(o) checktag((o), LUA_VNUMFLT) |
| 303 | #define ttisinteger(o) checktag((o), LUA_TNUMINT) | 303 | #define ttisinteger(o) checktag((o), LUA_VNUMINT) |
| 304 | 304 | ||
| 305 | #define nvalue(o) check_exp(ttisnumber(o), \ | 305 | #define nvalue(o) check_exp(ttisnumber(o), \ |
| 306 | (ttisinteger(o) ? cast_num(ivalue(o)) : fltvalue(o))) | 306 | (ttisinteger(o) ? cast_num(ivalue(o)) : fltvalue(o))) |
| @@ -311,13 +311,13 @@ typedef struct GCObject { | |||
| 311 | #define ivalueraw(v) ((v).i) | 311 | #define ivalueraw(v) ((v).i) |
| 312 | 312 | ||
| 313 | #define setfltvalue(obj,x) \ | 313 | #define setfltvalue(obj,x) \ |
| 314 | { TValue *io=(obj); val_(io).n=(x); settt_(io, LUA_TNUMFLT); } | 314 | { TValue *io=(obj); val_(io).n=(x); settt_(io, LUA_VNUMFLT); } |
| 315 | 315 | ||
| 316 | #define chgfltvalue(obj,x) \ | 316 | #define chgfltvalue(obj,x) \ |
| 317 | { TValue *io=(obj); lua_assert(ttisfloat(io)); val_(io).n=(x); } | 317 | { TValue *io=(obj); lua_assert(ttisfloat(io)); val_(io).n=(x); } |
| 318 | 318 | ||
| 319 | #define setivalue(obj,x) \ | 319 | #define setivalue(obj,x) \ |
| 320 | { TValue *io=(obj); val_(io).i=(x); settt_(io, LUA_TNUMINT); } | 320 | { TValue *io=(obj); val_(io).i=(x); settt_(io, LUA_VNUMINT); } |
| 321 | 321 | ||
| 322 | #define chgivalue(obj,x) \ | 322 | #define chgivalue(obj,x) \ |
| 323 | { TValue *io=(obj); lua_assert(ttisinteger(io)); val_(io).i=(x); } | 323 | { TValue *io=(obj); lua_assert(ttisinteger(io)); val_(io).i=(x); } |
| @@ -332,12 +332,12 @@ typedef struct GCObject { | |||
| 332 | */ | 332 | */ |
| 333 | 333 | ||
| 334 | /* Variant tags for strings */ | 334 | /* Variant tags for strings */ |
| 335 | #define LUA_TSHRSTR makevariant(LUA_TSTRING, 1) /* short strings */ | 335 | #define LUA_VSHRSTR makevariant(LUA_TSTRING, 1) /* short strings */ |
| 336 | #define LUA_TLNGSTR makevariant(LUA_TSTRING, 2) /* long strings */ | 336 | #define LUA_VLNGSTR makevariant(LUA_TSTRING, 2) /* long strings */ |
| 337 | 337 | ||
| 338 | #define ttisstring(o) checktype((o), LUA_TSTRING) | 338 | #define ttisstring(o) checktype((o), LUA_TSTRING) |
| 339 | #define ttisshrstring(o) checktag((o), ctb(LUA_TSHRSTR)) | 339 | #define ttisshrstring(o) checktag((o), ctb(LUA_VSHRSTR)) |
| 340 | #define ttislngstring(o) checktag((o), ctb(LUA_TLNGSTR)) | 340 | #define ttislngstring(o) checktag((o), ctb(LUA_VLNGSTR)) |
| 341 | 341 | ||
| 342 | #define tsvalueraw(v) (gco2ts((v).gc)) | 342 | #define tsvalueraw(v) (gco2ts((v).gc)) |
| 343 | 343 | ||
| @@ -384,7 +384,7 @@ typedef struct TString { | |||
| 384 | #define svalue(o) getstr(tsvalue(o)) | 384 | #define svalue(o) getstr(tsvalue(o)) |
| 385 | 385 | ||
| 386 | /* get string length from 'TString *s' */ | 386 | /* get string length from 'TString *s' */ |
| 387 | #define tsslen(s) ((s)->tt == LUA_TSHRSTR ? (s)->shrlen : (s)->u.lnglen) | 387 | #define tsslen(s) ((s)->tt == LUA_VSHRSTR ? (s)->shrlen : (s)->u.lnglen) |
| 388 | 388 | ||
| 389 | /* get string length from 'TValue *o' */ | 389 | /* get string length from 'TValue *o' */ |
| 390 | #define vslen(o) tsslen(tsvalue(o)) | 390 | #define vslen(o) tsslen(tsvalue(o)) |
| @@ -398,8 +398,16 @@ typedef struct TString { | |||
| 398 | ** =================================================================== | 398 | ** =================================================================== |
| 399 | */ | 399 | */ |
| 400 | 400 | ||
| 401 | #define ttislightuserdata(o) checktag((o), LUA_TLIGHTUSERDATA) | 401 | |
| 402 | #define ttisfulluserdata(o) checktype((o), LUA_TUSERDATA) | 402 | /* |
| 403 | ** Light userdata should be a variant of userdata, but for compatibility | ||
| 404 | ** reasons they are also different types. | ||
| 405 | */ | ||
| 406 | #define LUA_VLIGHTUSERDATA makevariant(LUA_TLIGHTUSERDATA, 1) | ||
| 407 | #define LUA_VUSERDATA makevariant(LUA_TUSERDATA, 1) | ||
| 408 | |||
| 409 | #define ttislightuserdata(o) checktag((o), LUA_VLIGHTUSERDATA) | ||
| 410 | #define ttisfulluserdata(o) checktag((o), ctb(LUA_VUSERDATA)) | ||
| 403 | 411 | ||
| 404 | #define pvalue(o) check_exp(ttislightuserdata(o), val_(o).p) | 412 | #define pvalue(o) check_exp(ttislightuserdata(o), val_(o).p) |
| 405 | #define uvalue(o) check_exp(ttisfulluserdata(o), gco2u(val_(o).gc)) | 413 | #define uvalue(o) check_exp(ttisfulluserdata(o), gco2u(val_(o).gc)) |
| @@ -407,11 +415,11 @@ typedef struct TString { | |||
| 407 | #define pvalueraw(v) ((v).p) | 415 | #define pvalueraw(v) ((v).p) |
| 408 | 416 | ||
| 409 | #define setpvalue(obj,x) \ | 417 | #define setpvalue(obj,x) \ |
| 410 | { TValue *io=(obj); val_(io).p=(x); settt_(io, LUA_TLIGHTUSERDATA); } | 418 | { TValue *io=(obj); val_(io).p=(x); settt_(io, LUA_VLIGHTUSERDATA); } |
| 411 | 419 | ||
| 412 | #define setuvalue(L,obj,x) \ | 420 | #define setuvalue(L,obj,x) \ |
| 413 | { TValue *io = (obj); Udata *x_ = (x); \ | 421 | { TValue *io = (obj); Udata *x_ = (x); \ |
| 414 | val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_TUSERDATA)); \ | 422 | val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_VUSERDATA)); \ |
| 415 | checkliveness(L,io); } | 423 | checkliveness(L,io); } |
| 416 | 424 | ||
| 417 | 425 | ||
| @@ -474,6 +482,9 @@ typedef struct Udata0 { | |||
| 474 | ** =================================================================== | 482 | ** =================================================================== |
| 475 | */ | 483 | */ |
| 476 | 484 | ||
| 485 | #define LUA_VPROTO makevariant(LUA_TPROTO, 1) | ||
| 486 | |||
| 487 | |||
| 477 | /* | 488 | /* |
| 478 | ** Description of an upvalue for function prototypes | 489 | ** Description of an upvalue for function prototypes |
| 479 | */ | 490 | */ |
| @@ -548,16 +559,19 @@ typedef struct Proto { | |||
| 548 | ** =================================================================== | 559 | ** =================================================================== |
| 549 | */ | 560 | */ |
| 550 | 561 | ||
| 562 | #define LUA_VUPVAL makevariant(LUA_TUPVAL, 1) | ||
| 563 | |||
| 564 | |||
| 551 | /* Variant tags for functions */ | 565 | /* Variant tags for functions */ |
| 552 | #define LUA_TLCL makevariant(LUA_TFUNCTION, 1) /* Lua closure */ | 566 | #define LUA_VLCL makevariant(LUA_TFUNCTION, 1) /* Lua closure */ |
| 553 | #define LUA_TLCF makevariant(LUA_TFUNCTION, 2) /* light C function */ | 567 | #define LUA_VLCF makevariant(LUA_TFUNCTION, 2) /* light C function */ |
| 554 | #define LUA_TCCL makevariant(LUA_TFUNCTION, 3) /* C closure */ | 568 | #define LUA_VCCL makevariant(LUA_TFUNCTION, 3) /* C closure */ |
| 555 | 569 | ||
| 556 | #define ttisfunction(o) checktype(o, LUA_TFUNCTION) | 570 | #define ttisfunction(o) checktype(o, LUA_TFUNCTION) |
| 557 | #define ttisclosure(o) ((rawtt(o) & 0x1F) == LUA_TLCL) | 571 | #define ttisclosure(o) ((rawtt(o) & 0x1F) == LUA_VLCL) |
| 558 | #define ttisLclosure(o) checktag((o), ctb(LUA_TLCL)) | 572 | #define ttisLclosure(o) checktag((o), ctb(LUA_VLCL)) |
| 559 | #define ttislcf(o) checktag((o), LUA_TLCF) | 573 | #define ttislcf(o) checktag((o), LUA_VLCF) |
| 560 | #define ttisCclosure(o) checktag((o), ctb(LUA_TCCL)) | 574 | #define ttisCclosure(o) checktag((o), ctb(LUA_VCCL)) |
| 561 | 575 | ||
| 562 | #define isLfunction(o) ttisLclosure(o) | 576 | #define isLfunction(o) ttisLclosure(o) |
| 563 | 577 | ||
| @@ -570,17 +584,17 @@ typedef struct Proto { | |||
| 570 | 584 | ||
| 571 | #define setclLvalue(L,obj,x) \ | 585 | #define setclLvalue(L,obj,x) \ |
| 572 | { TValue *io = (obj); LClosure *x_ = (x); \ | 586 | { TValue *io = (obj); LClosure *x_ = (x); \ |
| 573 | val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_TLCL)); \ | 587 | val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_VLCL)); \ |
| 574 | checkliveness(L,io); } | 588 | checkliveness(L,io); } |
| 575 | 589 | ||
| 576 | #define setclLvalue2s(L,o,cl) setclLvalue(L,s2v(o),cl) | 590 | #define setclLvalue2s(L,o,cl) setclLvalue(L,s2v(o),cl) |
| 577 | 591 | ||
| 578 | #define setfvalue(obj,x) \ | 592 | #define setfvalue(obj,x) \ |
| 579 | { TValue *io=(obj); val_(io).f=(x); settt_(io, LUA_TLCF); } | 593 | { TValue *io=(obj); val_(io).f=(x); settt_(io, LUA_VLCF); } |
| 580 | 594 | ||
| 581 | #define setclCvalue(L,obj,x) \ | 595 | #define setclCvalue(L,obj,x) \ |
| 582 | { TValue *io = (obj); CClosure *x_ = (x); \ | 596 | { TValue *io = (obj); CClosure *x_ = (x); \ |
| 583 | val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_TCCL)); \ | 597 | val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_VCCL)); \ |
| 584 | checkliveness(L,io); } | 598 | checkliveness(L,io); } |
| 585 | 599 | ||
| 586 | 600 | ||
| @@ -636,13 +650,15 @@ typedef union Closure { | |||
| 636 | ** =================================================================== | 650 | ** =================================================================== |
| 637 | */ | 651 | */ |
| 638 | 652 | ||
| 639 | #define ttistable(o) checktag((o), ctb(LUA_TTABLE)) | 653 | #define LUA_VTABLE makevariant(LUA_TTABLE, 1) |
| 654 | |||
| 655 | #define ttistable(o) checktag((o), ctb(LUA_VTABLE)) | ||
| 640 | 656 | ||
| 641 | #define hvalue(o) check_exp(ttistable(o), gco2t(val_(o).gc)) | 657 | #define hvalue(o) check_exp(ttistable(o), gco2t(val_(o).gc)) |
| 642 | 658 | ||
| 643 | #define sethvalue(L,obj,x) \ | 659 | #define sethvalue(L,obj,x) \ |
| 644 | { TValue *io = (obj); Table *x_ = (x); \ | 660 | { TValue *io = (obj); Table *x_ = (x); \ |
| 645 | val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_TTABLE)); \ | 661 | val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_VTABLE)); \ |
| 646 | checkliveness(L,io); } | 662 | checkliveness(L,io); } |
| 647 | 663 | ||
| 648 | #define sethvalue2s(L,o,h) sethvalue(L,s2v(o),h) | 664 | #define sethvalue2s(L,o,h) sethvalue(L,s2v(o),h) |
| @@ -713,9 +729,9 @@ typedef struct Table { | |||
| 713 | #define keyval(node) ((node)->u.key_val) | 729 | #define keyval(node) ((node)->u.key_val) |
| 714 | 730 | ||
| 715 | #define keyisnil(node) (keytt(node) == LUA_TNIL) | 731 | #define keyisnil(node) (keytt(node) == LUA_TNIL) |
| 716 | #define keyisinteger(node) (keytt(node) == LUA_TNUMINT) | 732 | #define keyisinteger(node) (keytt(node) == LUA_VNUMINT) |
| 717 | #define keyival(node) (keyval(node).i) | 733 | #define keyival(node) (keyval(node).i) |
| 718 | #define keyisshrstr(node) (keytt(node) == ctb(LUA_TSHRSTR)) | 734 | #define keyisshrstr(node) (keytt(node) == ctb(LUA_VSHRSTR)) |
| 719 | #define keystrval(node) (gco2ts(keyval(node).gc)) | 735 | #define keystrval(node) (gco2ts(keyval(node).gc)) |
| 720 | 736 | ||
| 721 | #define setnilkey(node) (keytt(node) = LUA_TNIL) | 737 | #define setnilkey(node) (keytt(node) = LUA_TNIL) |
| @@ -17,11 +17,11 @@ | |||
| 17 | 17 | ||
| 18 | 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 | 18 | 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 |
| 19 | 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 | 19 | 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 |
| 20 | iABC C(8) | B(8) |k| A(8) | Op(7) | | 20 | iABC C(8) | B(8) |k| A(8) | Op(7) | |
| 21 | iABx Bx(17) | A(8) | Op(7) | | 21 | iABx Bx(17) | A(8) | Op(7) | |
| 22 | iAsBx sBx (signed)(17) | A(8) | Op(7) | | 22 | iAsBx sBx (signed)(17) | A(8) | Op(7) | |
| 23 | iAx Ax(25) | Op(7) | | 23 | iAx Ax(25) | Op(7) | |
| 24 | isJ sJ(25) | Op(7) | | 24 | isJ sJ(25) | Op(7) | |
| 25 | 25 | ||
| 26 | A signed argument is represented in excess K: the represented value is | 26 | A signed argument is represented in excess K: the represented value is |
| 27 | the written unsigned value minus K, where K is half the maximum for the | 27 | the written unsigned value minus K, where K is half the maximum for the |
| @@ -318,7 +318,7 @@ LUA_API lua_State *lua_newthread (lua_State *L) { | |||
| 318 | /* create new thread */ | 318 | /* create new thread */ |
| 319 | L1 = &cast(LX *, luaM_newobject(L, LUA_TTHREAD, sizeof(LX)))->l; | 319 | L1 = &cast(LX *, luaM_newobject(L, LUA_TTHREAD, sizeof(LX)))->l; |
| 320 | L1->marked = luaC_white(g); | 320 | L1->marked = luaC_white(g); |
| 321 | L1->tt = LUA_TTHREAD; | 321 | L1->tt = LUA_VTHREAD; |
| 322 | /* link it on list 'allgc' */ | 322 | /* link it on list 'allgc' */ |
| 323 | L1->next = g->allgc; | 323 | L1->next = g->allgc; |
| 324 | g->allgc = obj2gco(L1); | 324 | g->allgc = obj2gco(L1); |
| @@ -382,7 +382,7 @@ LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) { | |||
| 382 | if (l == NULL) return NULL; | 382 | if (l == NULL) return NULL; |
| 383 | L = &l->l.l; | 383 | L = &l->l.l; |
| 384 | g = &l->g; | 384 | g = &l->g; |
| 385 | L->tt = LUA_TTHREAD; | 385 | L->tt = LUA_VTHREAD; |
| 386 | g->currentwhite = bitmask(WHITE0BIT); | 386 | g->currentwhite = bitmask(WHITE0BIT); |
| 387 | L->marked = luaC_white(g); | 387 | L->marked = luaC_white(g); |
| 388 | preinit_thread(L, g); | 388 | preinit_thread(L, g); |
| @@ -327,15 +327,15 @@ union GCUnion { | |||
| 327 | /* macros to convert a GCObject into a specific value */ | 327 | /* macros to convert a GCObject into a specific value */ |
| 328 | #define gco2ts(o) \ | 328 | #define gco2ts(o) \ |
| 329 | check_exp(novariant((o)->tt) == LUA_TSTRING, &((cast_u(o))->ts)) | 329 | check_exp(novariant((o)->tt) == LUA_TSTRING, &((cast_u(o))->ts)) |
| 330 | #define gco2u(o) check_exp((o)->tt == LUA_TUSERDATA, &((cast_u(o))->u)) | 330 | #define gco2u(o) check_exp((o)->tt == LUA_VUSERDATA, &((cast_u(o))->u)) |
| 331 | #define gco2lcl(o) check_exp((o)->tt == LUA_TLCL, &((cast_u(o))->cl.l)) | 331 | #define gco2lcl(o) check_exp((o)->tt == LUA_VLCL, &((cast_u(o))->cl.l)) |
| 332 | #define gco2ccl(o) check_exp((o)->tt == LUA_TCCL, &((cast_u(o))->cl.c)) | 332 | #define gco2ccl(o) check_exp((o)->tt == LUA_VCCL, &((cast_u(o))->cl.c)) |
| 333 | #define gco2cl(o) \ | 333 | #define gco2cl(o) \ |
| 334 | check_exp(novariant((o)->tt) == LUA_TFUNCTION, &((cast_u(o))->cl)) | 334 | check_exp(novariant((o)->tt) == LUA_TFUNCTION, &((cast_u(o))->cl)) |
| 335 | #define gco2t(o) check_exp((o)->tt == LUA_TTABLE, &((cast_u(o))->h)) | 335 | #define gco2t(o) check_exp((o)->tt == LUA_VTABLE, &((cast_u(o))->h)) |
| 336 | #define gco2p(o) check_exp((o)->tt == LUA_TPROTO, &((cast_u(o))->p)) | 336 | #define gco2p(o) check_exp((o)->tt == LUA_VPROTO, &((cast_u(o))->p)) |
| 337 | #define gco2th(o) check_exp((o)->tt == LUA_TTHREAD, &((cast_u(o))->th)) | 337 | #define gco2th(o) check_exp((o)->tt == LUA_VTHREAD, &((cast_u(o))->th)) |
| 338 | #define gco2upv(o) check_exp((o)->tt == LUA_TUPVAL, &((cast_u(o))->upv)) | 338 | #define gco2upv(o) check_exp((o)->tt == LUA_VUPVAL, &((cast_u(o))->upv)) |
| 339 | 339 | ||
| 340 | 340 | ||
| 341 | /* | 341 | /* |
| @@ -43,7 +43,7 @@ | |||
| 43 | */ | 43 | */ |
| 44 | int luaS_eqlngstr (TString *a, TString *b) { | 44 | int luaS_eqlngstr (TString *a, TString *b) { |
| 45 | size_t len = a->u.lnglen; | 45 | size_t len = a->u.lnglen; |
| 46 | lua_assert(a->tt == LUA_TLNGSTR && b->tt == LUA_TLNGSTR); | 46 | lua_assert(a->tt == LUA_VLNGSTR && b->tt == LUA_VLNGSTR); |
| 47 | return (a == b) || /* same instance or... */ | 47 | return (a == b) || /* same instance or... */ |
| 48 | ((len == b->u.lnglen) && /* equal length and ... */ | 48 | ((len == b->u.lnglen) && /* equal length and ... */ |
| 49 | (memcmp(getstr(a), getstr(b), len) == 0)); /* equal contents */ | 49 | (memcmp(getstr(a), getstr(b), len) == 0)); /* equal contents */ |
| @@ -60,7 +60,7 @@ unsigned int luaS_hash (const char *str, size_t l, unsigned int seed) { | |||
| 60 | 60 | ||
| 61 | 61 | ||
| 62 | unsigned int luaS_hashlongstr (TString *ts) { | 62 | unsigned int luaS_hashlongstr (TString *ts) { |
| 63 | lua_assert(ts->tt == LUA_TLNGSTR); | 63 | lua_assert(ts->tt == LUA_VLNGSTR); |
| 64 | if (ts->extra == 0) { /* no hash? */ | 64 | if (ts->extra == 0) { /* no hash? */ |
| 65 | ts->hash = luaS_hash(getstr(ts), ts->u.lnglen, ts->hash); | 65 | ts->hash = luaS_hash(getstr(ts), ts->u.lnglen, ts->hash); |
| 66 | ts->extra = 1; /* now it has its hash */ | 66 | ts->extra = 1; /* now it has its hash */ |
| @@ -165,7 +165,7 @@ static TString *createstrobj (lua_State *L, size_t l, int tag, unsigned int h) { | |||
| 165 | 165 | ||
| 166 | 166 | ||
| 167 | TString *luaS_createlngstrobj (lua_State *L, size_t l) { | 167 | TString *luaS_createlngstrobj (lua_State *L, size_t l) { |
| 168 | TString *ts = createstrobj(L, l, LUA_TLNGSTR, G(L)->seed); | 168 | TString *ts = createstrobj(L, l, LUA_VLNGSTR, G(L)->seed); |
| 169 | ts->u.lnglen = l; | 169 | ts->u.lnglen = l; |
| 170 | return ts; | 170 | return ts; |
| 171 | } | 171 | } |
| @@ -215,7 +215,7 @@ static TString *internshrstr (lua_State *L, const char *str, size_t l) { | |||
| 215 | growstrtab(L, tb); | 215 | growstrtab(L, tb); |
| 216 | list = &tb->hash[lmod(h, tb->size)]; /* rehash with new size */ | 216 | list = &tb->hash[lmod(h, tb->size)]; /* rehash with new size */ |
| 217 | } | 217 | } |
| 218 | ts = createstrobj(L, l, LUA_TSHRSTR, h); | 218 | ts = createstrobj(L, l, LUA_VSHRSTR, h); |
| 219 | memcpy(getstr(ts), str, l * sizeof(char)); | 219 | memcpy(getstr(ts), str, l * sizeof(char)); |
| 220 | ts->shrlen = cast_byte(l); | 220 | ts->shrlen = cast_byte(l); |
| 221 | ts->u.hnext = *list; | 221 | ts->u.hnext = *list; |
| @@ -271,7 +271,7 @@ Udata *luaS_newudata (lua_State *L, size_t s, int nuvalue) { | |||
| 271 | GCObject *o; | 271 | GCObject *o; |
| 272 | if (unlikely(s > MAX_SIZE - udatamemoffset(nuvalue))) | 272 | if (unlikely(s > MAX_SIZE - udatamemoffset(nuvalue))) |
| 273 | luaM_toobig(L); | 273 | luaM_toobig(L); |
| 274 | o = luaC_newobj(L, LUA_TUSERDATA, sizeudata(nuvalue, s)); | 274 | o = luaC_newobj(L, LUA_VUSERDATA, sizeudata(nuvalue, s)); |
| 275 | u = gco2u(o); | 275 | u = gco2u(o); |
| 276 | u->len = s; | 276 | u->len = s; |
| 277 | u->nuvalue = nuvalue; | 277 | u->nuvalue = nuvalue; |
| @@ -28,13 +28,13 @@ | |||
| 28 | /* | 28 | /* |
| 29 | ** test whether a string is a reserved word | 29 | ** test whether a string is a reserved word |
| 30 | */ | 30 | */ |
| 31 | #define isreserved(s) ((s)->tt == LUA_TSHRSTR && (s)->extra > 0) | 31 | #define isreserved(s) ((s)->tt == LUA_VSHRSTR && (s)->extra > 0) |
| 32 | 32 | ||
| 33 | 33 | ||
| 34 | /* | 34 | /* |
| 35 | ** equality for short strings, which are always internalized | 35 | ** equality for short strings, which are always internalized |
| 36 | */ | 36 | */ |
| 37 | #define eqshrstr(a,b) check_exp((a)->tt == LUA_TSHRSTR, (a) == (b)) | 37 | #define eqshrstr(a,b) check_exp((a)->tt == LUA_VSHRSTR, (a) == (b)) |
| 38 | 38 | ||
| 39 | 39 | ||
| 40 | LUAI_FUNC unsigned int luaS_hash (const char *str, size_t l, unsigned int seed); | 40 | LUAI_FUNC unsigned int luaS_hash (const char *str, size_t l, unsigned int seed); |
| @@ -88,8 +88,8 @@ | |||
| 88 | #define dummynode (&dummynode_) | 88 | #define dummynode (&dummynode_) |
| 89 | 89 | ||
| 90 | static const Node dummynode_ = { | 90 | static const Node dummynode_ = { |
| 91 | {{NULL}, LUA_TEMPTY, /* value's value and type */ | 91 | {{NULL}, LUA_VEMPTY, /* value's value and type */ |
| 92 | LUA_TNIL, 0, {NULL}} /* key type, next, and key value */ | 92 | LUA_VNIL, 0, {NULL}} /* key type, next, and key value */ |
| 93 | }; | 93 | }; |
| 94 | 94 | ||
| 95 | 95 | ||
| @@ -135,21 +135,21 @@ static int l_hashfloat (lua_Number n) { | |||
| 135 | */ | 135 | */ |
| 136 | static Node *mainposition (const Table *t, int ktt, const Value *kvl) { | 136 | static Node *mainposition (const Table *t, int ktt, const Value *kvl) { |
| 137 | switch (withvariant(ktt)) { | 137 | switch (withvariant(ktt)) { |
| 138 | case LUA_TNUMINT: | 138 | case LUA_VNUMINT: |
| 139 | return hashint(t, ivalueraw(*kvl)); | 139 | return hashint(t, ivalueraw(*kvl)); |
| 140 | case LUA_TNUMFLT: | 140 | case LUA_VNUMFLT: |
| 141 | return hashmod(t, l_hashfloat(fltvalueraw(*kvl))); | 141 | return hashmod(t, l_hashfloat(fltvalueraw(*kvl))); |
| 142 | case LUA_TSHRSTR: | 142 | case LUA_VSHRSTR: |
| 143 | return hashstr(t, tsvalueraw(*kvl)); | 143 | return hashstr(t, tsvalueraw(*kvl)); |
| 144 | case LUA_TLNGSTR: | 144 | case LUA_VLNGSTR: |
| 145 | return hashpow2(t, luaS_hashlongstr(tsvalueraw(*kvl))); | 145 | return hashpow2(t, luaS_hashlongstr(tsvalueraw(*kvl))); |
| 146 | case LUA_TFALSE: | 146 | case LUA_VFALSE: |
| 147 | return hashboolean(t, 0); | 147 | return hashboolean(t, 0); |
| 148 | case LUA_TTRUE: | 148 | case LUA_VTRUE: |
| 149 | return hashboolean(t, 1); | 149 | return hashboolean(t, 1); |
| 150 | case LUA_TLIGHTUSERDATA: | 150 | case LUA_VLIGHTUSERDATA: |
| 151 | return hashpointer(t, pvalueraw(*kvl)); | 151 | return hashpointer(t, pvalueraw(*kvl)); |
| 152 | case LUA_TLCF: | 152 | case LUA_VLCF: |
| 153 | return hashpointer(t, fvalueraw(*kvl)); | 153 | return hashpointer(t, fvalueraw(*kvl)); |
| 154 | default: | 154 | default: |
| 155 | return hashpointer(t, gcvalueraw(*kvl)); | 155 | return hashpointer(t, gcvalueraw(*kvl)); |
| @@ -177,17 +177,17 @@ static int equalkey (const TValue *k1, const Node *n2) { | |||
| 177 | if (rawtt(k1) != keytt(n2)) /* not the same variants? */ | 177 | if (rawtt(k1) != keytt(n2)) /* not the same variants? */ |
| 178 | return 0; /* cannot be same key */ | 178 | return 0; /* cannot be same key */ |
| 179 | switch (ttypetag(k1)) { | 179 | switch (ttypetag(k1)) { |
| 180 | case LUA_TNIL: case LUA_TFALSE: case LUA_TTRUE: | 180 | case LUA_VNIL: case LUA_VFALSE: case LUA_VTRUE: |
| 181 | return 1; | 181 | return 1; |
| 182 | case LUA_TNUMINT: | 182 | case LUA_VNUMINT: |
| 183 | return (ivalue(k1) == keyival(n2)); | 183 | return (ivalue(k1) == keyival(n2)); |
| 184 | case LUA_TNUMFLT: | 184 | case LUA_VNUMFLT: |
| 185 | return luai_numeq(fltvalue(k1), fltvalueraw(keyval(n2))); | 185 | return luai_numeq(fltvalue(k1), fltvalueraw(keyval(n2))); |
| 186 | case LUA_TLIGHTUSERDATA: | 186 | case LUA_VLIGHTUSERDATA: |
| 187 | return pvalue(k1) == pvalueraw(keyval(n2)); | 187 | return pvalue(k1) == pvalueraw(keyval(n2)); |
| 188 | case LUA_TLCF: | 188 | case LUA_VLCF: |
| 189 | return fvalue(k1) == fvalueraw(keyval(n2)); | 189 | return fvalue(k1) == fvalueraw(keyval(n2)); |
| 190 | case LUA_TLNGSTR: | 190 | case LUA_VLNGSTR: |
| 191 | return luaS_eqlngstr(tsvalue(k1), keystrval(n2)); | 191 | return luaS_eqlngstr(tsvalue(k1), keystrval(n2)); |
| 192 | default: | 192 | default: |
| 193 | return gcvalue(k1) == gcvalueraw(keyval(n2)); | 193 | return gcvalue(k1) == gcvalueraw(keyval(n2)); |
| @@ -580,7 +580,7 @@ static void rehash (lua_State *L, Table *t, const TValue *ek) { | |||
| 580 | 580 | ||
| 581 | 581 | ||
| 582 | Table *luaH_new (lua_State *L) { | 582 | Table *luaH_new (lua_State *L) { |
| 583 | GCObject *o = luaC_newobj(L, LUA_TTABLE, sizeof(Table)); | 583 | GCObject *o = luaC_newobj(L, LUA_VTABLE, sizeof(Table)); |
| 584 | Table *t = gco2t(o); | 584 | Table *t = gco2t(o); |
| 585 | t->metatable = NULL; | 585 | t->metatable = NULL; |
| 586 | t->flags = cast_byte(~0); | 586 | t->flags = cast_byte(~0); |
| @@ -710,7 +710,7 @@ const TValue *luaH_getint (Table *t, lua_Integer key) { | |||
| 710 | */ | 710 | */ |
| 711 | const TValue *luaH_getshortstr (Table *t, TString *key) { | 711 | const TValue *luaH_getshortstr (Table *t, TString *key) { |
| 712 | Node *n = hashstr(t, key); | 712 | Node *n = hashstr(t, key); |
| 713 | lua_assert(key->tt == LUA_TSHRSTR); | 713 | lua_assert(key->tt == LUA_VSHRSTR); |
| 714 | for (;;) { /* check whether 'key' is somewhere in the chain */ | 714 | for (;;) { /* check whether 'key' is somewhere in the chain */ |
| 715 | if (keyisshrstr(n) && eqshrstr(keystrval(n), key)) | 715 | if (keyisshrstr(n) && eqshrstr(keystrval(n), key)) |
| 716 | return gval(n); /* that's it */ | 716 | return gval(n); /* that's it */ |
| @@ -725,7 +725,7 @@ const TValue *luaH_getshortstr (Table *t, TString *key) { | |||
| 725 | 725 | ||
| 726 | 726 | ||
| 727 | const TValue *luaH_getstr (Table *t, TString *key) { | 727 | const TValue *luaH_getstr (Table *t, TString *key) { |
| 728 | if (key->tt == LUA_TSHRSTR) | 728 | if (key->tt == LUA_VSHRSTR) |
| 729 | return luaH_getshortstr(t, key); | 729 | return luaH_getshortstr(t, key); |
| 730 | else { /* for long strings, use generic case */ | 730 | else { /* for long strings, use generic case */ |
| 731 | TValue ko; | 731 | TValue ko; |
| @@ -740,10 +740,10 @@ const TValue *luaH_getstr (Table *t, TString *key) { | |||
| 740 | */ | 740 | */ |
| 741 | const TValue *luaH_get (Table *t, const TValue *key) { | 741 | const TValue *luaH_get (Table *t, const TValue *key) { |
| 742 | switch (ttypetag(key)) { | 742 | switch (ttypetag(key)) { |
| 743 | case LUA_TSHRSTR: return luaH_getshortstr(t, tsvalue(key)); | 743 | case LUA_VSHRSTR: return luaH_getshortstr(t, tsvalue(key)); |
| 744 | case LUA_TNUMINT: return luaH_getint(t, ivalue(key)); | 744 | case LUA_VNUMINT: return luaH_getint(t, ivalue(key)); |
| 745 | case LUA_TNIL: return &absentkey; | 745 | case LUA_VNIL: return &absentkey; |
| 746 | case LUA_TNUMFLT: { | 746 | case LUA_VNUMFLT: { |
| 747 | lua_Integer k; | 747 | lua_Integer k; |
| 748 | if (luaV_flttointeger(fltvalue(key), &k, F2Ieq)) /* integral index? */ | 748 | if (luaV_flttointeger(fltvalue(key), &k, F2Ieq)) /* integral index? */ |
| 749 | return luaH_getint(t, k); /* use specialized version */ | 749 | return luaH_getint(t, k); /* use specialized version */ |
| @@ -303,7 +303,7 @@ static void printobj (global_State *g, GCObject *o) { | |||
| 303 | ttypename(novariant(o->tt)), (void *)o, | 303 | ttypename(novariant(o->tt)), (void *)o, |
| 304 | isdead(g,o) ? 'd' : isblack(o) ? 'b' : iswhite(o) ? 'w' : 'g', | 304 | isdead(g,o) ? 'd' : isblack(o) ? 'b' : iswhite(o) ? 'w' : 'g', |
| 305 | "ns01oTt"[getage(o)], o->marked); | 305 | "ns01oTt"[getage(o)], o->marked); |
| 306 | if (o->tt == LUA_TSHRSTR || o->tt == LUA_TLNGSTR) | 306 | if (o->tt == LUA_VSHRSTR || o->tt == LUA_VLNGSTR) |
| 307 | printf(" '%s'", getstr(gco2ts(o))); | 307 | printf(" '%s'", getstr(gco2ts(o))); |
| 308 | } | 308 | } |
| 309 | 309 | ||
| @@ -435,36 +435,36 @@ static void checkstack (global_State *g, lua_State *L1) { | |||
| 435 | 435 | ||
| 436 | static void checkrefs (global_State *g, GCObject *o) { | 436 | static void checkrefs (global_State *g, GCObject *o) { |
| 437 | switch (o->tt) { | 437 | switch (o->tt) { |
| 438 | case LUA_TUSERDATA: { | 438 | case LUA_VUSERDATA: { |
| 439 | checkudata(g, gco2u(o)); | 439 | checkudata(g, gco2u(o)); |
| 440 | break; | 440 | break; |
| 441 | } | 441 | } |
| 442 | case LUA_TUPVAL: { | 442 | case LUA_VUPVAL: { |
| 443 | checkvalref(g, o, gco2upv(o)->v); | 443 | checkvalref(g, o, gco2upv(o)->v); |
| 444 | break; | 444 | break; |
| 445 | } | 445 | } |
| 446 | case LUA_TTABLE: { | 446 | case LUA_VTABLE: { |
| 447 | checktable(g, gco2t(o)); | 447 | checktable(g, gco2t(o)); |
| 448 | break; | 448 | break; |
| 449 | } | 449 | } |
| 450 | case LUA_TTHREAD: { | 450 | case LUA_VTHREAD: { |
| 451 | checkstack(g, gco2th(o)); | 451 | checkstack(g, gco2th(o)); |
| 452 | break; | 452 | break; |
| 453 | } | 453 | } |
| 454 | case LUA_TLCL: { | 454 | case LUA_VLCL: { |
| 455 | checkLclosure(g, gco2lcl(o)); | 455 | checkLclosure(g, gco2lcl(o)); |
| 456 | break; | 456 | break; |
| 457 | } | 457 | } |
| 458 | case LUA_TCCL: { | 458 | case LUA_VCCL: { |
| 459 | checkCclosure(g, gco2ccl(o)); | 459 | checkCclosure(g, gco2ccl(o)); |
| 460 | break; | 460 | break; |
| 461 | } | 461 | } |
| 462 | case LUA_TPROTO: { | 462 | case LUA_VPROTO: { |
| 463 | checkproto(g, gco2p(o)); | 463 | checkproto(g, gco2p(o)); |
| 464 | break; | 464 | break; |
| 465 | } | 465 | } |
| 466 | case LUA_TSHRSTR: | 466 | case LUA_VSHRSTR: |
| 467 | case LUA_TLNGSTR: { | 467 | case LUA_VLNGSTR: { |
| 468 | lua_assert(!isgray(o)); /* strings are never gray */ | 468 | lua_assert(!isgray(o)); /* strings are never gray */ |
| 469 | break; | 469 | break; |
| 470 | } | 470 | } |
| @@ -497,8 +497,8 @@ static void checkobject (global_State *g, GCObject *o, int maybedead, | |||
| 497 | lua_assert(isblack(o) || | 497 | lua_assert(isblack(o) || |
| 498 | getage(o) == G_TOUCHED1 || | 498 | getage(o) == G_TOUCHED1 || |
| 499 | getage(o) == G_OLD0 || | 499 | getage(o) == G_OLD0 || |
| 500 | o->tt == LUA_TTHREAD || | 500 | o->tt == LUA_VTHREAD || |
| 501 | (o->tt == LUA_TUPVAL && upisopen(gco2upv(o)))); | 501 | (o->tt == LUA_VUPVAL && upisopen(gco2upv(o)))); |
| 502 | } | 502 | } |
| 503 | } | 503 | } |
| 504 | checkrefs(g, o); | 504 | checkrefs(g, o); |
| @@ -511,11 +511,11 @@ static void checkgraylist (global_State *g, GCObject *o) { | |||
| 511 | while (o) { | 511 | while (o) { |
| 512 | lua_assert(isgray(o) || getage(o) == G_TOUCHED2); | 512 | lua_assert(isgray(o) || getage(o) == G_TOUCHED2); |
| 513 | switch (o->tt) { | 513 | switch (o->tt) { |
| 514 | case LUA_TTABLE: o = gco2t(o)->gclist; break; | 514 | case LUA_VTABLE: o = gco2t(o)->gclist; break; |
| 515 | case LUA_TLCL: o = gco2lcl(o)->gclist; break; | 515 | case LUA_VLCL: o = gco2lcl(o)->gclist; break; |
| 516 | case LUA_TCCL: o = gco2ccl(o)->gclist; break; | 516 | case LUA_VCCL: o = gco2ccl(o)->gclist; break; |
| 517 | case LUA_TTHREAD: o = gco2th(o)->gclist; break; | 517 | case LUA_VTHREAD: o = gco2th(o)->gclist; break; |
| 518 | case LUA_TPROTO: o = gco2p(o)->gclist; break; | 518 | case LUA_VPROTO: o = gco2p(o)->gclist; break; |
| 519 | default: lua_assert(0); /* other objects cannot be in a gray list */ | 519 | default: lua_assert(0); /* other objects cannot be in a gray list */ |
| 520 | } | 520 | } |
| 521 | } | 521 | } |
| @@ -570,7 +570,7 @@ int lua_checkmemory (lua_State *L) { | |||
| 570 | 570 | ||
| 571 | /* check 'fixedgc' list */ | 571 | /* check 'fixedgc' list */ |
| 572 | for (o = g->fixedgc; o != NULL; o = o->next) { | 572 | for (o = g->fixedgc; o != NULL; o = o->next) { |
| 573 | lua_assert(o->tt == LUA_TSHRSTR && isgray(o) && getage(o) == G_OLD); | 573 | lua_assert(o->tt == LUA_VSHRSTR && isgray(o) && getage(o) == G_OLD); |
| 574 | } | 574 | } |
| 575 | 575 | ||
| 576 | /* check 'allgc' list */ | 576 | /* check 'allgc' list */ |
| @@ -584,7 +584,7 @@ int lua_checkmemory (lua_State *L) { | |||
| 584 | for (o = g->tobefnz; o != NULL; o = o->next) { | 584 | for (o = g->tobefnz; o != NULL; o = o->next) { |
| 585 | checkobject(g, o, 0, G_NEW); | 585 | checkobject(g, o, 0, G_NEW); |
| 586 | lua_assert(tofinalize(o)); | 586 | lua_assert(tofinalize(o)); |
| 587 | lua_assert(o->tt == LUA_TUSERDATA || o->tt == LUA_TTABLE); | 587 | lua_assert(o->tt == LUA_VUSERDATA || o->tt == LUA_VTABLE); |
| 588 | } | 588 | } |
| 589 | return 0; | 589 | return 0; |
| 590 | } | 590 | } |
| @@ -61,7 +61,7 @@ typedef struct Memcontrol { | |||
| 61 | unsigned long maxmem; | 61 | unsigned long maxmem; |
| 62 | unsigned long memlimit; | 62 | unsigned long memlimit; |
| 63 | unsigned long countlimit; | 63 | unsigned long countlimit; |
| 64 | unsigned long objcount[LUA_NUMTAGS]; | 64 | unsigned long objcount[LUA_NUMTYPES]; |
| 65 | } Memcontrol; | 65 | } Memcontrol; |
| 66 | 66 | ||
| 67 | LUA_API Memcontrol l_memcontrol; | 67 | LUA_API Memcontrol l_memcontrol; |
| @@ -27,7 +27,7 @@ | |||
| 27 | 27 | ||
| 28 | static const char udatatypename[] = "userdata"; | 28 | static const char udatatypename[] = "userdata"; |
| 29 | 29 | ||
| 30 | LUAI_DDEF const char *const luaT_typenames_[LUA_TOTALTAGS] = { | 30 | LUAI_DDEF const char *const luaT_typenames_[LUA_TOTALTYPES] = { |
| 31 | "no value", | 31 | "no value", |
| 32 | "nil", "boolean", udatatypename, "number", | 32 | "nil", "boolean", udatatypename, "number", |
| 33 | "string", "table", "function", udatatypename, "thread", | 33 | "string", "table", "function", udatatypename, "thread", |
| @@ -59,7 +59,7 @@ typedef enum { | |||
| 59 | 59 | ||
| 60 | #define ttypename(x) luaT_typenames_[(x) + 1] | 60 | #define ttypename(x) luaT_typenames_[(x) + 1] |
| 61 | 61 | ||
| 62 | LUAI_DDEC(const char *const luaT_typenames_[LUA_TOTALTAGS];) | 62 | LUAI_DDEC(const char *const luaT_typenames_[LUA_TOTALTYPES];) |
| 63 | 63 | ||
| 64 | 64 | ||
| 65 | LUAI_FUNC const char *luaT_objtypename (lua_State *L, const TValue *o); | 65 | LUAI_FUNC const char *luaT_objtypename (lua_State *L, const TValue *o); |
| @@ -72,7 +72,7 @@ typedef struct lua_State lua_State; | |||
| 72 | #define LUA_TUSERDATA 7 | 72 | #define LUA_TUSERDATA 7 |
| 73 | #define LUA_TTHREAD 8 | 73 | #define LUA_TTHREAD 8 |
| 74 | 74 | ||
| 75 | #define LUA_NUMTAGS 9 | 75 | #define LUA_NUMTYPES 9 |
| 76 | 76 | ||
| 77 | 77 | ||
| 78 | 78 | ||
| @@ -412,6 +412,8 @@ LUA_API void (lua_toclose) (lua_State *L, int idx); | |||
| 412 | #define lua_getuservalue(L,idx) lua_getiuservalue(L,idx,1) | 412 | #define lua_getuservalue(L,idx) lua_getiuservalue(L,idx,1) |
| 413 | #define lua_setuservalue(L,idx) lua_setiuservalue(L,idx,1) | 413 | #define lua_setuservalue(L,idx) lua_setiuservalue(L,idx,1) |
| 414 | 414 | ||
| 415 | #define LUA_NUMTAGS LUA_NUMTYPES | ||
| 416 | |||
| 415 | /* }============================================================== */ | 417 | /* }============================================================== */ |
| 416 | 418 | ||
| 417 | /* | 419 | /* |
| @@ -157,23 +157,23 @@ static void LoadConstants (LoadState *S, Proto *f) { | |||
| 157 | TValue *o = &f->k[i]; | 157 | TValue *o = &f->k[i]; |
| 158 | int t = LoadByte(S); | 158 | int t = LoadByte(S); |
| 159 | switch (t) { | 159 | switch (t) { |
| 160 | case LUA_TNIL: | 160 | case LUA_VNIL: |
| 161 | setnilvalue(o); | 161 | setnilvalue(o); |
| 162 | break; | 162 | break; |
| 163 | case LUA_TFALSE: | 163 | case LUA_VFALSE: |
| 164 | setbfvalue(o); | 164 | setbfvalue(o); |
| 165 | break; | 165 | break; |
| 166 | case LUA_TTRUE: | 166 | case LUA_VTRUE: |
| 167 | setbtvalue(o); | 167 | setbtvalue(o); |
| 168 | break; | 168 | break; |
| 169 | case LUA_TNUMFLT: | 169 | case LUA_VNUMFLT: |
| 170 | setfltvalue(o, LoadNumber(S)); | 170 | setfltvalue(o, LoadNumber(S)); |
| 171 | break; | 171 | break; |
| 172 | case LUA_TNUMINT: | 172 | case LUA_VNUMINT: |
| 173 | setivalue(o, LoadInteger(S)); | 173 | setivalue(o, LoadInteger(S)); |
| 174 | break; | 174 | break; |
| 175 | case LUA_TSHRSTR: | 175 | case LUA_VSHRSTR: |
| 176 | case LUA_TLNGSTR: | 176 | case LUA_VLNGSTR: |
| 177 | setsvalue2n(S->L, o, LoadString(S)); | 177 | setsvalue2n(S->L, o, LoadString(S)); |
| 178 | break; | 178 | break; |
| 179 | default: lua_assert(0); | 179 | default: lua_assert(0); |
| @@ -577,14 +577,14 @@ int luaV_equalobj (lua_State *L, const TValue *t1, const TValue *t2) { | |||
| 577 | } | 577 | } |
| 578 | /* values have same type and same variant */ | 578 | /* values have same type and same variant */ |
| 579 | switch (ttypetag(t1)) { | 579 | switch (ttypetag(t1)) { |
| 580 | case LUA_TNIL: case LUA_TFALSE: case LUA_TTRUE: return 1; | 580 | case LUA_VNIL: case LUA_VFALSE: case LUA_VTRUE: return 1; |
| 581 | case LUA_TNUMINT: return (ivalue(t1) == ivalue(t2)); | 581 | case LUA_VNUMINT: return (ivalue(t1) == ivalue(t2)); |
| 582 | case LUA_TNUMFLT: return luai_numeq(fltvalue(t1), fltvalue(t2)); | 582 | case LUA_VNUMFLT: return luai_numeq(fltvalue(t1), fltvalue(t2)); |
| 583 | case LUA_TLIGHTUSERDATA: return pvalue(t1) == pvalue(t2); | 583 | case LUA_VLIGHTUSERDATA: return pvalue(t1) == pvalue(t2); |
| 584 | case LUA_TLCF: return fvalue(t1) == fvalue(t2); | 584 | case LUA_VLCF: return fvalue(t1) == fvalue(t2); |
| 585 | case LUA_TSHRSTR: return eqshrstr(tsvalue(t1), tsvalue(t2)); | 585 | case LUA_VSHRSTR: return eqshrstr(tsvalue(t1), tsvalue(t2)); |
| 586 | case LUA_TLNGSTR: return luaS_eqlngstr(tsvalue(t1), tsvalue(t2)); | 586 | case LUA_VLNGSTR: return luaS_eqlngstr(tsvalue(t1), tsvalue(t2)); |
| 587 | case LUA_TUSERDATA: { | 587 | case LUA_VUSERDATA: { |
| 588 | if (uvalue(t1) == uvalue(t2)) return 1; | 588 | if (uvalue(t1) == uvalue(t2)) return 1; |
| 589 | else if (L == NULL) return 0; | 589 | else if (L == NULL) return 0; |
| 590 | tm = fasttm(L, uvalue(t1)->metatable, TM_EQ); | 590 | tm = fasttm(L, uvalue(t1)->metatable, TM_EQ); |
| @@ -592,7 +592,7 @@ int luaV_equalobj (lua_State *L, const TValue *t1, const TValue *t2) { | |||
| 592 | tm = fasttm(L, uvalue(t2)->metatable, TM_EQ); | 592 | tm = fasttm(L, uvalue(t2)->metatable, TM_EQ); |
| 593 | break; /* will try TM */ | 593 | break; /* will try TM */ |
| 594 | } | 594 | } |
| 595 | case LUA_TTABLE: { | 595 | case LUA_VTABLE: { |
| 596 | if (hvalue(t1) == hvalue(t2)) return 1; | 596 | if (hvalue(t1) == hvalue(t2)) return 1; |
| 597 | else if (L == NULL) return 0; | 597 | else if (L == NULL) return 0; |
| 598 | tm = fasttm(L, hvalue(t1)->metatable, TM_EQ); | 598 | tm = fasttm(L, hvalue(t1)->metatable, TM_EQ); |
| @@ -680,18 +680,18 @@ void luaV_concat (lua_State *L, int total) { | |||
| 680 | void luaV_objlen (lua_State *L, StkId ra, const TValue *rb) { | 680 | void luaV_objlen (lua_State *L, StkId ra, const TValue *rb) { |
| 681 | const TValue *tm; | 681 | const TValue *tm; |
| 682 | switch (ttypetag(rb)) { | 682 | switch (ttypetag(rb)) { |
| 683 | case LUA_TTABLE: { | 683 | case LUA_VTABLE: { |
| 684 | Table *h = hvalue(rb); | 684 | Table *h = hvalue(rb); |
| 685 | tm = fasttm(L, h->metatable, TM_LEN); | 685 | tm = fasttm(L, h->metatable, TM_LEN); |
| 686 | if (tm) break; /* metamethod? break switch to call it */ | 686 | if (tm) break; /* metamethod? break switch to call it */ |
| 687 | setivalue(s2v(ra), luaH_getn(h)); /* else primitive len */ | 687 | setivalue(s2v(ra), luaH_getn(h)); /* else primitive len */ |
| 688 | return; | 688 | return; |
| 689 | } | 689 | } |
| 690 | case LUA_TSHRSTR: { | 690 | case LUA_VSHRSTR: { |
| 691 | setivalue(s2v(ra), tsvalue(rb)->shrlen); | 691 | setivalue(s2v(ra), tsvalue(rb)->shrlen); |
| 692 | return; | 692 | return; |
| 693 | } | 693 | } |
| 694 | case LUA_TLNGSTR: { | 694 | case LUA_VLNGSTR: { |
| 695 | setivalue(s2v(ra), tsvalue(rb)->u.lnglen); | 695 | setivalue(s2v(ra), tsvalue(rb)->u.lnglen); |
| 696 | return; | 696 | return; |
| 697 | } | 697 | } |
