** traverse one gray object, turning it to black. Return an estimate ** of the number of slots traversed. */
| 725 | ** of the number of slots traversed. |
| 726 | */ |
| 727 | static l_mem propagatemark (global_State *g) { |
| 728 | GCObject *o = g->gray; |
| 729 | nw2black(o); |
| 730 | g->gray = *getgclist(o); /* remove from 'gray' list */ |
| 731 | switch (o->tt) { |
| 732 | case LUA_VTABLE: return traversetable(g, gco2t(o)); |
| 733 | case LUA_VUSERDATA: return traverseudata(g, gco2u(o)); |
| 734 | case LUA_VLCL: return traverseLclosure(g, gco2lcl(o)); |
| 735 | case LUA_VCCL: return traverseCclosure(g, gco2ccl(o)); |
| 736 | case LUA_VPROTO: return traverseproto(g, gco2p(o)); |
| 737 | case LUA_VTHREAD: return traversethread(g, gco2th(o)); |
| 738 | default: lua_assert(0); return 0; |
| 739 | } |
| 740 | } |
| 741 | |
| 742 | |
| 743 | static void propagateall (global_State *g) { |
no test coverage detected