From 4e7e9e8de5b9e50694e161653ef03b5c15a53054 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Tue, 4 Apr 2000 17:48:44 -0300 Subject: new opcode INCLOCAL. --- lvm.c | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) (limited to 'lvm.c') diff --git a/lvm.c b/lvm.c index 96159c0c..2a8e2484 100644 --- a/lvm.c +++ b/lvm.c @@ -1,5 +1,5 @@ /* -** $Id: lvm.c,v 1.97 2000/03/27 20:10:21 roberto Exp roberto $ +** $Id: lvm.c,v 1.98 2000/03/29 20:19:20 roberto Exp roberto $ ** Lua virtual machine ** See Copyright Notice in lua.h */ @@ -365,9 +365,9 @@ StkId luaV_execute (lua_State *L, const Closure *cl, register StkId base) { case OP_PUSHNIL: { int n = GETARG_U(i); LUA_ASSERT(L, n>0, "invalid argument"); - do { + do { ttype(top++) = TAG_NIL; - } while (--n > 0); + } while (--n > 0); break; } @@ -491,6 +491,21 @@ StkId luaV_execute (lua_State *L, const Closure *cl, register StkId base) { top--; break; + case OP_INCLOCAL: { + TObject *var = base+GETARG_B(i); + int n = GETARG_sA(i); + if (tonumber(var)) { + *top = *var; /* PUSHLOCAL */ + ttype(top+1) = TAG_NUMBER; + nvalue(top+1) = (Number)n; /* PUSHINT */ + call_arith(L, top+2, IM_ADD); + *var = *top; /* SETLOCAL */ + } + else + nvalue(var) += (Number)n; + break; + } + case OP_ADDI: if (tonumber(top-1)) { ttype(top) = TAG_NUMBER; @@ -554,50 +569,50 @@ StkId luaV_execute (lua_State *L, const Closure *cl, register StkId base) { nvalue(top-1) = 1; break; - case OP_IFNEQJMP: + case OP_JMPNEQ: top -= 2; if (!luaO_equalObj(top, top+1)) pc += GETARG_S(i); break; - case OP_IFEQJMP: + case OP_JMPEQ: top -= 2; if (luaO_equalObj(top, top+1)) pc += GETARG_S(i); break; - case OP_IFLTJMP: + case OP_JMPLT: top -= 2; if (luaV_lessthan(L, top, top+1, top+2)) pc += GETARG_S(i); break; - case OP_IFLEJMP: /* a <= b === !(b b === (b b === (b= b === !(a= b === !(a