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:
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: