updated sys/share/lev_comp.h, lev_{lex,yacc}.c

dgn_comp isn't affected.
This commit is contained in:
PatR
2018-11-27 18:42:47 -08:00
parent 5d2686e7c1
commit b1f1594fbd
3 changed files with 235 additions and 179 deletions
+22 -22
View File
@@ -174,39 +174,39 @@
#define DICE 430 #define DICE 430
typedef union typedef union
{ {
long i; long i;
char* map; char *map;
struct {
long room;
long wall;
long door;
} corpos;
struct { struct {
long area; long room;
long x1; long wall;
long y1; long door;
long x2; } corpos;
long y2; struct {
long area;
long x1;
long y1;
long x2;
long y2;
} lregn; } lregn;
struct { struct {
long x; long x;
long y; long y;
} crd; } crd;
struct { struct {
long ter; long ter;
long lit; long lit;
} terr; } terr;
struct { struct {
long height; long height;
long width; long width;
} sze; } sze;
struct { struct {
long die; long die;
long num; long num;
} dice; } dice;
struct { struct {
long cfunc; long cfunc;
char *varstr; char *varstr;
} meth; } meth;
} YYSTYPE; } YYSTYPE;
extern YYSTYPE yylval; extern YYSTYPE yylval;
+3 -3
View File
@@ -1024,7 +1024,7 @@ int yy_flex_debug = 0;
#define YY_MORE_ADJ 0 #define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET #define YY_RESTORE_YY_MORE_OFFSET
char *yytext; char *yytext;
/* NetHack 3.6 lev_comp.l $NHDT-Date: 1522193683 2018/03/27 23:34:43 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.28 $ */ /* NetHack 3.6 lev_comp.l $NHDT-Date: 1543372935 2018/11/28 02:42:15 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.29 $ */
/* Copyright (c) 1989 by Jean-Christophe Collet */ /* Copyright (c) 1989 by Jean-Christophe Collet */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1102,7 +1102,7 @@ long FDECL(corefunc_str_check, (char *, long));
extern void VDECL(lc_error, (const char *, ...)); extern void VDECL(lc_error, (const char *, ...));
extern struct lc_vardefs *FDECL(vardef_defined,(struct lc_vardefs *,char *, int)); extern struct lc_vardefs *FDECL(vardef_defined,(struct lc_vardefs *,char *, int));
extern struct lc_vardefs *variable_definitions; extern struct lc_vardefs *vardefs;
extern long FDECL(method_defined, (char *, long, long *)); extern long FDECL(method_defined, (char *, long, long *));
@@ -3256,7 +3256,7 @@ handle_varstring_check()
struct lc_vardefs *vd; struct lc_vardefs *vd;
yylval.map = dupstr(yytext); yylval.map = dupstr(yytext);
if ((vd = vardef_defined(variable_definitions, yytext, 1)) != 0) { if ((vd = vardef_defined(vardefs, yytext, 1)) != 0) {
long l = vd->var_type; long l = vd->var_type;
int a = ((l & SPOVAR_ARRAY) == SPOVAR_ARRAY); int a = ((l & SPOVAR_ARRAY) == SPOVAR_ARRAY);
+210 -154
View File
@@ -11,7 +11,7 @@
#define yyerrok (yyerrflag=0) #define yyerrok (yyerrflag=0)
#define YYRECOVERING (yyerrflag!=0) #define YYRECOVERING (yyerrflag!=0)
#define YYPREFIX "yy" #define YYPREFIX "yy"
/* NetHack 3.6 lev_comp.y $NHDT-Date: 1455747019 2016/02/17 22:10:19 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.22 $ */ /* NetHack 3.6 lev_comp.y $NHDT-Date: 1543372951 2018/11/28 02:42:31 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.23 $ */
/* Copyright (c) 1989 by Jean-Christophe Collet */ /* Copyright (c) 1989 by Jean-Christophe Collet */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -126,7 +126,8 @@ int obj_containment = 0;
int in_container_obj = 0; int in_container_obj = 0;
/* integer value is possibly an inconstant value (eg. dice notation or a variable) */ /* integer value is possibly an inconstant value (eg. dice notation
or a variable) */
int is_inconstant_number = 0; int is_inconstant_number = 0;
int in_switch_statement = 0; int in_switch_statement = 0;
@@ -139,7 +140,7 @@ int n_switch_case_list = 0;
int allow_break_statements = 0; int allow_break_statements = 0;
struct lc_breakdef *break_list = NULL; struct lc_breakdef *break_list = NULL;
extern struct lc_vardefs *variable_definitions; extern struct lc_vardefs *vardefs; /* variable definitions */
struct lc_vardefs *function_tmp_var_defs = NULL; struct lc_vardefs *function_tmp_var_defs = NULL;
@@ -158,39 +159,39 @@ extern char curr_token[512];
typedef union typedef union
{ {
long i; long i;
char* map; char *map;
struct {
long room;
long wall;
long door;
} corpos;
struct { struct {
long area; long room;
long x1; long wall;
long y1; long door;
long x2; } corpos;
long y2; struct {
long area;
long x1;
long y1;
long x2;
long y2;
} lregn; } lregn;
struct { struct {
long x; long x;
long y; long y;
} crd; } crd;
struct { struct {
long ter; long ter;
long lit; long lit;
} terr; } terr;
struct { struct {
long height; long height;
long width; long width;
} sze; } sze;
struct { struct {
long die; long die;
long num; long num;
} dice; } dice;
struct { struct {
long cfunc; long cfunc;
char *varstr; char *varstr;
} meth; } meth;
} YYSTYPE; } YYSTYPE;
#define CHAR 257 #define CHAR 257
@@ -2605,21 +2606,22 @@ case 5:
{ {
if (fatal_error > 0) { if (fatal_error > 0) {
(void) fprintf(stderr, (void) fprintf(stderr,
"%s: %d errors detected for level \"%s\". No output created!\n", "%s: %d errors detected for level \"%s\". No output created!\n",
fname, fatal_error, yyvsp[-2].map); fname, fatal_error, yyvsp[-2].map);
fatal_error = 0; fatal_error = 0;
got_errors++; got_errors++;
} else if (!got_errors) { } else if (!got_errors) {
if (!write_level_file(yyvsp[-2].map, splev)) { if (!write_level_file(yyvsp[-2].map, splev)) {
lc_error("Can't write output file for '%s'!", yyvsp[-2].map); lc_error("Can't write output file for '%s'!",
yyvsp[-2].map);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
} }
Free(yyvsp[-2].map); Free(yyvsp[-2].map);
Free(splev); Free(splev);
splev = NULL; splev = NULL;
vardef_free_all(variable_definitions); vardef_free_all(vardefs);
variable_definitions = NULL; vardefs = NULL;
} }
break; break;
case 6: case 6:
@@ -2633,10 +2635,11 @@ case 7:
start_level_def(&splev, yyvsp[-2].map); start_level_def(&splev, yyvsp[-2].map);
if (yyvsp[0].i == -1) { if (yyvsp[0].i == -1) {
add_opvars(splev, "iiiiiiiio", add_opvars(splev, "iiiiiiiio",
VA_PASS9(LVLINIT_MAZEGRID,HWALL,0,0, VA_PASS9(LVLINIT_MAZEGRID, HWALL, 0,0,
0,0,0,0, SPO_INITLEVEL)); 0,0,0,0, SPO_INITLEVEL));
} else { } else {
long bg = what_map_char((char) yyvsp[0].i); int bg = (int) what_map_char((char) yyvsp[0].i);
add_opvars(splev, "iiiiiiiio", add_opvars(splev, "iiiiiiiio",
VA_PASS9(LVLINIT_SOLIDFILL, bg, 0,0, VA_PASS9(LVLINIT_SOLIDFILL, bg, 0,0,
0,0,0,0, SPO_INITLEVEL)); 0,0,0,0, SPO_INITLEVEL));
@@ -2660,22 +2663,26 @@ case 9:
break; break;
case 10: case 10:
{ {
long filling = yyvsp[0].terr.ter; int filling = (int) yyvsp[0].terr.ter;
if (filling == INVALID_TYPE || filling >= MAX_TYPE) if (filling == INVALID_TYPE || filling >= MAX_TYPE)
lc_error("INIT_MAP: Invalid fill char type."); lc_error("INIT_MAP: Invalid fill char type.");
add_opvars(splev, "iiiiiiiio", add_opvars(splev, "iiiiiiiio",
LVLINIT_SOLIDFILL,filling,0,(long)yyvsp[0].terr.lit, 0,0,0,0, SPO_INITLEVEL); VA_PASS9(LVLINIT_SOLIDFILL, filling,
0, (int) yyvsp[0].terr.lit,
0,0,0,0, SPO_INITLEVEL));
max_x_map = COLNO-1; max_x_map = COLNO-1;
max_y_map = ROWNO; max_y_map = ROWNO;
} }
break; break;
case 11: case 11:
{ {
long filling = what_map_char((char) yyvsp[0].i); int filling = (int) what_map_char((char) yyvsp[0].i);
if (filling == INVALID_TYPE || filling >= MAX_TYPE) if (filling == INVALID_TYPE || filling >= MAX_TYPE)
lc_error("INIT_MAP: Invalid fill char type."); lc_error("INIT_MAP: Invalid fill char type.");
add_opvars(splev, "iiiiiiiio", add_opvars(splev, "iiiiiiiio",
VA_PASS9(LVLINIT_MAZEGRID,filling,0,0, VA_PASS9(LVLINIT_MAZEGRID, filling, 0,0,
0,0,0,0, SPO_INITLEVEL)); 0,0,0,0, SPO_INITLEVEL));
max_x_map = COLNO-1; max_x_map = COLNO-1;
max_y_map = ROWNO; max_y_map = ROWNO;
@@ -2690,13 +2697,14 @@ case 12:
break; break;
case 13: case 13:
{ {
long fg = what_map_char((char) yyvsp[-11].i); int fg = (int) what_map_char((char) yyvsp[-11].i),
long bg = what_map_char((char) yyvsp[-9].i); bg = (int) what_map_char((char) yyvsp[-9].i);
long smoothed = yyvsp[-7].i; int smoothed = (int) yyvsp[-7].i,
long joined = yyvsp[-5].i; joined = (int) yyvsp[-5].i,
long lit = yyvsp[-3].i; lit = (int) yyvsp[-3].i,
long walled = yyvsp[-1].i; walled = (int) yyvsp[-1].i,
long filling = yyvsp[0].i; filling = (int) yyvsp[0].i;
if (fg == INVALID_TYPE || fg >= MAX_TYPE) if (fg == INVALID_TYPE || fg >= MAX_TYPE)
lc_error("INIT_MAP: Invalid foreground type."); lc_error("INIT_MAP: Invalid foreground type.");
if (bg == INVALID_TYPE || bg >= MAX_TYPE) if (bg == INVALID_TYPE || bg >= MAX_TYPE)
@@ -2708,8 +2716,8 @@ case 13:
lc_error("INIT_MAP: Invalid fill char type."); lc_error("INIT_MAP: Invalid fill char type.");
add_opvars(splev, "iiiiiiiio", add_opvars(splev, "iiiiiiiio",
VA_PASS9(LVLINIT_MINES,filling,walled,lit, VA_PASS9(LVLINIT_MINES, filling, walled, lit,
joined,smoothed,bg,fg, joined, smoothed, bg, fg,
SPO_INITLEVEL)); SPO_INITLEVEL));
max_x_map = COLNO-1; max_x_map = COLNO-1;
max_y_map = ROWNO; max_y_map = ROWNO;
@@ -2753,7 +2761,8 @@ case 22:
break; break;
case 23: case 23:
{ {
add_opvars(splev, "io", VA_PASS2(yyvsp[0].i, SPO_LEVEL_FLAGS)); add_opvars(splev, "io",
VA_PASS2((int) yyvsp[0].i, SPO_LEVEL_FLAGS));
} }
break; break;
case 24: case 24:
@@ -2784,74 +2793,80 @@ break;
case 96: case 96:
{ {
struct lc_vardefs *vd; struct lc_vardefs *vd;
if ((vd = vardef_defined(variable_definitions, yyvsp[0].map, 1))) {
if ((vd = vardef_defined(vardefs, yyvsp[0].map, 1))) {
if (!(vd->var_type & SPOVAR_ARRAY)) if (!(vd->var_type & SPOVAR_ARRAY))
lc_error("Trying to shuffle non-array variable '%s'", yyvsp[0].map); lc_error("Trying to shuffle non-array variable '%s'",
} else lc_error("Trying to shuffle undefined variable '%s'", yyvsp[0].map); yyvsp[0].map);
} else
lc_error("Trying to shuffle undefined variable '%s'",
yyvsp[0].map);
add_opvars(splev, "so", VA_PASS2(yyvsp[0].map, SPO_SHUFFLE_ARRAY)); add_opvars(splev, "so", VA_PASS2(yyvsp[0].map, SPO_SHUFFLE_ARRAY));
Free(yyvsp[0].map); Free(yyvsp[0].map);
} }
break; break;
case 97: case 97:
{ {
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-2].map, SPOVAR_INT); vardefs = add_vardef_type(vardefs, yyvsp[-2].map, SPOVAR_INT);
add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT)); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT));
Free(yyvsp[-2].map); Free(yyvsp[-2].map);
} }
break; break;
case 98: case 98:
{ {
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_SEL); vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_SEL);
add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT));
Free(yyvsp[-4].map); Free(yyvsp[-4].map);
} }
break; break;
case 99: case 99:
{ {
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-2].map, SPOVAR_STRING); vardefs = add_vardef_type(vardefs, yyvsp[-2].map, SPOVAR_STRING);
add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT)); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT));
Free(yyvsp[-2].map); Free(yyvsp[-2].map);
} }
break; break;
case 100: case 100:
{ {
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_MAPCHAR); vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_MAPCHAR);
add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT));
Free(yyvsp[-4].map); Free(yyvsp[-4].map);
} }
break; break;
case 101: case 101:
{ {
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_MONST); vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_MONST);
add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT));
Free(yyvsp[-4].map); Free(yyvsp[-4].map);
} }
break; break;
case 102: case 102:
{ {
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_OBJ); vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_OBJ);
add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT));
Free(yyvsp[-4].map); Free(yyvsp[-4].map);
} }
break; break;
case 103: case 103:
{ {
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-2].map, SPOVAR_COORD); vardefs = add_vardef_type(vardefs, yyvsp[-2].map, SPOVAR_COORD);
add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT)); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT));
Free(yyvsp[-2].map); Free(yyvsp[-2].map);
} }
break; break;
case 104: case 104:
{ {
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-2].map, SPOVAR_REGION); vardefs = add_vardef_type(vardefs, yyvsp[-2].map, SPOVAR_REGION);
add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT)); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-2].map, SPO_VAR_INIT));
Free(yyvsp[-2].map); Free(yyvsp[-2].map);
} }
break; break;
case 105: case 105:
{ {
long n_items = yyvsp[-1].i; int n_items = (int) yyvsp[-1].i;
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_INT|SPOVAR_ARRAY);
vardefs = add_vardef_type(vardefs, yyvsp[-4].map,
SPOVAR_INT | SPOVAR_ARRAY);
add_opvars(splev, "iso", add_opvars(splev, "iso",
VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT));
Free(yyvsp[-4].map); Free(yyvsp[-4].map);
@@ -2859,8 +2874,10 @@ case 105:
break; break;
case 106: case 106:
{ {
long n_items = yyvsp[-1].i; int n_items = (int) yyvsp[-1].i;
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_COORD|SPOVAR_ARRAY);
vardefs = add_vardef_type(vardefs, yyvsp[-4].map,
SPOVAR_COORD | SPOVAR_ARRAY);
add_opvars(splev, "iso", add_opvars(splev, "iso",
VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT));
Free(yyvsp[-4].map); Free(yyvsp[-4].map);
@@ -2868,8 +2885,10 @@ case 106:
break; break;
case 107: case 107:
{ {
long n_items = yyvsp[-1].i; int n_items = (int) yyvsp[-1].i;
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_REGION|SPOVAR_ARRAY);
vardefs = add_vardef_type(vardefs, yyvsp[-4].map,
SPOVAR_REGION | SPOVAR_ARRAY);
add_opvars(splev, "iso", add_opvars(splev, "iso",
VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT));
Free(yyvsp[-4].map); Free(yyvsp[-4].map);
@@ -2877,8 +2896,10 @@ case 107:
break; break;
case 108: case 108:
{ {
long n_items = yyvsp[-1].i; int n_items = (int) yyvsp[-1].i;
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-6].map, SPOVAR_MAPCHAR|SPOVAR_ARRAY);
vardefs = add_vardef_type(vardefs, yyvsp[-6].map,
SPOVAR_MAPCHAR | SPOVAR_ARRAY);
add_opvars(splev, "iso", add_opvars(splev, "iso",
VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT));
Free(yyvsp[-6].map); Free(yyvsp[-6].map);
@@ -2886,8 +2907,10 @@ case 108:
break; break;
case 109: case 109:
{ {
long n_items = yyvsp[-1].i; int n_items = (int) yyvsp[-1].i;
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-6].map, SPOVAR_MONST|SPOVAR_ARRAY);
vardefs = add_vardef_type(vardefs, yyvsp[-6].map,
SPOVAR_MONST | SPOVAR_ARRAY);
add_opvars(splev, "iso", add_opvars(splev, "iso",
VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT));
Free(yyvsp[-6].map); Free(yyvsp[-6].map);
@@ -2895,8 +2918,10 @@ case 109:
break; break;
case 110: case 110:
{ {
long n_items = yyvsp[-1].i; int n_items = (int) yyvsp[-1].i;
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-6].map, SPOVAR_OBJ|SPOVAR_ARRAY);
vardefs = add_vardef_type(vardefs, yyvsp[-6].map,
SPOVAR_OBJ | SPOVAR_ARRAY);
add_opvars(splev, "iso", add_opvars(splev, "iso",
VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT));
Free(yyvsp[-6].map); Free(yyvsp[-6].map);
@@ -2904,8 +2929,10 @@ case 110:
break; break;
case 111: case 111:
{ {
long n_items = yyvsp[-1].i; int n_items = (int) yyvsp[-1].i;
variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_STRING|SPOVAR_ARRAY);
vardefs = add_vardef_type(vardefs, yyvsp[-4].map,
SPOVAR_STRING | SPOVAR_ARRAY);
add_opvars(splev, "iso", add_opvars(splev, "iso",
VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT));
Free(yyvsp[-4].map); Free(yyvsp[-4].map);
@@ -3008,8 +3035,8 @@ case 126:
splev = &(funcdef->code); splev = &(funcdef->code);
Free(yyvsp[-1].map); Free(yyvsp[-1].map);
curr_function = funcdef; curr_function = funcdef;
function_tmp_var_defs = variable_definitions; function_tmp_var_defs = vardefs;
variable_definitions = NULL; vardefs = NULL;
} }
break; break;
case 127: case 127:
@@ -3023,21 +3050,25 @@ case 128:
splev = function_splev_backup; splev = function_splev_backup;
in_function_definition--; in_function_definition--;
curr_function = NULL; curr_function = NULL;
vardef_free_all(variable_definitions); vardef_free_all(vardefs);
variable_definitions = function_tmp_var_defs; vardefs = function_tmp_var_defs;
} }
break; break;
case 129: case 129:
{ {
struct lc_funcdefs *tmpfunc; struct lc_funcdefs *tmpfunc;
tmpfunc = funcdef_defined(function_definitions, yyvsp[-3].map, 1); tmpfunc = funcdef_defined(function_definitions, yyvsp[-3].map, 1);
if (tmpfunc) { if (tmpfunc) {
long l; int l;
long nparams = strlen( yyvsp[-1].map ); int nparams = (int) strlen(yyvsp[-1].map);
char *fparamstr = funcdef_paramtypes(tmpfunc); char *fparamstr = funcdef_paramtypes(tmpfunc);
if (strcmp(yyvsp[-1].map, fparamstr)) { if (strcmp(yyvsp[-1].map, fparamstr)) {
char *tmps = strdup(decode_parm_str(fparamstr)); char *tmps = strdup(decode_parm_str(fparamstr));
lc_error("Function '%s' requires params '%s', got '%s' instead.", yyvsp[-3].map, tmps, decode_parm_str(yyvsp[-1].map));
lc_error("Function '%s' requires params '%s', got '%s' instead.",
yyvsp[-3].map, tmps, decode_parm_str(yyvsp[-1].map));
Free(tmps); Free(tmps);
} }
Free(fparamstr); Free(fparamstr);
@@ -3045,9 +3076,11 @@ case 129:
if (!(tmpfunc->n_called)) { if (!(tmpfunc->n_called)) {
/* we haven't called the function yet, so insert it in the code */ /* we haven't called the function yet, so insert it in the code */
struct opvar *jmp = New(struct opvar); struct opvar *jmp = New(struct opvar);
set_opvar_int(jmp, splev->n_opcodes+1); set_opvar_int(jmp, splev->n_opcodes+1);
add_opcode(splev, SPO_PUSH, jmp); add_opcode(splev, SPO_PUSH, jmp);
add_opcode(splev, SPO_JMP, NULL); /* we must jump past it first, then CALL it, due to RETURN. */ /* we must jump past it first, then CALL it, due to RETURN. */
add_opcode(splev, SPO_JMP, NULL);
tmpfunc->addr = splev->n_opcodes; tmpfunc->addr = splev->n_opcodes;
@@ -3062,9 +3095,10 @@ case 129:
} }
splev_add_from(splev, &(tmpfunc->code)); splev_add_from(splev, &(tmpfunc->code));
set_opvar_int(jmp, splev->n_opcodes - jmp->vardata.l); set_opvar_int(jmp,
splev->n_opcodes - jmp->vardata.l);
} }
l = tmpfunc->addr - splev->n_opcodes - 2; l = (int) (tmpfunc->addr - splev->n_opcodes - 2);
add_opvars(splev, "iio", add_opvars(splev, "iio",
VA_PASS3(nparams, l, SPO_CALL)); VA_PASS3(nparams, l, SPO_CALL));
tmpfunc->n_called++; tmpfunc->n_called++;
@@ -3093,7 +3127,7 @@ case 133:
{ {
/* val > rn2(100) */ /* val > rn2(100) */
add_opvars(splev, "iio", add_opvars(splev, "iio",
VA_PASS3((long)yyvsp[0].i, 100, SPO_RN2)); VA_PASS3((int) yyvsp[0].i, 100, SPO_RN2));
yyval.i = SPO_JG; yyval.i = SPO_JG;
} }
break; break;
@@ -3117,6 +3151,7 @@ break;
case 137: case 137:
{ {
struct opvar *chkjmp; struct opvar *chkjmp;
if (in_switch_statement > 0) if (in_switch_statement > 0)
lc_error("Cannot nest switch-statements."); lc_error("Cannot nest switch-statements.");
@@ -3181,6 +3216,7 @@ case 141:
{ {
if (n_switch_case_list < MAX_SWITCH_CASES) { if (n_switch_case_list < MAX_SWITCH_CASES) {
struct opvar *tmppush = New(struct opvar); struct opvar *tmppush = New(struct opvar);
set_opvar_int(tmppush, splev->n_opcodes); set_opvar_int(tmppush, splev->n_opcodes);
switch_case_value[n_switch_case_list] = yyvsp[-1].i; switch_case_value[n_switch_case_list] = yyvsp[-1].i;
switch_case_list[n_switch_case_list++] = tmppush; switch_case_list[n_switch_case_list++] = tmppush;
@@ -3229,8 +3265,7 @@ case 148:
/* the value of which is already in stack (the 2nd math_expr) */ /* the value of which is already in stack (the 2nd math_expr) */
add_opvars(splev, "iso", VA_PASS3(0, buf, SPO_VAR_INIT)); add_opvars(splev, "iso", VA_PASS3(0, buf, SPO_VAR_INIT));
variable_definitions = add_vardef_type(variable_definitions, vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_INT);
yyvsp[-4].map, SPOVAR_INT);
/* define the for-loop variable. value is in stack (1st math_expr) */ /* define the for-loop variable. value is in stack (1st math_expr) */
add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT));
@@ -3260,6 +3295,7 @@ case 149:
break; break;
case 150: case 150:
{ {
int l;
char buf[256], buf2[256]; char buf[256], buf2[256];
n_forloops--; n_forloops--;
@@ -3278,10 +3314,9 @@ case 150:
VA_PASS3(0, forloop_list[n_forloops].varname, VA_PASS3(0, forloop_list[n_forloops].varname,
SPO_VAR_INIT)); SPO_VAR_INIT));
/* jump back if compared values were not equal */ /* jump back if compared values were not equal */
add_opvars(splev, "io", l = (int) (forloop_list[n_forloops].jmp_point
VA_PASS2( - splev->n_opcodes - 1);
forloop_list[n_forloops].jmp_point - splev->n_opcodes - 1, add_opvars(splev, "io", VA_PASS2(l, SPO_JNE));
SPO_JNE));
Free(forloop_list[n_forloops].varname); Free(forloop_list[n_forloops].varname);
break_stmt_end(splev); break_stmt_end(splev);
} }
@@ -3308,10 +3343,11 @@ case 152:
add_opvars(splev, "oio", VA_PASS3(SPO_COPY, 0, SPO_CMP)); add_opvars(splev, "oio", VA_PASS3(SPO_COPY, 0, SPO_CMP));
tmppush = (struct opvar *) if_list[--n_if_list]; tmppush = (struct opvar *) if_list[--n_if_list];
set_opvar_int(tmppush, tmppush->vardata.l - splev->n_opcodes-1); set_opvar_int(tmppush,
tmppush->vardata.l - splev->n_opcodes-1);
add_opcode(splev, SPO_PUSH, tmppush); add_opcode(splev, SPO_PUSH, tmppush);
add_opcode(splev, SPO_JG, NULL); add_opcode(splev, SPO_JG, NULL);
add_opcode(splev, SPO_POP, NULL); /* get rid of the count value in stack */ add_opcode(splev, SPO_POP, NULL); /* discard count */
break_stmt_end(splev); break_stmt_end(splev);
} }
break; break;
@@ -3340,8 +3376,10 @@ case 154:
{ {
if (n_if_list > 0) { if (n_if_list > 0) {
struct opvar *tmppush; struct opvar *tmppush;
tmppush = (struct opvar *) if_list[--n_if_list]; tmppush = (struct opvar *) if_list[--n_if_list];
set_opvar_int(tmppush, splev->n_opcodes - tmppush->vardata.l); set_opvar_int(tmppush,
splev->n_opcodes - tmppush->vardata.l);
} else lc_error("IF: Huh?! No start address?"); } else lc_error("IF: Huh?! No start address?");
} }
break; break;
@@ -3375,8 +3413,10 @@ case 157:
{ {
if (n_if_list > 0) { if (n_if_list > 0) {
struct opvar *tmppush; struct opvar *tmppush;
tmppush = (struct opvar *) if_list[--n_if_list]; tmppush = (struct opvar *) if_list[--n_if_list];
set_opvar_int(tmppush, splev->n_opcodes - tmppush->vardata.l); set_opvar_int(tmppush,
splev->n_opcodes - tmppush->vardata.l);
} else lc_error("IF: Huh?! No start address?"); } else lc_error("IF: Huh?! No start address?");
} }
break; break;
@@ -3393,7 +3433,8 @@ case 158:
tmppush2 = (struct opvar *) if_list[--n_if_list]; tmppush2 = (struct opvar *) if_list[--n_if_list];
set_opvar_int(tmppush2, splev->n_opcodes - tmppush2->vardata.l); set_opvar_int(tmppush2,
splev->n_opcodes - tmppush2->vardata.l);
if_list[n_if_list++] = tmppush; if_list[n_if_list++] = tmppush;
} else lc_error("IF: Huh?! No else-part address?"); } else lc_error("IF: Huh?! No else-part address?");
} }
@@ -3592,7 +3633,7 @@ break;
case 192: case 192:
{ {
add_opvars(splev, "ciisiio", add_opvars(splev, "ciisiio",
VA_PASS7(0, 0, 1, (char *)0, 0, 0, SPO_MAP)); VA_PASS7(0, 0, 1, (char *) 0, 0, 0, SPO_MAP));
max_x_map = COLNO-1; max_x_map = COLNO-1;
max_y_map = ROWNO; max_y_map = ROWNO;
} }
@@ -3600,15 +3641,15 @@ break;
case 193: case 193:
{ {
add_opvars(splev, "cii", add_opvars(splev, "cii",
VA_PASS3(SP_COORD_PACK((yyvsp[-4].i),(yyvsp[-2].i)), VA_PASS3(SP_COORD_PACK((yyvsp[-4].i), (yyvsp[-2].i)),
1, (long)yyvsp[-1].i)); 1, (int) yyvsp[-1].i));
scan_map(yyvsp[0].map, splev); scan_map(yyvsp[0].map, splev);
Free(yyvsp[0].map); Free(yyvsp[0].map);
} }
break; break;
case 194: case 194:
{ {
add_opvars(splev, "ii", VA_PASS2(2, (long)yyvsp[-1].i)); add_opvars(splev, "ii", VA_PASS2(2, (int) yyvsp[-1].i));
scan_map(yyvsp[0].map, splev); scan_map(yyvsp[0].map, splev);
Free(yyvsp[0].map); Free(yyvsp[0].map);
} }
@@ -3640,6 +3681,7 @@ break;
case 203: case 203:
{ {
struct opvar *stopit = New(struct opvar); struct opvar *stopit = New(struct opvar);
set_opvar_int(stopit, SP_M_V_END); set_opvar_int(stopit, SP_M_V_END);
add_opcode(splev, SPO_PUSH, stopit); add_opcode(splev, SPO_PUSH, stopit);
yyval.i = 0x0000; yyval.i = 0x0000;
@@ -3661,28 +3703,28 @@ break;
case 206: case 206:
{ {
add_opvars(splev, "ii", add_opvars(splev, "ii",
VA_PASS2((long)yyvsp[0].i, SP_M_V_PEACEFUL)); VA_PASS2((int) yyvsp[0].i, SP_M_V_PEACEFUL));
yyval.i = 0x0002; yyval.i = 0x0002;
} }
break; break;
case 207: case 207:
{ {
add_opvars(splev, "ii", add_opvars(splev, "ii",
VA_PASS2((long)yyvsp[0].i, SP_M_V_ASLEEP)); VA_PASS2((int) yyvsp[0].i, SP_M_V_ASLEEP));
yyval.i = 0x0004; yyval.i = 0x0004;
} }
break; break;
case 208: case 208:
{ {
add_opvars(splev, "ii", add_opvars(splev, "ii",
VA_PASS2((long)yyvsp[0].i, SP_M_V_ALIGN)); VA_PASS2((int) yyvsp[0].i, SP_M_V_ALIGN));
yyval.i = 0x0008; yyval.i = 0x0008;
} }
break; break;
case 209: case 209:
{ {
add_opvars(splev, "ii", add_opvars(splev, "ii",
VA_PASS2((long)yyvsp[-1].i, SP_M_V_APPEAR)); VA_PASS2((int) yyvsp[-1].i, SP_M_V_APPEAR));
yyval.i = 0x0010; yyval.i = 0x0010;
} }
break; break;
@@ -3749,13 +3791,14 @@ break;
case 220: case 220:
{ {
add_opvars(splev, "ii", add_opvars(splev, "ii",
VA_PASS2((long)yyvsp[0].i, SP_M_V_SEENTRAPS)); VA_PASS2((int) yyvsp[0].i, SP_M_V_SEENTRAPS));
yyval.i = 0x8000; yyval.i = 0x8000;
} }
break; break;
case 221: case 221:
{ {
int token = get_trap_type(yyvsp[0].map); int token = get_trap_type(yyvsp[0].map);
if (token == ERR || token == 0) if (token == ERR || token == 0)
lc_error("Unknown trap type '%s'!", yyvsp[0].map); lc_error("Unknown trap type '%s'!", yyvsp[0].map);
Free(yyvsp[0].map); Free(yyvsp[0].map);
@@ -3781,15 +3824,19 @@ case 223:
break; break;
case 224: case 224:
{ {
long cnt = 0; int cnt = 0;
if (in_container_obj) cnt |= SP_OBJ_CONTENT;
if (in_container_obj)
cnt |= SP_OBJ_CONTENT;
add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT));
} }
break; break;
case 225: case 225:
{ {
long cnt = SP_OBJ_CONTAINER; int cnt = SP_OBJ_CONTAINER;
if (in_container_obj) cnt |= SP_OBJ_CONTENT;
if (in_container_obj)
cnt |= SP_OBJ_CONTENT;
add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT));
in_container_obj++; in_container_obj++;
break_stmt_start(); break_stmt_start();
@@ -3828,7 +3875,7 @@ break;
case 230: case 230:
{ {
add_opvars(splev, "ii", add_opvars(splev, "ii",
VA_PASS2((long)yyvsp[0].i, SP_O_V_CURSE)); VA_PASS2((int) yyvsp[0].i, SP_O_V_CURSE));
yyval.i = 0x0001; yyval.i = 0x0001;
} }
break; break;
@@ -3864,7 +3911,7 @@ case 235:
break; break;
case 236: case 236:
{ {
add_opvars(splev, "ii", VA_PASS2((long)yyvsp[0].i, SP_O_V_LIT)); add_opvars(splev, "ii", VA_PASS2((int) yyvsp[0].i, SP_O_V_LIT));
yyval.i = 0x0040; yyval.i = 0x0040;
} }
break; break;
@@ -3894,7 +3941,8 @@ case 239:
break; break;
case 240: case 240:
{ {
add_opvars(splev, "ii", VA_PASS2(yyvsp[0].i, SP_O_V_TRAPPED)); add_opvars(splev, "ii",
VA_PASS2((int) 1, SP_O_V_TRAPPED));
yyval.i = 0x0400; yyval.i = 0x0400;
} }
break; break;
@@ -3924,7 +3972,7 @@ case 244:
break; break;
case 245: case 245:
{ {
add_opvars(splev, "io", VA_PASS2((long)yyvsp[-2].i, SPO_TRAP)); add_opvars(splev, "io", VA_PASS2((int) yyvsp[-2].i, SPO_TRAP));
} }
break; break;
case 246: case 246:
@@ -3958,14 +4006,14 @@ break;
case 247: case 247:
{ {
add_opvars(splev, "iiio", add_opvars(splev, "iiio",
VA_PASS4((long)yyvsp[0].i, 1, 0, SPO_MAZEWALK)); VA_PASS4((int) yyvsp[0].i, 1, 0, SPO_MAZEWALK));
} }
break; break;
case 248: case 248:
{ {
add_opvars(splev, "iiio", add_opvars(splev, "iiio",
VA_PASS4((long)yyvsp[-3].i, (long)yyvsp[-1].i, VA_PASS4((int) yyvsp[-3].i, (int) yyvsp[-1].i,
(long)yyvsp[0].i, SPO_MAZEWALK)); (int) yyvsp[0].i, SPO_MAZEWALK));
} }
break; break;
case 249: case 249:
@@ -3983,13 +4031,13 @@ break;
case 251: case 251:
{ {
add_opvars(splev, "io", add_opvars(splev, "io",
VA_PASS2((long)yyvsp[0].i, SPO_LADDER)); VA_PASS2((int) yyvsp[0].i, SPO_LADDER));
} }
break; break;
case 252: case 252:
{ {
add_opvars(splev, "io", add_opvars(splev, "io",
VA_PASS2((long)yyvsp[0].i, SPO_STAIR)); VA_PASS2((int) yyvsp[0].i, SPO_STAIR));
} }
break; break;
case 253: case 253:
@@ -4251,16 +4299,17 @@ case 304:
break; break;
case 305: case 305:
{ {
check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_STRING); check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_STRING);
vardef_used(variable_definitions, yyvsp[0].map); vardef_used(vardefs, yyvsp[0].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
Free(yyvsp[0].map); Free(yyvsp[0].map);
} }
break; break;
case 306: case 306:
{ {
check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_STRING|SPOVAR_ARRAY); check_vardef_type(vardefs, yyvsp[-3].map,
vardef_used(variable_definitions, yyvsp[-3].map); SPOVAR_STRING | SPOVAR_ARRAY);
vardef_used(vardefs, yyvsp[-3].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
Free(yyvsp[-3].map); Free(yyvsp[-3].map);
} }
@@ -4282,16 +4331,17 @@ case 309:
break; break;
case 310: case 310:
{ {
check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_COORD); check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_COORD);
vardef_used(variable_definitions, yyvsp[0].map); vardef_used(vardefs, yyvsp[0].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
Free(yyvsp[0].map); Free(yyvsp[0].map);
} }
break; break;
case 311: case 311:
{ {
check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_COORD|SPOVAR_ARRAY); check_vardef_type(vardefs, yyvsp[-3].map,
vardef_used(variable_definitions, yyvsp[-3].map); SPOVAR_COORD | SPOVAR_ARRAY);
vardef_used(vardefs, yyvsp[-3].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
Free(yyvsp[-3].map); Free(yyvsp[-3].map);
} }
@@ -4299,7 +4349,8 @@ break;
case 312: case 312:
{ {
if (yyvsp[-3].i < 0 || yyvsp[-1].i < 0 || yyvsp[-3].i >= COLNO || yyvsp[-1].i >= ROWNO) if (yyvsp[-3].i < 0 || yyvsp[-1].i < 0 || yyvsp[-3].i >= COLNO || yyvsp[-1].i >= ROWNO)
lc_error("Coordinates (%li,%li) out of map range!", yyvsp[-3].i, yyvsp[-1].i); lc_error("Coordinates (%li,%li) out of map range!",
yyvsp[-3].i, yyvsp[-1].i);
yyval.i = SP_COORD_PACK(yyvsp[-3].i, yyvsp[-1].i); yyval.i = SP_COORD_PACK(yyvsp[-3].i, yyvsp[-1].i);
} }
break; break;
@@ -4310,7 +4361,7 @@ case 313:
break; break;
case 314: case 314:
{ {
yyval.i = SP_COORD_PACK_RANDOM( yyvsp[-1].i ); yyval.i = SP_COORD_PACK_RANDOM(yyvsp[-1].i);
} }
break; break;
case 315: case 315:
@@ -4332,16 +4383,17 @@ case 317:
break; break;
case 318: case 318:
{ {
check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_REGION); check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_REGION);
vardef_used(variable_definitions, yyvsp[0].map); vardef_used(vardefs, yyvsp[0].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
Free(yyvsp[0].map); Free(yyvsp[0].map);
} }
break; break;
case 319: case 319:
{ {
check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_REGION|SPOVAR_ARRAY); check_vardef_type(vardefs, yyvsp[-3].map,
vardef_used(variable_definitions, yyvsp[-3].map); SPOVAR_REGION | SPOVAR_ARRAY);
vardef_used(vardefs, yyvsp[-3].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
Free(yyvsp[-3].map); Free(yyvsp[-3].map);
} }
@@ -4349,8 +4401,10 @@ break;
case 320: case 320:
{ {
long r = SP_REGION_PACK(yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); long r = SP_REGION_PACK(yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i);
if ( yyvsp[-7].i > yyvsp[-3].i || yyvsp[-5].i > yyvsp[-1].i )
lc_error("Region start > end: (%li,%li,%li,%li)!", yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); if (yyvsp[-7].i > yyvsp[-3].i || yyvsp[-5].i > yyvsp[-1].i)
lc_error("Region start > end: (%ld,%ld,%ld,%ld)!",
yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i);
add_opvars(splev, "r", VA_PASS1(r)); add_opvars(splev, "r", VA_PASS1(r));
yyval.i = r; yyval.i = r;
@@ -4363,16 +4417,17 @@ case 321:
break; break;
case 322: case 322:
{ {
check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_MAPCHAR); check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_MAPCHAR);
vardef_used(variable_definitions, yyvsp[0].map); vardef_used(vardefs, yyvsp[0].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
Free(yyvsp[0].map); Free(yyvsp[0].map);
} }
break; break;
case 323: case 323:
{ {
check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_MAPCHAR|SPOVAR_ARRAY); check_vardef_type(vardefs, yyvsp[-3].map,
vardef_used(variable_definitions, yyvsp[-3].map); SPOVAR_MAPCHAR | SPOVAR_ARRAY);
vardef_used(vardefs, yyvsp[-3].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
Free(yyvsp[-3].map); Free(yyvsp[-3].map);
} }
@@ -4404,16 +4459,17 @@ case 326:
break; break;
case 327: case 327:
{ {
check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_MONST); check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_MONST);
vardef_used(variable_definitions, yyvsp[0].map); vardef_used(vardefs, yyvsp[0].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
Free(yyvsp[0].map); Free(yyvsp[0].map);
} }
break; break;
case 328: case 328:
{ {
check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_MONST|SPOVAR_ARRAY); check_vardef_type(vardefs, yyvsp[-3].map,
vardef_used(variable_definitions, yyvsp[-3].map); SPOVAR_MONST | SPOVAR_ARRAY);
vardef_used(vardefs, yyvsp[-3].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
Free(yyvsp[-3].map); Free(yyvsp[-3].map);
} }
@@ -4463,16 +4519,17 @@ case 333:
break; break;
case 334: case 334:
{ {
check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_OBJ); check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_OBJ);
vardef_used(variable_definitions, yyvsp[0].map); vardef_used(vardefs, yyvsp[0].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
Free(yyvsp[0].map); Free(yyvsp[0].map);
} }
break; break;
case 335: case 335:
{ {
check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_OBJ|SPOVAR_ARRAY); check_vardef_type(vardefs, yyvsp[-3].map,
vardef_used(variable_definitions, yyvsp[-3].map); SPOVAR_OBJ | SPOVAR_ARRAY);
vardef_used(vardefs, yyvsp[-3].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
Free(yyvsp[-3].map); Free(yyvsp[-3].map);
} }
@@ -4484,7 +4541,8 @@ case 336:
lc_error("Unknown object \"%s\"!", yyvsp[0].map); lc_error("Unknown object \"%s\"!", yyvsp[0].map);
yyval.i = -1; yyval.i = -1;
} else } else
yyval.i = SP_OBJ_PACK(m, 1); /* obj class != 0 to force generation of a specific item */ /* obj class != 0 to force generation of a specific item */
yyval.i = SP_OBJ_PACK(m, 1);
Free(yyvsp[0].map); Free(yyvsp[0].map);
} }
break; break;
@@ -4539,8 +4597,8 @@ case 344:
break; break;
case 345: case 345:
{ {
check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_INT); check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_INT);
vardef_used(variable_definitions, yyvsp[0].map); vardef_used(vardefs, yyvsp[0].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
Free(yyvsp[0].map); Free(yyvsp[0].map);
is_inconstant_number = 1; is_inconstant_number = 1;
@@ -4548,9 +4606,9 @@ case 345:
break; break;
case 346: case 346:
{ {
check_vardef_type(variable_definitions, check_vardef_type(vardefs, yyvsp[-3].map,
yyvsp[-3].map, SPOVAR_INT|SPOVAR_ARRAY); SPOVAR_INT | SPOVAR_ARRAY);
vardef_used(variable_definitions, yyvsp[-3].map); vardef_used(vardefs, yyvsp[-3].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map));
Free(yyvsp[-3].map); Free(yyvsp[-3].map);
is_inconstant_number = 1; is_inconstant_number = 1;
@@ -4627,9 +4685,7 @@ case 355:
lc_error("Unknown func param conversion."); lc_error("Unknown func param conversion.");
break; break;
} }
variable_definitions = add_vardef_type( vardefs = add_vardef_type( vardefs, yyvsp[-2].map, vt);
variable_definitions,
yyvsp[-2].map, vt);
} }
Free(yyvsp[-2].map); Free(yyvsp[-2].map);
} }
@@ -4767,8 +4823,8 @@ case 382:
break; break;
case 383: case 383:
{ {
check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_SEL); check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_SEL);
vardef_used(variable_definitions, yyvsp[0].map); vardef_used(vardefs, yyvsp[0].map);
add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map));
Free(yyvsp[0].map); Free(yyvsp[0].map);
} }