diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1994-12-06 12:27:18 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 1994-12-06 12:27:18 -0200 |
commit | ce4fb88b34421bc4426db7985314ba7ed757a284 (patch) | |
tree | 921c78d349d466295e30d467fce40cf7d60b7c3c | |
parent | e742d542534637c7c64e7acd461512c80646a475 (diff) | |
download | lua-ce4fb88b34421bc4426db7985314ba7ed757a284.tar.gz lua-ce4fb88b34421bc4426db7985314ba7ed757a284.tar.bz2 lua-ce4fb88b34421bc4426db7985314ba7ed757a284.zip |
opcode PUSHSELF has a parameter that indicates the method to be called
-rw-r--r-- | lua.stx | 15 | ||||
-rw-r--r-- | opcode.c | 7 |
2 files changed, 16 insertions, 6 deletions
@@ -1,6 +1,6 @@ | |||
1 | %{ | 1 | %{ |
2 | 2 | ||
3 | char *rcs_luastx = "$Id: lua.stx,v 3.11 1994/11/23 14:39:52 roberto Stab roberto $"; | 3 | char *rcs_luastx = "$Id: lua.stx,v 3.12 1994/11/25 19:24:57 roberto Exp $"; |
4 | 4 | ||
5 | #include <stdio.h> | 5 | #include <stdio.h> |
6 | #include <stdlib.h> | 6 | #include <stdlib.h> |
@@ -418,9 +418,8 @@ functioncall : funcvalue funcParams | |||
418 | funcvalue : varexp { $$ = 0; } | 418 | funcvalue : varexp { $$ = 0; } |
419 | | varexp ':' NAME | 419 | | varexp ':' NAME |
420 | { | 420 | { |
421 | code_byte(PUSHSTRING); | ||
422 | code_word(luaI_findconstant($3)); | ||
423 | code_byte(PUSHSELF); | 421 | code_byte(PUSHSELF); |
422 | code_word(luaI_findconstant($3)); | ||
424 | $$ = 1; | 423 | $$ = 1; |
425 | } | 424 | } |
426 | ; | 425 | ; |
@@ -830,7 +829,15 @@ static void PrintCode (Byte *code, Byte *end) | |||
830 | printf ("%d STOREGLOBAL %d\n", n, c.w); | 829 | printf ("%d STOREGLOBAL %d\n", n, c.w); |
831 | } | 830 | } |
832 | break; | 831 | break; |
833 | case PUSHSELF: printf ("%d PUSHSELF\n", (p++)-code); break; | 832 | case PUSHSELF: |
833 | { | ||
834 | CodeWord c; | ||
835 | int n = p-code; | ||
836 | p++; | ||
837 | get_word(c,p); | ||
838 | printf ("%d PUSHSELF %d\n", n, c.w); | ||
839 | } | ||
840 | break; | ||
834 | case STOREINDEXED0: printf ("%d STOREINDEXED0\n", (p++)-code); break; | 841 | case STOREINDEXED0: printf ("%d STOREINDEXED0\n", (p++)-code); break; |
835 | case STOREINDEXED: printf ("%d STOREINDEXED %d\n", p-code, *(++p)); | 842 | case STOREINDEXED: printf ("%d STOREINDEXED %d\n", p-code, *(++p)); |
836 | p++; | 843 | p++; |
@@ -3,7 +3,7 @@ | |||
3 | ** TecCGraf - PUC-Rio | 3 | ** TecCGraf - PUC-Rio |
4 | */ | 4 | */ |
5 | 5 | ||
6 | char *rcs_opcode="$Id: opcode.c,v 3.22 1994/11/23 14:31:11 roberto Stab roberto $"; | 6 | char *rcs_opcode="$Id: opcode.c,v 3.23 1994/11/30 21:20:37 roberto Exp roberto $"; |
7 | 7 | ||
8 | #include <setjmp.h> | 8 | #include <setjmp.h> |
9 | #include <stdio.h> | 9 | #include <stdio.h> |
@@ -803,7 +803,10 @@ static int lua_execute (Byte *pc, int base) | |||
803 | 803 | ||
804 | case PUSHSELF: | 804 | case PUSHSELF: |
805 | { | 805 | { |
806 | Object receiver = *(top-2); | 806 | Object receiver = *(top-1); |
807 | CodeWord code; | ||
808 | get_word(code,pc); | ||
809 | tag(top) = LUA_T_STRING; tsvalue(top++) = lua_constant[code.w]; | ||
807 | pushsubscript(); | 810 | pushsubscript(); |
808 | *(top++) = receiver; | 811 | *(top++) = receiver; |
809 | break; | 812 | break; |