| 727 | |
| 728 | |
| 729 | LUA_API int lua_setmetatable (lua_State *L, int objindex) { |
| 730 | TValue *obj; |
| 731 | Table *mt; |
| 732 | lua_lock(L); |
| 733 | api_checknelems(L, 1); |
| 734 | obj = index2adr(L, objindex); |
| 735 | api_checkvalidindex(L, obj); |
| 736 | if (ttisnil(L->top - 1)) |
| 737 | mt = NULL; |
| 738 | else { |
| 739 | api_check(L, ttistable(L->top - 1)); |
| 740 | mt = hvalue(L->top - 1); |
| 741 | } |
| 742 | switch (ttype(obj)) { |
| 743 | case LUA_TTABLE: { |
| 744 | hvalue(obj)->metatable = mt; |
| 745 | if (mt) |
| 746 | luaC_objbarriert(L, hvalue(obj), mt); |
| 747 | break; |
| 748 | } |
| 749 | case LUA_TUSERDATA: { |
| 750 | uvalue(obj)->metatable = mt; |
| 751 | if (mt) |
| 752 | luaC_objbarrier(L, rawuvalue(obj), mt); |
| 753 | break; |
| 754 | } |
| 755 | default: { |
| 756 | G(L)->mt[ttype(obj)] = mt; |
| 757 | break; |
| 758 | } |
| 759 | } |
| 760 | L->top--; |
| 761 | lua_unlock(L); |
| 762 | return 1; |
| 763 | } |
| 764 | |
| 765 | |
| 766 | LUA_API int lua_setfenv (lua_State *L, int idx) { |
no test coverage detected