فهرست منبع

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

Waldemar Celes 31 سال پیش
والد
کامیت
ad07c0f638
2فایلهای تغییر یافته به همراه25 افزوده شده و 6 حذف شده
  1. 22 4
      opcode.c
  2. 3 2
      opcode.h

+ 22 - 4
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));
  }
 }

+ 3 - 2
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,