| 732 | |
| 733 | |
| 734 | LUA_API int lua_setfenv (lua_State *L, int idx) { |
| 735 | StkId o; |
| 736 | int res = 1; |
| 737 | lua_lock(L); |
| 738 | api_checknelems(L, 1); |
| 739 | o = index2adr(L, idx); |
| 740 | api_checkvalidindex(L, o); |
| 741 | api_check(L, ttistable(L->top - 1)); |
| 742 | switch (ttype(o)) { |
| 743 | case LUA_TFUNCTION: |
| 744 | clvalue(o)->c.env = hvalue(L->top - 1); |
| 745 | break; |
| 746 | case LUA_TUSERDATA: |
| 747 | uvalue(o)->env = hvalue(L->top - 1); |
| 748 | break; |
| 749 | case LUA_TTHREAD: |
| 750 | sethvalue(L, gt(thvalue(o)), hvalue(L->top - 1)); |
| 751 | break; |
| 752 | default: |
| 753 | res = 0; |
| 754 | break; |
| 755 | } |
| 756 | if (res) luaC_objbarrier(L, gcvalue(o), hvalue(L->top - 1)); |
| 757 | L->top--; |
| 758 | lua_unlock(L); |
| 759 | return res; |
| 760 | } |
| 761 | |
| 762 | |
| 763 | /* |
no test coverage detected