GCObject
GCObject **owner) {
GCObject *owner = NULL; /* to avoid warnings */
GCObject *up;
GCObject **pp = &L->openupval;
GCObject *o = obj2gco(p);
GCObject *o = obj2gco(uv);
GCObject *origweak, *origall;
g->GCmemtrav = g->strt.size * sizeof(GCObject*);
GCObject *mt = obj2gco(g->mainthread);
void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v) {
void luaC_barrierback_ (lua_State *L, GCObject *o) {
GCObject *o = obj2gco(uv);
GCObject *luaC_newobj (lua_State *L, int tt, size_t sz, GCObject **list,
GCObject *o = obj2gco(raw + offset);
static void reallymarkobject (global_State *g, GCObject *o) {
GCObject *o;
GCObject *o = g->gray;
static void propagatelist (global_State *g, GCObject *l) {
GCObject *weak = g->weak; /* save original lists */
GCObject *grayagain = g->grayagain;
GCObject *ephemeron = g->ephemeron;
GCObject *w;
GCObject *next = g->ephemeron; /* get ephemeron list */
static void clearkeys (global_State *g, GCObject *l, GCObject *f) {
static void clearvalues (global_State *g, GCObject *l, GCObject *f) {
static void freeobj (lua_State *L, GCObject *o) {
static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count);
static GCObject **sweeplist (lua_State *L, GCObject **p, lu_mem count) {
GCObject *curr = *p;
static GCObject **sweeptolive (lua_State *L, GCObject **p, int *n) {
GCObject ** old = p;
static GCObject *udata2finalize (global_State *g) {
GCObject *o = g->tobefnz; /* get first element */
static void reallymarkobject (global_State *g, GCObject *o);
GCObject **p = &g->finobj;
GCObject *curr;
GCObject **lastnext = &g->tobefnz;
void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt) {
GCObject **p;
LUAI_FUNC GCObject *luaC_newobj (lua_State *L, int tt, size_t sz,
GCObject **list, int offset);
LUAI_FUNC void luaC_barrier_ (lua_State *L, GCObject *o, GCObject *v);
LUAI_FUNC void luaC_barrierback_ (lua_State *L, GCObject *o);
LUAI_FUNC void luaC_checkfinalizer (lua_State *L, GCObject *o, Table *mt);
{ TValue *io=(obj); GCObject *i_g=(x); \
val_(io).gc=cast(GCObject *, x_); settt_(io, ctb(x_->tsv.tt)); \
val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TUSERDATA)); \
val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TTHREAD)); \
val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TLCL)); \
val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TCCL)); \
val_(io).gc=cast(GCObject *, (x)); settt_(io, ctb(LUA_TTABLE)); \
GCObject *gc; /* collectable objects */
GCObject *gclist;
CommonHeader; lu_byte nupvalues; GCObject *gclist
GCObject *gclist;
typedef union GCObject GCObject;
#define CommonHeader GCObject *next; lu_byte tt; lu_byte marked
GCObject *allgc; /* list of all collectable objects */
GCObject *finobj; /* list of collectable objects with finalizers */
GCObject **sweepgc; /* current position of sweep in list 'allgc' */
GCObject **sweepfin; /* current position of sweep in list 'finobj' */
GCObject *gray; /* list of gray objects */
GCObject *grayagain; /* list of objects to be traversed atomically */
GCObject *weak; /* list of tables with weak values */
GCObject *ephemeron; /* list of ephemeron tables (weak keys) */
GCObject *allweak; /* list of all-weak tables */
GCObject *tobefnz; /* list of userdata to be GC */
GCObject *openupval; /* list of open upvalues in this stack */
GCObject *gclist;
#define obj2gco(v) (cast(GCObject *, (v)))
GCObject **hash;
GCObject **list; /* (pointer to) list where it will be inserted */
GCObject *o;
luaM_reallocvector(L, tb->hash, tb->size, newsize, GCObject *);
GCObject *p = tb->hash[i];
GCObject *next = gch(p)->next; /* save next */
luaM_reallocvector(L, tb->hash, tb->size, newsize, GCObject *);
int tag, unsigned int h, GCObject **list) {