| 2581 | |
| 2582 | |
| 2583 | LUA_API int lua_setfenv (lua_State *L, int idx) { |
| 2584 | StkId o; |
| 2585 | int res = 1; |
| 2586 | lua_lock(L); |
| 2587 | api_checknelems(L, 1); |
| 2588 | o = index2adr(L, idx); |
| 2589 | api_checkvalidindex(L, o); |
| 2590 | api_check(L, ttistable(L->top - 1)); |
| 2591 | switch (ttype(o)) { |
| 2592 | case LUA_TFUNCTION: |
| 2593 | clvalue(o)->c.env = hvalue(L->top - 1); |
| 2594 | break; |
| 2595 | case LUA_TUSERDATA: |
| 2596 | uvalue(o)->env = hvalue(L->top - 1); |
| 2597 | break; |
| 2598 | case LUA_TTHREAD: |
| 2599 | sethvalue(L, gt(thvalue(o)), hvalue(L->top - 1)); |
| 2600 | break; |
| 2601 | default: |
| 2602 | res = 0; |
| 2603 | break; |
| 2604 | } |
| 2605 | if (res) luaC_objbarrier(L, gcvalue(o), hvalue(L->top - 1)); |
| 2606 | L->top--; |
| 2607 | lua_unlock(L); |
| 2608 | return res; |
| 2609 | } |
| 2610 | |
| 2611 | |
| 2612 | /* |
no test coverage detected