| 6069 | |
| 6070 | |
| 6071 | static void reallymarkobject (global_State *g, GCObject *o) { |
| 6072 | lua_assert(iswhite(o) && !isdead(g, o)); |
| 6073 | white2gray(o); |
| 6074 | switch (o->gch.tt) { |
| 6075 | case LUA_TSTRING: { |
| 6076 | return; |
| 6077 | } |
| 6078 | case LUA_TUSERDATA: { |
| 6079 | Table *mt = gco2u(o)->metatable; |
| 6080 | gray2black(o); /* udata are never gray */ |
| 6081 | if (mt) markobject(g, mt); |
| 6082 | markobject(g, gco2u(o)->env); |
| 6083 | return; |
| 6084 | } |
| 6085 | case LUA_TUPVAL: { |
| 6086 | UpVal *uv = gco2uv(o); |
| 6087 | markvalue(g, uv->v); |
| 6088 | if (uv->v == &uv->u.value) /* closed? */ |
| 6089 | gray2black(o); /* open upvalues are never black */ |
| 6090 | return; |
| 6091 | } |
| 6092 | case LUA_TFUNCTION: { |
| 6093 | gco2cl(o)->c.gclist = g->gray; |
| 6094 | g->gray = o; |
| 6095 | break; |
| 6096 | } |
| 6097 | case LUA_TTABLE: { |
| 6098 | gco2h(o)->gclist = g->gray; |
| 6099 | g->gray = o; |
| 6100 | break; |
| 6101 | } |
| 6102 | case LUA_TTHREAD: { |
| 6103 | gco2th(o)->gclist = g->gray; |
| 6104 | g->gray = o; |
| 6105 | break; |
| 6106 | } |
| 6107 | case LUA_TPROTO: { |
| 6108 | gco2p(o)->gclist = g->gray; |
| 6109 | g->gray = o; |
| 6110 | break; |
| 6111 | } |
| 6112 | default: lua_assert(0); |
| 6113 | } |
| 6114 | } |
| 6115 | |
| 6116 | |
| 6117 | static void marktmu (global_State *g) { |
no outgoing calls
no test coverage detected