MCPcopy Create free account
hub / github.com/EmmyLua/EmmyLuaDebugger / propagatemark

Function propagatemark

third-party/lua-5.2.4/src/lgc.c:521–563  ·  view source on GitHub ↗

** traverse one gray object, turning it to black (except for threads, ** which are always gray). */

Source from the content-addressed store, hash-verified

519** which are always gray).
520*/
521static void propagatemark (global_State *g) {
522 lu_mem size;
523 GCObject *o = g->gray;
524 lua_assert(isgray(o));
525 gray2black(o);
526 switch (gch(o)->tt) {
527 case LUA_TTABLE: {
528 Table *h = gco2t(o);
529 g->gray = h->gclist; /* remove from 'gray' list */
530 size = traversetable(g, h);
531 break;
532 }
533 case LUA_TLCL: {
534 LClosure *cl = gco2lcl(o);
535 g->gray = cl->gclist; /* remove from 'gray' list */
536 size = traverseLclosure(g, cl);
537 break;
538 }
539 case LUA_TCCL: {
540 CClosure *cl = gco2ccl(o);
541 g->gray = cl->gclist; /* remove from 'gray' list */
542 size = traverseCclosure(g, cl);
543 break;
544 }
545 case LUA_TTHREAD: {
546 lua_State *th = gco2th(o);
547 g->gray = th->gclist; /* remove from 'gray' list */
548 th->gclist = g->grayagain;
549 g->grayagain = o; /* insert into 'grayagain' list */
550 black2gray(o);
551 size = traversestack(g, th);
552 break;
553 }
554 case LUA_TPROTO: {
555 Proto *p = gco2p(o);
556 g->gray = p->gclist; /* remove from 'gray' list */
557 size = traverseproto(g, p);
558 break;
559 }
560 default: lua_assert(0); return;
561 }
562 g->GCmemtrav += size;
563}
564
565
566static void propagateall (global_State *g) {

Callers 2

propagateallFunction · 0.70
singlestepFunction · 0.70

Calls 5

traversetableFunction · 0.70
traverseLclosureFunction · 0.70
traverseCclosureFunction · 0.70
traversestackFunction · 0.70
traverseprotoFunction · 0.70

Tested by

no test coverage detected