aboutsummaryrefslogtreecommitdiff
path: root/opcode.c
diff options
context:
space:
mode:
Diffstat (limited to 'opcode.c')
-rw-r--r--opcode.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/opcode.c b/opcode.c
index 53f5d7d4..75f59d54 100644
--- a/opcode.c
+++ b/opcode.c
@@ -3,11 +3,12 @@
3** TecCGraf - PUC-Rio 3** TecCGraf - PUC-Rio
4*/ 4*/
5 5
6char *rcs_opcode="$Id: opcode.c,v 2.8 1994/09/27 21:43:30 celes Exp celes $"; 6char *rcs_opcode="$Id: opcode.c,v 2.9 1994/10/11 14:38:17 celes Exp $";
7 7
8#include <stdio.h> 8#include <stdio.h>
9#include <stdlib.h> 9#include <stdlib.h>
10#include <string.h> 10#include <string.h>
11#include <math.h>
11#ifdef __GNUC__ 12#ifdef __GNUC__
12#include <floatingpoint.h> 13#include <floatingpoint.h>
13#endif 14#endif
@@ -245,8 +246,14 @@ int lua_execute (Byte *pc)
245 break; 246 break;
246 247
247 case PUSHMARK: tag(top++) = T_MARK; break; 248 case PUSHMARK: tag(top++) = T_MARK; break;
248 249 case PUSHMARKMET:
249 case PUSHOBJECT: *top = *(top-3); top++; break; 250 {
251 Object receiver = *(top-2);
252 if (lua_pushsubscript() == 1) return 1;
253 tag(top++) = T_MARK;
254 *(top++) = receiver;
255 break;
256 }
250 257
251 case STORELOCAL0: case STORELOCAL1: case STORELOCAL2: 258 case STORELOCAL0: case STORELOCAL1: case STORELOCAL2:
252 case STORELOCAL3: case STORELOCAL4: case STORELOCAL5: 259 case STORELOCAL3: case STORELOCAL4: case STORELOCAL5:
@@ -457,6 +464,17 @@ int lua_execute (Byte *pc)
457 } 464 }
458 break; 465 break;
459 466
467 case POWOP:
468 {
469 Object *l = top-2;
470 Object *r = top-1;
471 if (tonumber(r) || tonumber(l))
472 return 1;
473 nvalue(l) = pow(nvalue(l), nvalue(r));
474 --top;
475 }
476 break;
477
460 case CONCOP: 478 case CONCOP:
461 { 479 {
462 Object *l = top-2; 480 Object *l = top-2;
@@ -819,7 +837,7 @@ Object *lua_getfield (Object *object, char *field)
819 { 837 {
820 Object ref; 838 Object ref;
821 tag(&ref) = T_STRING; 839 tag(&ref) = T_STRING;
822 svalue(&ref) = lua_createstring(field); 840 svalue(&ref) = lua_constant[lua_findconstant(field)];
823 return (lua_hashget(avalue(object), &ref)); 841 return (lua_hashget(avalue(object), &ref));
824 } 842 }
825} 843}