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:
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,