aboutsummaryrefslogtreecommitdiff
path: root/lvm.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2011-06-02 16:31:40 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2011-06-02 16:31:40 -0300
commit3b44821334a1aa387c13eaf3cd23a2344091cbc7 (patch)
tree7070ed226b6db26ae82f99d94138465a95b0d7fc /lvm.c
parent0214dab989396de05567f293e6aa909ee2ffbac1 (diff)
downloadlua-3b44821334a1aa387c13eaf3cd23a2344091cbc7.tar.gz
lua-3b44821334a1aa387c13eaf3cd23a2344091cbc7.tar.bz2
lua-3b44821334a1aa387c13eaf3cd23a2344091cbc7.zip
stricter control (using tag variants) over closure kinds (Lua x C)
Diffstat (limited to 'lvm.c')
-rw-r--r--lvm.c13
1 files changed, 6 insertions, 7 deletions
diff --git a/lvm.c b/lvm.c
index 357aba17..8929dfb3 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lvm.c,v 2.138 2011/05/31 18:24:36 roberto Exp roberto $ 2** $Id: lvm.c,v 2.139 2011/05/31 18:27:56 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*/
@@ -65,7 +65,7 @@ static void traceexec (lua_State *L) {
65 luaD_hook(L, LUA_HOOKCOUNT, -1); 65 luaD_hook(L, LUA_HOOKCOUNT, -1);
66 } 66 }
67 if (mask & LUA_MASKLINE) { 67 if (mask & LUA_MASKLINE) {
68 Proto *p = ci_func(ci)->l.p; 68 Proto *p = ci_func(ci)->p;
69 int npc = pcRel(ci->u.l.savedpc, p); 69 int npc = pcRel(ci->u.l.savedpc, p);
70 int newline = getfuncline(p, npc); 70 int newline = getfuncline(p, npc);
71 if (npc == 0 || /* call linehook when enter a new function, */ 71 if (npc == 0 || /* call linehook when enter a new function, */
@@ -315,7 +315,7 @@ void luaV_concat (lua_State *L, int total) {
315 315
316void luaV_objlen (lua_State *L, StkId ra, const TValue *rb) { 316void luaV_objlen (lua_State *L, StkId ra, const TValue *rb) {
317 const TValue *tm; 317 const TValue *tm;
318 switch (ttype(rb)) { 318 switch (ttypenv(rb)) {
319 case LUA_TTABLE: { 319 case LUA_TTABLE: {
320 Table *h = hvalue(rb); 320 Table *h = hvalue(rb);
321 tm = fasttm(L, h->metatable, TM_LEN); 321 tm = fasttm(L, h->metatable, TM_LEN);
@@ -385,7 +385,7 @@ static void pushclosure (lua_State *L, Proto *p, UpVal **encup, StkId base,
385 Upvaldesc *uv = p->upvalues; 385 Upvaldesc *uv = p->upvalues;
386 int i; 386 int i;
387 Closure *ncl = luaF_newLclosure(L, p); 387 Closure *ncl = luaF_newLclosure(L, p);
388 setclvalue(L, ra, ncl); /* anchor new closure in stack */ 388 setclLvalue(L, ra, ncl); /* anchor new closure in stack */
389 for (i = 0; i < nup; i++) { /* fill in its upvalues */ 389 for (i = 0; i < nup; i++) { /* fill in its upvalues */
390 if (uv[i].instack) /* upvalue refers to local variable? */ 390 if (uv[i].instack) /* upvalue refers to local variable? */
391 ncl->l.upvals[i] = luaF_findupval(L, base + uv[i].idx); 391 ncl->l.upvals[i] = luaF_findupval(L, base + uv[i].idx);
@@ -512,9 +512,8 @@ void luaV_execute (lua_State *L) {
512 TValue *k; 512 TValue *k;
513 StkId base; 513 StkId base;
514 newframe: /* reentry point when frame changes (call/return) */ 514 newframe: /* reentry point when frame changes (call/return) */
515 lua_assert(isLua(ci));
516 lua_assert(ci == L->ci); 515 lua_assert(ci == L->ci);
517 cl = &clvalue(ci->func)->l; 516 cl = clLvalue(ci->func);
518 k = cl->p->k; 517 k = cl->p->k;
519 base = ci->u.l.base; 518 base = ci->u.l.base;
520 /* main loop of interpreter */ 519 /* main loop of interpreter */
@@ -819,7 +818,7 @@ void luaV_execute (lua_State *L) {
819 if (ncl == NULL) /* no match? */ 818 if (ncl == NULL) /* no match? */
820 pushclosure(L, p, cl->upvals, base, ra); /* create a new one */ 819 pushclosure(L, p, cl->upvals, base, ra); /* create a new one */
821 else 820 else
822 setclvalue(L, ra, ncl); /* push cashed closure */ 821 setclLvalue(L, ra, ncl); /* push cashed closure */
823 checkGC(L, 822 checkGC(L,
824 L->top = ra + 1; /* limit of live values */ 823 L->top = ra + 1; /* limit of live values */
825 luaC_step(L); 824 luaC_step(L);