aboutsummaryrefslogtreecommitdiff
path: root/lapi.c
diff options
context:
space:
mode:
Diffstat (limited to 'lapi.c')
-rw-r--r--lapi.c31
1 files changed, 14 insertions, 17 deletions
diff --git a/lapi.c b/lapi.c
index 4a3ba724..99c8473e 100644
--- a/lapi.c
+++ b/lapi.c
@@ -653,21 +653,17 @@ l_sinline int auxgetstr (lua_State *L, const TValue *t, const char *k) {
653} 653}
654 654
655 655
656/* 656static void getGlobalTable (lua_State *L, TValue *gt) {
657** Get the global table in the registry. Since all predefined 657 Table *registry = hvalue(&G(L)->l_registry);
658** indices in the registry were inserted right when the registry 658 luaH_getint(registry, LUA_RIDX_GLOBALS, gt);
659** was created and never removed, they must always be in the array 659}
660** part of the registry.
661*/
662#define getGtable(L) \
663 (&hvalue(&G(L)->l_registry)->array[LUA_RIDX_GLOBALS - 1])
664 660
665 661
666LUA_API int lua_getglobal (lua_State *L, const char *name) { 662LUA_API int lua_getglobal (lua_State *L, const char *name) {
667 const TValue *G; 663 TValue gt;
668 lua_lock(L); 664 lua_lock(L);
669 G = getGtable(L); 665 getGlobalTable(L, &gt);
670 return auxgetstr(L, G, name); 666 return auxgetstr(L, &gt, name);
671} 667}
672 668
673 669
@@ -840,10 +836,10 @@ static void auxsetstr (lua_State *L, const TValue *t, const char *k) {
840 836
841 837
842LUA_API void lua_setglobal (lua_State *L, const char *name) { 838LUA_API void lua_setglobal (lua_State *L, const char *name) {
843 const TValue *G; 839 TValue gt;
844 lua_lock(L); /* unlock done in 'auxsetstr' */ 840 lua_lock(L); /* unlock done in 'auxsetstr' */
845 G = getGtable(L); 841 getGlobalTable(L, &gt);
846 auxsetstr(L, G, name); 842 auxsetstr(L, &gt, name);
847} 843}
848 844
849 845
@@ -1093,10 +1089,11 @@ LUA_API int lua_load (lua_State *L, lua_Reader reader, void *data,
1093 LClosure *f = clLvalue(s2v(L->top.p - 1)); /* get new function */ 1089 LClosure *f = clLvalue(s2v(L->top.p - 1)); /* get new function */
1094 if (f->nupvalues >= 1) { /* does it have an upvalue? */ 1090 if (f->nupvalues >= 1) { /* does it have an upvalue? */
1095 /* get global table from registry */ 1091 /* get global table from registry */
1096 const TValue *gt = getGtable(L); 1092 TValue gt;
1093 getGlobalTable(L, &gt);
1097 /* set global table as 1st upvalue of 'f' (may be LUA_ENV) */ 1094 /* set global table as 1st upvalue of 'f' (may be LUA_ENV) */
1098 setobj(L, f->upvals[0]->v.p, gt); 1095 setobj(L, f->upvals[0]->v.p, &gt);
1099 luaC_barrier(L, f->upvals[0], gt); 1096 luaC_barrier(L, f->upvals[0], &gt);
1100 } 1097 }
1101 } 1098 }
1102 lua_unlock(L); 1099 lua_unlock(L);