1 /* 2 ** $Id: lobject.h $ 3 ** Type definitions for Lua objects 4 ** See Copyright Notice in lua.h 5 */ 6 7 8 #ifndef lobject_h 9 #define lobject_h 10 11 12 #include <stdarg.h> 13 14 15 #include "llimits.h" 16 #include "lua.h" 17 18 19 /* 20 ** Extra types for collectable non-values 21 */ 22 #define LUA_TUPVAL LUA_NUMTYPES /* upvalues */ 23 #define LUA_TPROTO (LUA_NUMTYPES+1) /* function prototypes */ 24 #define LUA_TDEADKEY (LUA_NUMTYPES+2) /* removed keys in tables */ 25 26 27 28 /* 29 ** number of all possible types (including LUA_TNONE but excluding DEADKEY) 30 */ 31 #define LUA_TOTALTYPES (LUA_TPROTO + 2) 32 33 34 /* 35 ** tags for Tagged Values have the following use of bits: 36 ** bits 0-3: actual tag (a LUA_T* constant) 37 ** bits 4-5: variant bits 38 ** bit 6: whether value is collectable 39 */ 40 41 /* add variant bits to a type */ 42 #define makevariant(t,v) ((t) | ((v) << 4)) 43 44 45 46 /* 47 ** Union of all Lua values 48 */ 49 typedef union Value { 50 struct GCObject *gc; /* collectable objects */ 51 void *p; /* light userdata */ 52 lua_CFunction f; /* light C functions */ 53 lua_Integer i; /* integer numbers */ 54 lua_Number n; /* float numbers */ 55 } Value; 56 57 58 /* 59 ** Tagged Values. This is the basic representation of values in Lua: 60 ** an actual value plus a tag with its type. 61 */ 62 63 #define TValuefields Value value_; lu_byte tt_ 64 65 typedef struct TValue { 66 TValuefields; 67 } TValue; 68 69 70 #define val_(o) ((o)->value_) 71 #define valraw(o) (val_(o)) 72 73 74 /* raw type tag of a TValue */ 75 #define rawtt(o) ((o)->tt_) 76 77 /* tag with no variants (bits 0-3) */ 78 #define novariant(t) ((t) & 0x0F) 79 80 /* type tag of a TValue (bits 0-3 for tags + variant bits 4-5) */ 81 #define withvariant(t) ((t) & 0x3F) 82 #define ttypetag(o) withvariant(rawtt(o)) 83 84 /* type of a TValue */ 85 #define ttype(o) (novariant(rawtt(o))) 86 87 88 /* Macros to test type */ 89 #define checktag(o,t) (rawtt(o) == (t)) 90 #define checktype(o,t) (ttype(o) == (t)) 91 92 93 /* Macros for internal tests */ 94 95 /* collectable object has the same tag as the original value */ 96 #define righttt(obj) (ttypetag(obj) == gcvalue(obj)->tt) 97 98 /* 99 ** Any value being manipulated by the program either is non 100 ** collectable, or the collectable object has the right tag 101 ** and it is not dead. The option 'L == NULL' allows other 102 ** macros using this one to be used where L is not available. 103 */ 104 #define checkliveness(L,obj) \ 105 ((void)L, lua_longassert(!iscollectable(obj) || \ 106 (righttt(obj) && (L == NULL || !isdead(G(L),gcvalue(obj)))))) 107 108 109 /* Macros to set values */ 110 111 /* set a value's tag */ 112 #define settt_(o,t) ((o)->tt_=(t)) 113 114 115 /* main macro to copy values (from 'obj2' to 'obj1') */ 116 #define setobj(L,obj1,obj2) \ 117 { TValue *io1=(obj1); const TValue *io2=(obj2); \ 118 io1->value_ = io2->value_; settt_(io1, io2->tt_); \ 119 checkliveness(L,io1); lua_assert(!isnonstrictnil(io1)); } 120 121 /* 122 ** Different types of assignments, according to source and destination. 123 ** (They are mostly equal now, but may be different in the future.) 124 */ 125 126 /* from stack to stack */ 127 #define setobjs2s(L,o1,o2) setobj(L,s2v(o1),s2v(o2)) 128 /* to stack (not from same stack) */ 129 #define setobj2s(L,o1,o2) setobj(L,s2v(o1),o2) 130 /* from table to same table */ 131 #define setobjt2t setobj 132 /* to new object */ 133 #define setobj2n setobj 134 /* to table */ 135 #define setobj2t setobj 136 137 138 /* 139 ** Entries in a Lua stack. Field 'tbclist' forms a list of all 140 ** to-be-closed variables active in this stack. Dummy entries are 141 ** used when the distance between two tbc variables does not fit 142 ** in an unsigned short. They are represented by delta==0, and 143 ** their real delta is always the maximum value that fits in 144 ** that field. 145 */ 146 typedef union StackValue { 147 TValue val; 148 struct { 149 TValuefields; 150 unsigned short delta; 151 } tbclist; 152 } StackValue; 153 154 155 /* index to stack elements */ 156 typedef StackValue *StkId; 157 158 /* convert a 'StackValue' to a 'TValue' */ 159 #define s2v(o) (&(o)->val) 160 161 162 163 /* 164 ** {================================================================== 165 ** Nil 166 ** =================================================================== 167 */ 168 169 /* Standard nil */ 170 #define LUA_VNIL makevariant(LUA_TNIL, 0) 171 172 /* Empty slot (which might be different from a slot containing nil) */ 173 #define LUA_VEMPTY makevariant(LUA_TNIL, 1) 174 175 /* Value returned for a key not found in a table (absent key) */ 176 #define LUA_VABSTKEY makevariant(LUA_TNIL, 2) 177 178 179 /* macro to test for (any kind of) nil */ 180 #define ttisnil(v) checktype((v), LUA_TNIL) 181 182 183 /* macro to test for a standard nil */ 184 #define ttisstrictnil(o) checktag((o), LUA_VNIL) 185 186 187 #define setnilvalue(obj) settt_(obj, LUA_VNIL) 188 189 190 #define isabstkey(v) checktag((v), LUA_VABSTKEY) 191 192 193 /* 194 ** macro to detect non-standard nils (used only in assertions) 195 */ 196 #define isnonstrictnil(v) (ttisnil(v) && !ttisstrictnil(v)) 197 198 199 /* 200 ** By default, entries with any kind of nil are considered empty. 201 ** (In any definition, values associated with absent keys must also 202 ** be accepted as empty.) 203 */ 204 #define isempty(v) ttisnil(v) 205 206 207 /* macro defining a value corresponding to an absent key */ 208 #define ABSTKEYCONSTANT {NULL}, LUA_VABSTKEY 209 210 211 /* mark an entry as empty */ 212 #define setempty(v) settt_(v, LUA_VEMPTY) 213 214 215 216 /* }================================================================== */ 217 218 219 /* 220 ** {================================================================== 221 ** Booleans 222 ** =================================================================== 223 */ 224 225 226 #define LUA_VFALSE makevariant(LUA_TBOOLEAN, 0) 227 #define LUA_VTRUE makevariant(LUA_TBOOLEAN, 1) 228 229 #define ttisboolean(o) checktype((o), LUA_TBOOLEAN) 230 #define ttisfalse(o) checktag((o), LUA_VFALSE) 231 #define ttistrue(o) checktag((o), LUA_VTRUE) 232 233 234 #define l_isfalse(o) (ttisfalse(o) || ttisnil(o)) 235 236 237 #define setbfvalue(obj) settt_(obj, LUA_VFALSE) 238 #define setbtvalue(obj) settt_(obj, LUA_VTRUE) 239 240 /* }================================================================== */ 241 242 243 /* 244 ** {================================================================== 245 ** Threads 246 ** =================================================================== 247 */ 248 249 #define LUA_VTHREAD makevariant(LUA_TTHREAD, 0) 250 251 #define ttisthread(o) checktag((o), ctb(LUA_VTHREAD)) 252 253 #define thvalue(o) check_exp(ttisthread(o), gco2th(val_(o).gc)) 254 255 #define setthvalue(L,obj,x) \ 256 { TValue *io = (obj); lua_State *x_ = (x); \ 257 val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_VTHREAD)); \ 258 checkliveness(L,io); } 259 260 #define setthvalue2s(L,o,t) setthvalue(L,s2v(o),t) 261 262 /* }================================================================== */ 263 264 265 /* 266 ** {================================================================== 267 ** Collectable Objects 268 ** =================================================================== 269 */ 270 271 /* 272 ** Common Header for all collectable objects (in macro form, to be 273 ** included in other objects) 274 */ 275 #define CommonHeader struct GCObject *next; lu_byte tt; lu_byte marked 276 277 278 /* Common type for all collectable objects */ 279 typedef struct GCObject { 280 CommonHeader; 281 } GCObject; 282 283 284 /* Bit mark for collectable types */ 285 #define BIT_ISCOLLECTABLE (1 << 6) 286 287 #define iscollectable(o) (rawtt(o) & BIT_ISCOLLECTABLE) 288 289 /* mark a tag as collectable */ 290 #define ctb(t) ((t) | BIT_ISCOLLECTABLE) 291 292 #define gcvalue(o) check_exp(iscollectable(o), val_(o).gc) 293 294 #define gcvalueraw(v) ((v).gc) 295 296 #define setgcovalue(L,obj,x) \ 297 { TValue *io = (obj); GCObject *i_g=(x); \ 298 val_(io).gc = i_g; settt_(io, ctb(i_g->tt)); } 299 300 /* }================================================================== */ 301 302 303 /* 304 ** {================================================================== 305 ** Numbers 306 ** =================================================================== 307 */ 308 309 /* Variant tags for numbers */ 310 #define LUA_VNUMINT makevariant(LUA_TNUMBER, 0) /* integer numbers */ 311 #define LUA_VNUMFLT makevariant(LUA_TNUMBER, 1) /* float numbers */ 312 313 #define ttisnumber(o) checktype((o), LUA_TNUMBER) 314 #define ttisfloat(o) checktag((o), LUA_VNUMFLT) 315 #define ttisinteger(o) checktag((o), LUA_VNUMINT) 316 317 #define nvalue(o) check_exp(ttisnumber(o), \ 318 (ttisinteger(o) ? cast_num(ivalue(o)) : fltvalue(o))) 319 #define fltvalue(o) check_exp(ttisfloat(o), val_(o).n) 320 #define ivalue(o) check_exp(ttisinteger(o), val_(o).i) 321 322 #define fltvalueraw(v) ((v).n) 323 #define ivalueraw(v) ((v).i) 324 325 #define setfltvalue(obj,x) \ 326 { TValue *io=(obj); val_(io).n=(x); settt_(io, LUA_VNUMFLT); } 327 328 #define chgfltvalue(obj,x) \ 329 { TValue *io=(obj); lua_assert(ttisfloat(io)); val_(io).n=(x); } 330 331 #define setivalue(obj,x) \ 332 { TValue *io=(obj); val_(io).i=(x); settt_(io, LUA_VNUMINT); } 333 334 #define chgivalue(obj,x) \ 335 { TValue *io=(obj); lua_assert(ttisinteger(io)); val_(io).i=(x); } 336 337 /* }================================================================== */ 338 339 340 /* 341 ** {================================================================== 342 ** Strings 343 ** =================================================================== 344 */ 345 346 /* Variant tags for strings */ 347 #define LUA_VSHRSTR makevariant(LUA_TSTRING, 0) /* short strings */ 348 #define LUA_VLNGSTR makevariant(LUA_TSTRING, 1) /* long strings */ 349 350 #define ttisstring(o) checktype((o), LUA_TSTRING) 351 #define ttisshrstring(o) checktag((o), ctb(LUA_VSHRSTR)) 352 #define ttislngstring(o) checktag((o), ctb(LUA_VLNGSTR)) 353 354 #define tsvalueraw(v) (gco2ts((v).gc)) 355 356 #define tsvalue(o) check_exp(ttisstring(o), gco2ts(val_(o).gc)) 357 358 #define setsvalue(L,obj,x) \ 359 { TValue *io = (obj); TString *x_ = (x); \ 360 val_(io).gc = obj2gco(x_); settt_(io, ctb(x_->tt)); \ 361 checkliveness(L,io); } 362 363 /* set a string to the stack */ 364 #define setsvalue2s(L,o,s) setsvalue(L,s2v(o),s) 365 366 /* set a string to a new object */ 367 #define setsvalue2n setsvalue 368 369 370 /* 371 ** Header for a string value. 372 */ 373 typedef struct TString { 374 CommonHeader; 375 lu_byte extra; /* reserved words for short strings; "has hash" for longs */ 376 lu_byte shrlen; /* length for short strings */ 377 unsigned int hash; 378 union { 379 size_t lnglen; /* length for long strings */ 380 struct TString *hnext; /* linked list for hash table */ 381 } u; 382 char contents[1]; 383 } TString; 384 385 386 387 /* 388 ** Get the actual string (array of bytes) from a 'TString'. 389 */ 390 #define getstr(ts) ((ts)->contents) 391 392 393 /* get the actual string (array of bytes) from a Lua value */ 394 #define svalue(o) getstr(tsvalue(o)) 395 396 /* get string length from 'TString *s' */ 397 #define tsslen(s) ((s)->tt == LUA_VSHRSTR ? (s)->shrlen : (s)->u.lnglen) 398 399 /* get string length from 'TValue *o' */ 400 #define vslen(o) tsslen(tsvalue(o)) 401 402 /* }================================================================== */ 403 404 405 /* 406 ** {================================================================== 407 ** Userdata 408 ** =================================================================== 409 */ 410 411 412 /* 413 ** Light userdata should be a variant of userdata, but for compatibility 414 ** reasons they are also different types. 415 */ 416 #define LUA_VLIGHTUSERDATA makevariant(LUA_TLIGHTUSERDATA, 0) 417 418 #define LUA_VUSERDATA makevariant(LUA_TUSERDATA, 0) 419 420 #define ttislightuserdata(o) checktag((o), LUA_VLIGHTUSERDATA) 421 #define ttisfulluserdata(o) checktag((o), ctb(LUA_VUSERDATA)) 422 423 #define pvalue(o) check_exp(ttislightuserdata(o), val_(o).p) 424 #define uvalue(o) check_exp(ttisfulluserdata(o), gco2u(val_(o).gc)) 425 426 #define pvalueraw(v) ((v).p) 427 428 #define setpvalue(obj,x) \ 429 { TValue *io=(obj); val_(io).p=(x); settt_(io, LUA_VLIGHTUSERDATA); } 430 431 #define setuvalue(L,obj,x) \ 432 { TValue *io = (obj); Udata *x_ = (x); \ 433 val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_VUSERDATA)); \ 434 checkliveness(L,io); } 435 436 437 /* Ensures that addresses after this type are always fully aligned. */ 438 typedef union UValue { 439 TValue uv; 440 LUAI_MAXALIGN; /* ensures maximum alignment for udata bytes */ 441 } UValue; 442 443 444 /* 445 ** Header for userdata with user values; 446 ** memory area follows the end of this structure. 447 */ 448 typedef struct Udata { 449 CommonHeader; 450 unsigned short nuvalue; /* number of user values */ 451 size_t len; /* number of bytes */ 452 struct Table *metatable; 453 GCObject *gclist; 454 UValue uv[1]; /* user values */ 455 } Udata; 456 457 458 /* 459 ** Header for userdata with no user values. These userdata do not need 460 ** to be gray during GC, and therefore do not need a 'gclist' field. 461 ** To simplify, the code always use 'Udata' for both kinds of userdata, 462 ** making sure it never accesses 'gclist' on userdata with no user values. 463 ** This structure here is used only to compute the correct size for 464 ** this representation. (The 'bindata' field in its end ensures correct 465 ** alignment for binary data following this header.) 466 */ 467 typedef struct Udata0 { 468 CommonHeader; 469 unsigned short nuvalue; /* number of user values */ 470 size_t len; /* number of bytes */ 471 struct Table *metatable; 472 union {LUAI_MAXALIGN;} bindata; 473 } Udata0; 474 475 476 /* compute the offset of the memory area of a userdata */ 477 #define udatamemoffset(nuv) \ 478 ((nuv) == 0 ? offsetof(Udata0, bindata) \ 479 : offsetof(Udata, uv) + (sizeof(UValue) * (nuv))) 480 481 /* get the address of the memory block inside 'Udata' */ 482 #define getudatamem(u) (cast_charp(u) + udatamemoffset((u)->nuvalue)) 483 484 /* compute the size of a userdata */ 485 #define sizeudata(nuv,nb) (udatamemoffset(nuv) + (nb)) 486 487 /* }================================================================== */ 488 489 490 /* 491 ** {================================================================== 492 ** Prototypes 493 ** =================================================================== 494 */ 495 496 #define LUA_VPROTO makevariant(LUA_TPROTO, 0) 497 498 499 /* 500 ** Description of an upvalue for function prototypes 501 */ 502 typedef struct Upvaldesc { 503 TString *name; /* upvalue name (for debug information) */ 504 lu_byte instack; /* whether it is in stack (register) */ 505 lu_byte idx; /* index of upvalue (in stack or in outer function's list) */ 506 lu_byte kind; /* kind of corresponding variable */ 507 } Upvaldesc; 508 509 510 /* 511 ** Description of a local variable for function prototypes 512 ** (used for debug information) 513 */ 514 typedef struct LocVar { 515 TString *varname; 516 int startpc; /* first point where variable is active */ 517 int endpc; /* first point where variable is dead */ 518 } LocVar; 519 520 521 /* 522 ** Associates the absolute line source for a given instruction ('pc'). 523 ** The array 'lineinfo' gives, for each instruction, the difference in 524 ** lines from the previous instruction. When that difference does not 525 ** fit into a byte, Lua saves the absolute line for that instruction. 526 ** (Lua also saves the absolute line periodically, to speed up the 527 ** computation of a line number: we can use binary search in the 528 ** absolute-line array, but we must traverse the 'lineinfo' array 529 ** linearly to compute a line.) 530 */ 531 typedef struct AbsLineInfo { 532 int pc; 533 int line; 534 } AbsLineInfo; 535 536 /* 537 ** Function Prototypes 538 */ 539 typedef struct Proto { 540 CommonHeader; 541 lu_byte numparams; /* number of fixed (named) parameters */ 542 lu_byte is_vararg; 543 lu_byte maxstacksize; /* number of registers needed by this function */ 544 int sizeupvalues; /* size of 'upvalues' */ 545 int sizek; /* size of 'k' */ 546 int sizecode; 547 int sizelineinfo; 548 int sizep; /* size of 'p' */ 549 int sizelocvars; 550 int sizeabslineinfo; /* size of 'abslineinfo' */ 551 int linedefined; /* debug information */ 552 int lastlinedefined; /* debug information */ 553 TValue *k; /* constants used by the function */ 554 Instruction *code; /* opcodes */ 555 struct Proto **p; /* functions defined inside the function */ 556 Upvaldesc *upvalues; /* upvalue information */ 557 ls_byte *lineinfo; /* information about source lines (debug information) */ 558 AbsLineInfo *abslineinfo; /* idem */ 559 LocVar *locvars; /* information about local variables (debug information) */ 560 TString *source; /* used for debug information */ 561 GCObject *gclist; 562 } Proto; 563 564 /* }================================================================== */ 565 566 567 /* 568 ** {================================================================== 569 ** Functions 570 ** =================================================================== 571 */ 572 573 #define LUA_VUPVAL makevariant(LUA_TUPVAL, 0) 574 575 576 /* Variant tags for functions */ 577 #define LUA_VLCL makevariant(LUA_TFUNCTION, 0) /* Lua closure */ 578 #define LUA_VLCF makevariant(LUA_TFUNCTION, 1) /* light C function */ 579 #define LUA_VCCL makevariant(LUA_TFUNCTION, 2) /* C closure */ 580 581 #define ttisfunction(o) checktype(o, LUA_TFUNCTION) 582 #define ttisLclosure(o) checktag((o), ctb(LUA_VLCL)) 583 #define ttislcf(o) checktag((o), LUA_VLCF) 584 #define ttisCclosure(o) checktag((o), ctb(LUA_VCCL)) 585 #define ttisclosure(o) (ttisLclosure(o) || ttisCclosure(o)) 586 587 588 #define isLfunction(o) ttisLclosure(o) 589 590 #define clvalue(o) check_exp(ttisclosure(o), gco2cl(val_(o).gc)) 591 #define clLvalue(o) check_exp(ttisLclosure(o), gco2lcl(val_(o).gc)) 592 #define fvalue(o) check_exp(ttislcf(o), val_(o).f) 593 #define clCvalue(o) check_exp(ttisCclosure(o), gco2ccl(val_(o).gc)) 594 595 #define fvalueraw(v) ((v).f) 596 597 #define setclLvalue(L,obj,x) \ 598 { TValue *io = (obj); LClosure *x_ = (x); \ 599 val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_VLCL)); \ 600 checkliveness(L,io); } 601 602 #define setclLvalue2s(L,o,cl) setclLvalue(L,s2v(o),cl) 603 604 #define setfvalue(obj,x) \ 605 { TValue *io=(obj); val_(io).f=(x); settt_(io, LUA_VLCF); } 606 607 #define setclCvalue(L,obj,x) \ 608 { TValue *io = (obj); CClosure *x_ = (x); \ 609 val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_VCCL)); \ 610 checkliveness(L,io); } 611 612 613 /* 614 ** Upvalues for Lua closures 615 */ 616 typedef struct UpVal { 617 CommonHeader; 618 lu_byte tbc; /* true if it represents a to-be-closed variable */ 619 TValue *v; /* points to stack or to its own value */ 620 union { 621 struct { /* (when open) */ 622 struct UpVal *next; /* linked list */ 623 struct UpVal **previous; 624 } open; 625 TValue value; /* the value (when closed) */ 626 } u; 627 } UpVal; 628 629 630 631 #define ClosureHeader \ 632 CommonHeader; lu_byte nupvalues; GCObject *gclist 633 634 typedef struct CClosure { 635 ClosureHeader; 636 lua_CFunction f; 637 TValue upvalue[1]; /* list of upvalues */ 638 } CClosure; 639 640 641 typedef struct LClosure { 642 ClosureHeader; 643 struct Proto *p; 644 UpVal *upvals[1]; /* list of upvalues */ 645 } LClosure; 646 647 648 typedef union Closure { 649 CClosure c; 650 LClosure l; 651 } Closure; 652 653 654 #define getproto(o) (clLvalue(o)->p) 655 656 /* }================================================================== */ 657 658 659 /* 660 ** {================================================================== 661 ** Tables 662 ** =================================================================== 663 */ 664 665 #define LUA_VTABLE makevariant(LUA_TTABLE, 0) 666 667 #define ttistable(o) checktag((o), ctb(LUA_VTABLE)) 668 669 #define hvalue(o) check_exp(ttistable(o), gco2t(val_(o).gc)) 670 671 #define sethvalue(L,obj,x) \ 672 { TValue *io = (obj); Table *x_ = (x); \ 673 val_(io).gc = obj2gco(x_); settt_(io, ctb(LUA_VTABLE)); \ 674 checkliveness(L,io); } 675 676 #define sethvalue2s(L,o,h) sethvalue(L,s2v(o),h) 677 678 679 /* 680 ** Nodes for Hash tables: A pack of two TValue's (key-value pairs) 681 ** plus a 'next' field to link colliding entries. The distribution 682 ** of the key's fields ('key_tt' and 'key_val') not forming a proper 683 ** 'TValue' allows for a smaller size for 'Node' both in 4-byte 684 ** and 8-byte alignments. 685 */ 686 typedef union Node { 687 struct NodeKey { 688 TValuefields; /* fields for value */ 689 lu_byte key_tt; /* key type */ 690 int next; /* for chaining */ 691 Value key_val; /* key value */ 692 } u; 693 TValue i_val; /* direct access to node's value as a proper 'TValue' */ 694 } Node; 695 696 697 /* copy a value into a key */ 698 #define setnodekey(L,node,obj) \ 699 { Node *n_=(node); const TValue *io_=(obj); \ 700 n_->u.key_val = io_->value_; n_->u.key_tt = io_->tt_; \ 701 checkliveness(L,io_); } 702 703 704 /* copy a value from a key */ 705 #define getnodekey(L,obj,node) \ 706 { TValue *io_=(obj); const Node *n_=(node); \ 707 io_->value_ = n_->u.key_val; io_->tt_ = n_->u.key_tt; \ 708 checkliveness(L,io_); } 709 710 711 /* 712 ** About 'alimit': if 'isrealasize(t)' is true, then 'alimit' is the 713 ** real size of 'array'. Otherwise, the real size of 'array' is the 714 ** smallest power of two not smaller than 'alimit' (or zero iff 'alimit' 715 ** is zero); 'alimit' is then used as a hint for #t. 716 */ 717 718 #define BITRAS (1 << 7) 719 #define isrealasize(t) (!((t)->flags & BITRAS)) 720 #define setrealasize(t) ((t)->flags &= cast_byte(~BITRAS)) 721 #define setnorealasize(t) ((t)->flags |= BITRAS) 722 723 724 typedef struct Table { 725 CommonHeader; 726 lu_byte flags; /* 1<<p means tagmethod(p) is not present */ 727 lu_byte lsizenode; /* log2 of size of 'node' array */ 728 unsigned int alimit; /* "limit" of 'array' array */ 729 TValue *array; /* array part */ 730 Node *node; 731 Node *lastfree; /* any free position is before this position */ 732 struct Table *metatable; 733 GCObject *gclist; 734 } Table; 735 736 737 /* 738 ** Macros to manipulate keys inserted in nodes 739 */ 740 #define keytt(node) ((node)->u.key_tt) 741 #define keyval(node) ((node)->u.key_val) 742 743 #define keyisnil(node) (keytt(node) == LUA_TNIL) 744 #define keyisinteger(node) (keytt(node) == LUA_VNUMINT) 745 #define keyival(node) (keyval(node).i) 746 #define keyisshrstr(node) (keytt(node) == ctb(LUA_VSHRSTR)) 747 #define keystrval(node) (gco2ts(keyval(node).gc)) 748 749 #define setnilkey(node) (keytt(node) = LUA_TNIL) 750 751 #define keyiscollectable(n) (keytt(n) & BIT_ISCOLLECTABLE) 752 753 #define gckey(n) (keyval(n).gc) 754 #define gckeyN(n) (keyiscollectable(n) ? gckey(n) : NULL) 755 756 757 /* 758 ** Dead keys in tables have the tag DEADKEY but keep their original 759 ** gcvalue. This distinguishes them from regular keys but allows them to 760 ** be found when searched in a special way. ('next' needs that to find 761 ** keys removed from a table during a traversal.) 762 */ 763 #define setdeadkey(node) (keytt(node) = LUA_TDEADKEY) 764 #define keyisdead(node) (keytt(node) == LUA_TDEADKEY) 765 766 /* }================================================================== */ 767 768 769 770 /* 771 ** 'module' operation for hashing (size is always a power of 2) 772 */ 773 #define lmod(s,size) \ 774 (check_exp((size&(size-1))==0, (cast_int((s) & ((size)-1))))) 775 776 777 #define twoto(x) (1<<(x)) 778 #define sizenode(t) (twoto((t)->lsizenode)) 779 780 781 /* size of buffer for 'luaO_utf8esc' function */ 782 #define UTF8BUFFSZ 8 783 784 LUAI_FUNC int luaO_utf8esc (char *buff, unsigned long x); 785 LUAI_FUNC int luaO_ceillog2 (unsigned int x); 786 LUAI_FUNC int luaO_rawarith (lua_State *L, int op, const TValue *p1, 787 const TValue *p2, TValue *res); 788 LUAI_FUNC void luaO_arith (lua_State *L, int op, const TValue *p1, 789 const TValue *p2, StkId res); 790 LUAI_FUNC size_t luaO_str2num (const char *s, TValue *o); 791 LUAI_FUNC int luaO_hexavalue (int c); 792 LUAI_FUNC void luaO_tostring (lua_State *L, TValue *obj); 793 LUAI_FUNC const char *luaO_pushvfstring (lua_State *L, const char *fmt, 794 va_list argp); 795 LUAI_FUNC const char *luaO_pushfstring (lua_State *L, const char *fmt, ...); 796 LUAI_FUNC void luaO_chunkid (char *out, const char *source, size_t srclen); 797 798 799 #endif 800 801