diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2009-10-23 17:12:19 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2009-10-23 17:12:19 -0200 |
| commit | 5bc91c640588ca77b9f84146fc88fcc9bdbfbcd1 (patch) | |
| tree | d5d049ad2357648cabe25c19a8620566e9f27131 /lapi.c | |
| parent | f5073de0a72562e1998f23052715e56a3b9fde18 (diff) | |
| download | lua-5bc91c640588ca77b9f84146fc88fcc9bdbfbcd1.tar.gz lua-5bc91c640588ca77b9f84146fc88fcc9bdbfbcd1.tar.bz2 lua-5bc91c640588ca77b9f84146fc88fcc9bdbfbcd1.zip | |
no more one environment per thread: all threads share a single global
environment
Diffstat (limited to 'lapi.c')
| -rw-r--r-- | lapi.c | 14 |
1 files changed, 4 insertions, 10 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lapi.c,v 2.92 2009/09/28 16:32:50 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 2.93 2009/10/05 16:44:33 roberto Exp roberto $ |
| 3 | ** Lua API | 3 | ** Lua API |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -55,13 +55,13 @@ static TValue *index2addr (lua_State *L, int idx) { | |||
| 55 | return L->top + idx; | 55 | return L->top + idx; |
| 56 | } | 56 | } |
| 57 | else switch (idx) { /* pseudo-indices */ | 57 | else switch (idx) { /* pseudo-indices */ |
| 58 | case LUA_REGISTRYINDEX: return registry(L); | 58 | case LUA_REGISTRYINDEX: return &G(L)->l_registry; |
| 59 | case LUA_ENVIRONINDEX: { | 59 | case LUA_ENVIRONINDEX: { |
| 60 | Closure *func = curr_func(L); | 60 | Closure *func = curr_func(L); |
| 61 | sethvalue(L, &L->env, func->c.env); | 61 | sethvalue(L, &L->env, func->c.env); |
| 62 | return &L->env; | 62 | return &L->env; |
| 63 | } | 63 | } |
| 64 | case LUA_GLOBALSINDEX: return gt(L); | 64 | case LUA_GLOBALSINDEX: return &G(L)->l_gt; |
| 65 | default: { | 65 | default: { |
| 66 | Closure *func = curr_func(L); | 66 | Closure *func = curr_func(L); |
| 67 | idx = LUA_GLOBALSINDEX - idx; | 67 | idx = LUA_GLOBALSINDEX - idx; |
| @@ -76,7 +76,7 @@ static TValue *index2addr (lua_State *L, int idx) { | |||
| 76 | 76 | ||
| 77 | static Table *getcurrenv (lua_State *L) { | 77 | static Table *getcurrenv (lua_State *L) { |
| 78 | if (L->ci->previous == NULL) /* no enclosing function? */ | 78 | if (L->ci->previous == NULL) /* no enclosing function? */ |
| 79 | return hvalue(gt(L)); /* use global table as environment */ | 79 | return hvalue(&G(L)->l_gt); /* use global table as environment */ |
| 80 | else { | 80 | else { |
| 81 | Closure *func = curr_func(L); | 81 | Closure *func = curr_func(L); |
| 82 | return func->c.env; | 82 | return func->c.env; |
| @@ -633,9 +633,6 @@ LUA_API void lua_getfenv (lua_State *L, int idx) { | |||
| 633 | case LUA_TUSERDATA: | 633 | case LUA_TUSERDATA: |
| 634 | sethvalue(L, L->top, uvalue(o)->env); | 634 | sethvalue(L, L->top, uvalue(o)->env); |
| 635 | break; | 635 | break; |
| 636 | case LUA_TTHREAD: | ||
| 637 | setobj2s(L, L->top, gt(thvalue(o))); | ||
| 638 | break; | ||
| 639 | default: | 636 | default: |
| 640 | setnilvalue(L->top); | 637 | setnilvalue(L->top); |
| 641 | break; | 638 | break; |
| @@ -755,9 +752,6 @@ LUA_API int lua_setfenv (lua_State *L, int idx) { | |||
| 755 | case LUA_TUSERDATA: | 752 | case LUA_TUSERDATA: |
| 756 | uvalue(o)->env = hvalue(L->top - 1); | 753 | uvalue(o)->env = hvalue(L->top - 1); |
| 757 | break; | 754 | break; |
| 758 | case LUA_TTHREAD: | ||
| 759 | sethvalue(L, gt(thvalue(o)), hvalue(L->top - 1)); | ||
| 760 | break; | ||
| 761 | default: | 755 | default: |
| 762 | res = 0; | 756 | res = 0; |
| 763 | break; | 757 | break; |
