lua

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

commit f53460aab94c64879624c72222e282fe492122ae
parent 41e4c5798ee95404f6687def4bbed236566db676
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date:   Tue,  1 Nov 1994 16:25:01 -0200

CREATEARRAY now has an argument, the size of the array to create.

Diffstat:
Mlua.stx | 16+++++++++++-----
Mopcode.c | 16+++++++---------
2 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/lua.stx b/lua.stx @@ -1,6 +1,6 @@ %{ -char *rcs_luastx = "$Id: lua.stx,v 2.10 1994/10/17 19:05:32 celes Exp roberto $"; +char *rcs_luastx = "$Id: lua.stx,v 2.11 1994/10/21 19:00:12 roberto Exp roberto $"; #include <stdio.h> #include <stdlib.h> @@ -528,10 +528,8 @@ expr : '(' expr ')' { $$ = $2; } table : { - code_byte(PUSHWORD); - $<vLong>$ = pc; code_word(0); - incr_ntemp(); code_byte(CREATEARRAY); + $<vLong>$ = pc; code_word(0); } '{' fieldlist '}' { @@ -918,7 +916,15 @@ static void PrintCode (Byte *code, Byte *end) printf ("%d ADJUST %d\n", p-code, *(++p)); p++; break; - case CREATEARRAY: printf ("%d CREATEARRAY\n", (p++)-code); break; + case CREATEARRAY: + { + CodeWord c; + int n = p-code; + p++; + get_word(c,p); + printf ("%d CREATEARRAY\n", n, c.w); + break; + } case EQOP: printf ("%d EQOP\n", (p++)-code); break; case LTOP: printf ("%d LTOP\n", (p++)-code); break; case LEOP: printf ("%d LEOP\n", (p++)-code); break; diff --git a/opcode.c b/opcode.c @@ -3,7 +3,7 @@ ** TecCGraf - PUC-Rio */ -char *rcs_opcode="$Id: opcode.c,v 2.10 1994/10/17 19:00:40 celes Exp roberto $"; +char *rcs_opcode="$Id: opcode.c,v 2.11 1994/11/01 17:54:31 roberto Exp roberto $"; #include <stdio.h> #include <stdlib.h> @@ -346,17 +346,15 @@ int lua_execute (Byte *pc) break; case CREATEARRAY: - if (tag(top-1) == T_NIL) - nvalue(top-1) = 1; - else - { - if (tonumber(top-1)) return 1; - if (nvalue(top-1) <= 0) nvalue(top-1) = 1; - } - avalue(top-1) = lua_createarray(nvalue(top-1)); + { + CodeWord size; + get_word(size,pc); + top++; + avalue(top-1) = lua_createarray(size.w); if (avalue(top-1) == NULL) return 1; tag(top-1) = T_ARRAY; + } break; case EQOP: