Lines Matching refs:o
52 #define markvalue(g,o) { checkconsistency(o); \ argument
53 if (iscollectable(o) && iswhite(gcvalue(o))) reallymarkobject(g,gcvalue(o)); }
69 static void reallymarkobject (global_State *g, GCObject *o) { in reallymarkobject() argument
70 lua_assert(iswhite(o) && !isdead(g, o)); in reallymarkobject()
71 white2gray(o); in reallymarkobject()
72 switch (o->gch.tt) { in reallymarkobject()
77 Table *mt = gco2u(o)->metatable; in reallymarkobject()
78 gray2black(o); /* udata are never gray */ in reallymarkobject()
80 markobject(g, gco2u(o)->env); in reallymarkobject()
84 UpVal *uv = gco2uv(o); in reallymarkobject()
87 gray2black(o); /* open upvalues are never black */ in reallymarkobject()
91 gco2cl(o)->c.gclist = g->gray; in reallymarkobject()
92 g->gray = o; in reallymarkobject()
96 gco2h(o)->gclist = g->gray; in reallymarkobject()
97 g->gray = o; in reallymarkobject()
101 gco2th(o)->gclist = g->gray; in reallymarkobject()
102 g->gray = o; in reallymarkobject()
106 gco2p(o)->gclist = g->gray; in reallymarkobject()
107 g->gray = o; in reallymarkobject()
257 StkId o, lim; in traversestack() local
265 for (o = l->stack; o < l->top; o++) in traversestack()
266 markvalue(g, o); in traversestack()
267 for (; o <= lim; o++) in traversestack()
268 setnilvalue(o); in traversestack()
278 GCObject *o = g->gray; in propagatemark() local
279 lua_assert(isgray(o)); in propagatemark()
280 gray2black(o); in propagatemark()
281 switch (o->gch.tt) { in propagatemark()
283 Table *h = gco2h(o); in propagatemark()
286 black2gray(o); /* keep it gray */ in propagatemark()
291 Closure *cl = gco2cl(o); in propagatemark()
298 lua_State *th = gco2th(o); in propagatemark()
301 g->grayagain = o; in propagatemark()
302 black2gray(o); in propagatemark()
308 Proto *p = gco2p(o); in propagatemark()
337 static int iscleared (const TValue *o, int iskey) { in iscleared() argument
338 if (!iscollectable(o)) return 0; in iscleared()
339 if (ttisstring(o)) { in iscleared()
340 stringmark(rawtsvalue(o)); /* strings are `values', so are never weak */ in iscleared()
343 return iswhite(gcvalue(o)) || in iscleared()
344 (ttisuserdata(o) && (!iskey && isfinalized(uvalue(o)))); in iscleared()
359 TValue *o = &h->array[i]; in cleartable() local
360 if (iscleared(o, 0)) /* value was collected? */ in cleartable()
361 setnilvalue(o); /* remove value */ in cleartable()
378 static void freeobj (lua_State *L, GCObject *o) { in freeobj() argument
379 switch (o->gch.tt) { in freeobj()
380 case LUA_TPROTO: luaF_freeproto(L, gco2p(o)); break; in freeobj()
381 case LUA_TFUNCTION: luaF_freeclosure(L, gco2cl(o)); break; in freeobj()
382 case LUA_TUPVAL: luaF_freeupval(L, gco2uv(o)); break; in freeobj()
383 case LUA_TTABLE: luaH_free(L, gco2h(o)); break; in freeobj()
385 lua_assert(gco2th(o) != L && gco2th(o) != G(L)->mainthread); in freeobj()
386 luaE_freethread(L, gco2th(o)); in freeobj()
391 luaM_freemem(L, o, sizestring(gco2ts(o))); in freeobj()
395 luaM_freemem(L, o, sizeudata(gco2u(o))); in freeobj()
447 GCObject *o = g->tmudata->gch.next; /* get first element */ in GCTM() local
448 Udata *udata = rawgco2u(o); in GCTM()
451 if (o == g->tmudata) /* last element? */ in GCTM()
456 g->mainthread->next = o; in GCTM()
457 makewhite(g, o); in GCTM()
661 void luaC_barrierf (lua_State *L, GCObject *o, GCObject *v) { in luaC_barrierf() argument
663 lua_assert(isblack(o) && iswhite(v) && !isdead(g, v) && !isdead(g, o)); in luaC_barrierf()
665 lua_assert(ttype(&o->gch) != LUA_TTABLE); in luaC_barrierf()
670 makewhite(g, o); /* mark as white just to avoid other barriers */ in luaC_barrierf()
676 GCObject *o = obj2gco(t); in luaC_barrierback() local
677 lua_assert(isblack(o) && !isdead(g, o)); in luaC_barrierback()
679 black2gray(o); /* make table gray (again) */ in luaC_barrierback()
681 g->grayagain = o; in luaC_barrierback()
685 void luaC_link (lua_State *L, GCObject *o, lu_byte tt) { in luaC_link() argument
687 o->gch.next = g->rootgc; in luaC_link()
688 g->rootgc = o; in luaC_link()
689 o->gch.marked = luaC_white(g); in luaC_link()
690 o->gch.tt = tt; in luaC_link()
696 GCObject *o = obj2gco(uv); in luaC_linkupval() local
697 o->gch.next = g->rootgc; /* link upvalue into `rootgc' list */ in luaC_linkupval()
698 g->rootgc = o; in luaC_linkupval()
699 if (isgray(o)) { in luaC_linkupval()
701 gray2black(o); /* closed upvalues need barrier */ in luaC_linkupval()
705 makewhite(g, o); in luaC_linkupval()