| 709 | |
| 710 | |
| 711 | static void freeobj (lua_State *L, GCObject *o) { |
| 712 | switch (o->tt) { |
| 713 | case LUA_VPROTO: |
| 714 | luaF_freeproto(L, gco2p(o)); |
| 715 | break; |
| 716 | case LUA_VUPVAL: |
| 717 | freeupval(L, gco2upv(o)); |
| 718 | break; |
| 719 | case LUA_VLCL: |
| 720 | luaM_freemem(L, o, sizeLclosure(gco2lcl(o)->nupvalues)); |
| 721 | break; |
| 722 | case LUA_VCCL: |
| 723 | luaM_freemem(L, o, sizeCclosure(gco2ccl(o)->nupvalues)); |
| 724 | break; |
| 725 | case LUA_VTABLE: |
| 726 | luaH_free(L, gco2t(o)); |
| 727 | break; |
| 728 | case LUA_VTHREAD: |
| 729 | luaE_freethread(L, gco2th(o)); |
| 730 | break; |
| 731 | case LUA_VUSERDATA: { |
| 732 | Udata *u = gco2u(o); |
| 733 | luaM_freemem(L, o, sizeudata(u->nuvalue, u->len)); |
| 734 | break; |
| 735 | } |
| 736 | case LUA_VSHRSTR: |
| 737 | luaS_remove(L, gco2ts(o)); /* remove it from hash table */ |
| 738 | luaM_freemem(L, o, sizelstring(gco2ts(o)->shrlen)); |
| 739 | break; |
| 740 | case LUA_VLNGSTR: |
| 741 | luaM_freemem(L, o, sizelstring(gco2ts(o)->u.lnglen)); |
| 742 | break; |
| 743 | default: lua_assert(0); |
| 744 | } |
| 745 | } |
| 746 | |
| 747 | |
| 748 | /* |
no test coverage detected