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

This commit is contained in:
Roberto Ierusalimschy 1994-11-01 16:25:20 -02:00
parent 41e4c5798e
commit f53460aab9
2 changed files with 18 additions and 14 deletions

16
lua.stx
View File

@ -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 <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -528,10 +528,8 @@ expr : '(' expr ')' { $$ = $2; }
table : table :
{ {
code_byte(PUSHWORD);
$<vLong>$ = pc; code_word(0);
incr_ntemp();
code_byte(CREATEARRAY); code_byte(CREATEARRAY);
$<vLong>$ = pc; code_word(0);
} }
'{' fieldlist '}' '{' fieldlist '}'
{ {
@ -918,7 +916,15 @@ static void PrintCode (Byte *code, Byte *end)
printf ("%d ADJUST %d\n", p-code, *(++p)); printf ("%d ADJUST %d\n", p-code, *(++p));
p++; p++;
break; 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 EQOP: printf ("%d EQOP\n", (p++)-code); break;
case LTOP: printf ("%d LTOP\n", (p++)-code); break; case LTOP: printf ("%d LTOP\n", (p++)-code); break;
case LEOP: printf ("%d LEOP\n", (p++)-code); break; case LEOP: printf ("%d LEOP\n", (p++)-code); break;

View File

@ -3,7 +3,7 @@
** TecCGraf - PUC-Rio ** 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 <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -346,17 +346,15 @@ int lua_execute (Byte *pc)
break; break;
case CREATEARRAY: case CREATEARRAY:
if (tag(top-1) == T_NIL) {
nvalue(top-1) = 1; CodeWord size;
else get_word(size,pc);
{ top++;
if (tonumber(top-1)) return 1; avalue(top-1) = lua_createarray(size.w);
if (nvalue(top-1) <= 0) nvalue(top-1) = 1;
}
avalue(top-1) = lua_createarray(nvalue(top-1));
if (avalue(top-1) == NULL) if (avalue(top-1) == NULL)
return 1; return 1;
tag(top-1) = T_ARRAY; tag(top-1) = T_ARRAY;
}
break; break;
case EQOP: case EQOP: