aboutsummaryrefslogtreecommitdiff
path: root/lvm.c
diff options
context:
space:
mode:
Diffstat (limited to 'lvm.c')
-rw-r--r--lvm.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/lvm.c b/lvm.c
index ced4d7f1..8dcd83eb 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lvm.c,v 1.245 2002/07/08 18:21:33 roberto Exp roberto $ 2** $Id: lvm.c,v 1.246 2002/07/08 20:22:08 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*/
@@ -80,16 +80,16 @@ static void traceexec (lua_State *L) {
80 if (mask & LUA_MASKLINE) { 80 if (mask & LUA_MASKLINE) {
81 CallInfo *ci = L->ci; 81 CallInfo *ci = L->ci;
82 Proto *p = ci_func(ci)->l.p; 82 Proto *p = ci_func(ci)->l.p;
83 int newline = getline(p, pcRel(*ci->pc, p)); 83 int newline = getline(p, pcRel(*ci->u.l.pc, p));
84 if (pcRel(*ci->pc, p) == 0) /* tracing may be starting now? */ 84 if (pcRel(*ci->u.l.pc, p) == 0) /* tracing may be starting now? */
85 ci->savedpc = *ci->pc; /* initialize `savedpc' */ 85 ci->savedpc = *ci->u.l.pc; /* initialize `savedpc' */
86 /* calls linehook when enters a new line or jumps back (loop) */ 86 /* calls linehook when enters a new line or jumps back (loop) */
87 if (*ci->pc <= ci->savedpc || 87 if (*ci->u.l.pc <= ci->savedpc ||
88 newline != getline(p, pcRel(ci->savedpc, p))) { 88 newline != getline(p, pcRel(ci->savedpc, p))) {
89 luaD_callhook(L, LUA_HOOKLINE, newline); 89 luaD_callhook(L, LUA_HOOKLINE, newline);
90 ci = L->ci; /* previous call may reallocate `ci' */ 90 ci = L->ci; /* previous call may reallocate `ci' */
91 } 91 }
92 ci->savedpc = *ci->pc; 92 ci->savedpc = *ci->u.l.pc;
93 } 93 }
94} 94}
95 95
@@ -370,9 +370,11 @@ StkId luaV_execute (lua_State *L) {
370 TObject *k; 370 TObject *k;
371 const Instruction *pc; 371 const Instruction *pc;
372 callentry: /* entry point when calling new functions */ 372 callentry: /* entry point when calling new functions */
373 L->ci->pc = &pc; 373 L->ci->u.l.pc = &pc;
374 L->ci->pb = &base; 374 L->ci->u.l.pb = &base;
375 pc = L->ci->savedpc; 375 pc = L->ci->savedpc;
376 if (L->hookmask & LUA_MASKCALL)
377 luaD_callhook(L, LUA_HOOKCALL, -1);
376 retentry: /* entry point when returning to old functions */ 378 retentry: /* entry point when returning to old functions */
377 base = L->ci->base; 379 base = L->ci->base;
378 cl = &clvalue(base - 1)->l; 380 cl = &clvalue(base - 1)->l;
@@ -619,12 +621,13 @@ StkId luaV_execute (lua_State *L) {
619 if (L->openupval) luaF_close(L, base); 621 if (L->openupval) luaF_close(L, base);
620 b = GETARG_B(i); 622 b = GETARG_B(i);
621 if (b != 0) L->top = ra+b-1; 623 if (b != 0) L->top = ra+b-1;
622 lua_assert(L->ci->pc == &pc); 624 lua_assert(L->ci->u.l.pc == &pc);
623 } 625 }
624 ret: { 626 ret: {
625 CallInfo *ci; 627 CallInfo *ci;
626 ci = L->ci - 1; 628 ci = L->ci - 1;
627 if (ci->pc != &pc) /* previous function was running `here'? */ 629 /* previous function was running `here'? */
630 if (!isLua(ci) || ci->u.l.pc != &pc)
628 return ra; /* no: return */ 631 return ra; /* no: return */
629 else { /* yes: continue its execution */ 632 else { /* yes: continue its execution */
630 int nresults; 633 int nresults;