lua

A copy of the Lua development repository
Log | Files | Refs | README

commit ad07c0f6380f527a8983039c4ae72ad40dd0443b
parent fca10c67335d4911b78d4ce2ca3083063ff677d4
Author: Waldemar Celes <celes@tecgraf.puc-rio.br>
Date:   Mon, 17 Oct 1994 17:00:21 -0200

new operations POWOP (power) and PUSHMARKMET (for marking method calls).
remove of operation PUSHOBJECT.

Diffstat:
Mopcode.c | 26++++++++++++++++++++++----
Mopcode.h | 5+++--
2 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/opcode.c b/opcode.c @@ -3,11 +3,12 @@ ** TecCGraf - PUC-Rio */ -char *rcs_opcode="$Id: opcode.c,v 2.8 1994/09/27 21:43:30 celes Exp celes $"; +char *rcs_opcode="$Id: opcode.c,v 2.9 1994/10/11 14:38:17 celes Exp $"; #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <math.h> #ifdef __GNUC__ #include <floatingpoint.h> #endif @@ -245,8 +246,14 @@ int lua_execute (Byte *pc) break; case PUSHMARK: tag(top++) = T_MARK; break; - - case PUSHOBJECT: *top = *(top-3); top++; break; + case PUSHMARKMET: + { + Object receiver = *(top-2); + if (lua_pushsubscript() == 1) return 1; + tag(top++) = T_MARK; + *(top++) = receiver; + break; + } case STORELOCAL0: case STORELOCAL1: case STORELOCAL2: case STORELOCAL3: case STORELOCAL4: case STORELOCAL5: @@ -457,6 +464,17 @@ int lua_execute (Byte *pc) } break; + case POWOP: + { + Object *l = top-2; + Object *r = top-1; + if (tonumber(r) || tonumber(l)) + return 1; + nvalue(l) = pow(nvalue(l), nvalue(r)); + --top; + } + break; + case CONCOP: { Object *l = top-2; @@ -819,7 +837,7 @@ Object *lua_getfield (Object *object, char *field) { Object ref; tag(&ref) = T_STRING; - svalue(&ref) = lua_createstring(field); + svalue(&ref) = lua_constant[lua_findconstant(field)]; return (lua_hashget(avalue(object), &ref)); } } diff --git a/opcode.h b/opcode.h @@ -1,6 +1,6 @@ /* ** TeCGraf - PUC-Rio -** $Id: opcode.h,v 2.2 1994/07/19 21:27:18 celes Exp celes $ +** $Id: opcode.h,v 2.3 1994/08/05 19:31:09 celes Exp celes $ */ #ifndef opcode_h @@ -55,7 +55,7 @@ typedef enum PUSHGLOBAL, PUSHINDEXED, PUSHMARK, - PUSHOBJECT, + PUSHMARKMET, STORELOCAL0, STORELOCAL1, STORELOCAL2, STORELOCAL3, STORELOCAL4, STORELOCAL5, STORELOCAL6, STORELOCAL7, STORELOCAL8, STORELOCAL9, STORELOCAL, @@ -74,6 +74,7 @@ typedef enum SUBOP, MULTOP, DIVOP, + POWOP, CONCOP, MINUSOP, NOTOP,