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 | } |