aboutsummaryrefslogtreecommitdiff
path: root/lvm.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2005-02-18 10:40:02 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2005-02-18 10:40:02 -0200
commit7d45a5f48ff32a4e09a1734de23823943d6a6b28 (patch)
treede7bef1faf37d9b639928e5269e89d7112b5b6fa /lvm.c
parent73d764024451c24bc43b8e5102fe90974a86b7f4 (diff)
downloadlua-7d45a5f48ff32a4e09a1734de23823943d6a6b28.tar.gz
lua-7d45a5f48ff32a4e09a1734de23823943d6a6b28.tar.bz2
lua-7d45a5f48ff32a4e09a1734de23823943d6a6b28.zip
C functions and userdata also have environments
Diffstat (limited to 'lvm.c')
-rw-r--r--lvm.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/lvm.c b/lvm.c
index 9592a11a..9ab8aa38 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lvm.c,v 2.22 2005/01/10 18:17:39 roberto Exp roberto $ 2** $Id: lvm.c,v 2.23 2005/01/10 18:33:37 roberto Exp roberto $
3** Lua virtual machine 3** Lua virtual machine
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -428,9 +428,11 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
428 continue; 428 continue;
429 } 429 }
430 case OP_GETGLOBAL: { 430 case OP_GETGLOBAL: {
431 TValue g;
431 TValue *rb = KBx(i); 432 TValue *rb = KBx(i);
432 lua_assert(ttisstring(rb) && ttistable(&cl->g)); 433 sethvalue(L, &g, cl->env);
433 base = luaV_gettable(L, &cl->g, rb, ra, pc); /***/ 434 lua_assert(ttisstring(rb));
435 base = luaV_gettable(L, &g, rb, ra, pc); /***/
434 continue; 436 continue;
435 } 437 }
436 case OP_GETTABLE: { 438 case OP_GETTABLE: {
@@ -438,8 +440,10 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
438 continue; 440 continue;
439 } 441 }
440 case OP_SETGLOBAL: { 442 case OP_SETGLOBAL: {
441 lua_assert(ttisstring(KBx(i)) && ttistable(&cl->g)); 443 TValue g;
442 base = luaV_settable(L, &cl->g, KBx(i), ra, pc); /***/ 444 sethvalue(L, &g, cl->env);
445 lua_assert(ttisstring(KBx(i)));
446 base = luaV_settable(L, &g, KBx(i), ra, pc); /***/
443 continue; 447 continue;
444 } 448 }
445 case OP_SETUPVAL: { 449 case OP_SETUPVAL: {
@@ -740,7 +744,7 @@ StkId luaV_execute (lua_State *L, int nexeccalls) {
740 int nup, j; 744 int nup, j;
741 p = cl->p->p[GETARG_Bx(i)]; 745 p = cl->p->p[GETARG_Bx(i)];
742 nup = p->nups; 746 nup = p->nups;
743 ncl = luaF_newLclosure(L, nup, &cl->g); 747 ncl = luaF_newLclosure(L, nup, cl->env);
744 ncl->l.p = p; 748 ncl->l.p = p;
745 for (j=0; j<nup; j++, pc++) { 749 for (j=0; j<nup; j++, pc++) {
746 if (GET_OPCODE(*pc) == OP_GETUPVAL) 750 if (GET_OPCODE(*pc) == OP_GETUPVAL)