From b1f1594fbd88ee48410d883af35b6418616c60b7 Mon Sep 17 00:00:00 2001 From: PatR Date: Tue, 27 Nov 2018 18:42:47 -0800 Subject: [PATCH] updated sys/share/lev_comp.h, lev_{lex,yacc}.c dgn_comp isn't affected. --- sys/share/lev_comp.h | 44 +++--- sys/share/lev_lex.c | 6 +- sys/share/lev_yacc.c | 364 +++++++++++++++++++++++++------------------ 3 files changed, 235 insertions(+), 179 deletions(-) diff --git a/sys/share/lev_comp.h b/sys/share/lev_comp.h index 44818699a..1e3f16fa4 100644 --- a/sys/share/lev_comp.h +++ b/sys/share/lev_comp.h @@ -174,39 +174,39 @@ #define DICE 430 typedef union { - long i; - char* map; - struct { - long room; - long wall; - long door; - } corpos; + long i; + char *map; struct { - long area; - long x1; - long y1; - long x2; - long y2; + long room; + long wall; + long door; + } corpos; + struct { + long area; + long x1; + long y1; + long x2; + long y2; } lregn; struct { - long x; - long y; + long x; + long y; } crd; struct { - long ter; - long lit; + long ter; + long lit; } terr; struct { - long height; - long width; + long height; + long width; } sze; struct { - long die; - long num; + long die; + long num; } dice; struct { - long cfunc; - char *varstr; + long cfunc; + char *varstr; } meth; } YYSTYPE; extern YYSTYPE yylval; diff --git a/sys/share/lev_lex.c b/sys/share/lev_lex.c index 02a754e3d..acf03dbaf 100644 --- a/sys/share/lev_lex.c +++ b/sys/share/lev_lex.c @@ -1024,7 +1024,7 @@ int yy_flex_debug = 0; #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET 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 */ /* 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 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 *)); @@ -3256,7 +3256,7 @@ handle_varstring_check() struct lc_vardefs *vd; 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; int a = ((l & SPOVAR_ARRAY) == SPOVAR_ARRAY); diff --git a/sys/share/lev_yacc.c b/sys/share/lev_yacc.c index 19b423233..fdc9a9af3 100644 --- a/sys/share/lev_yacc.c +++ b/sys/share/lev_yacc.c @@ -11,7 +11,7 @@ #define yyerrok (yyerrflag=0) #define YYRECOVERING (yyerrflag!=0) #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 */ /* NetHack may be freely redistributed. See license for details. */ @@ -126,7 +126,8 @@ int obj_containment = 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 in_switch_statement = 0; @@ -139,7 +140,7 @@ int n_switch_case_list = 0; int allow_break_statements = 0; 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; @@ -158,39 +159,39 @@ extern char curr_token[512]; typedef union { - long i; - char* map; - struct { - long room; - long wall; - long door; - } corpos; + long i; + char *map; struct { - long area; - long x1; - long y1; - long x2; - long y2; + long room; + long wall; + long door; + } corpos; + struct { + long area; + long x1; + long y1; + long x2; + long y2; } lregn; struct { - long x; - long y; + long x; + long y; } crd; struct { - long ter; - long lit; + long ter; + long lit; } terr; struct { - long height; - long width; + long height; + long width; } sze; struct { - long die; - long num; + long die; + long num; } dice; struct { - long cfunc; - char *varstr; + long cfunc; + char *varstr; } meth; } YYSTYPE; #define CHAR 257 @@ -2605,21 +2606,22 @@ case 5: { if (fatal_error > 0) { (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); fatal_error = 0; got_errors++; } else if (!got_errors) { 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); } } Free(yyvsp[-2].map); Free(splev); splev = NULL; - vardef_free_all(variable_definitions); - variable_definitions = NULL; + vardef_free_all(vardefs); + vardefs = NULL; } break; case 6: @@ -2633,10 +2635,11 @@ case 7: start_level_def(&splev, yyvsp[-2].map); if (yyvsp[0].i == -1) { add_opvars(splev, "iiiiiiiio", - VA_PASS9(LVLINIT_MAZEGRID,HWALL,0,0, + VA_PASS9(LVLINIT_MAZEGRID, HWALL, 0,0, 0,0,0,0, SPO_INITLEVEL)); } else { - long bg = what_map_char((char) yyvsp[0].i); + int bg = (int) what_map_char((char) yyvsp[0].i); + add_opvars(splev, "iiiiiiiio", VA_PASS9(LVLINIT_SOLIDFILL, bg, 0,0, 0,0,0,0, SPO_INITLEVEL)); @@ -2660,22 +2663,26 @@ case 9: break; case 10: { - long filling = yyvsp[0].terr.ter; + int filling = (int) yyvsp[0].terr.ter; + if (filling == INVALID_TYPE || filling >= MAX_TYPE) lc_error("INIT_MAP: Invalid fill char type."); 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_y_map = ROWNO; } break; 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) lc_error("INIT_MAP: Invalid fill char type."); - add_opvars(splev, "iiiiiiiio", - VA_PASS9(LVLINIT_MAZEGRID,filling,0,0, + add_opvars(splev, "iiiiiiiio", + VA_PASS9(LVLINIT_MAZEGRID, filling, 0,0, 0,0,0,0, SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; @@ -2690,13 +2697,14 @@ case 12: break; case 13: { - long fg = what_map_char((char) yyvsp[-11].i); - long bg = what_map_char((char) yyvsp[-9].i); - long smoothed = yyvsp[-7].i; - long joined = yyvsp[-5].i; - long lit = yyvsp[-3].i; - long walled = yyvsp[-1].i; - long filling = yyvsp[0].i; + int fg = (int) what_map_char((char) yyvsp[-11].i), + bg = (int) what_map_char((char) yyvsp[-9].i); + int smoothed = (int) yyvsp[-7].i, + joined = (int) yyvsp[-5].i, + lit = (int) yyvsp[-3].i, + walled = (int) yyvsp[-1].i, + filling = (int) yyvsp[0].i; + if (fg == INVALID_TYPE || fg >= MAX_TYPE) lc_error("INIT_MAP: Invalid foreground type."); if (bg == INVALID_TYPE || bg >= MAX_TYPE) @@ -2708,8 +2716,8 @@ case 13: lc_error("INIT_MAP: Invalid fill char type."); add_opvars(splev, "iiiiiiiio", - VA_PASS9(LVLINIT_MINES,filling,walled,lit, - joined,smoothed,bg,fg, + VA_PASS9(LVLINIT_MINES, filling, walled, lit, + joined, smoothed, bg, fg, SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; @@ -2753,7 +2761,8 @@ case 22: break; 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; case 24: @@ -2784,74 +2793,80 @@ break; case 96: { 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)) - lc_error("Trying to shuffle non-array variable '%s'", yyvsp[0].map); - } else lc_error("Trying to shuffle undefined variable '%s'", yyvsp[0].map); + lc_error("Trying to shuffle non-array variable '%s'", + 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)); Free(yyvsp[0].map); } break; 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)); Free(yyvsp[-2].map); } break; 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)); Free(yyvsp[-4].map); } break; 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)); Free(yyvsp[-2].map); } break; 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)); Free(yyvsp[-4].map); } break; 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)); Free(yyvsp[-4].map); } break; 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)); Free(yyvsp[-4].map); } break; 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)); Free(yyvsp[-2].map); } break; 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)); Free(yyvsp[-2].map); } break; case 105: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_INT|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, + SPOVAR_INT | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); @@ -2859,8 +2874,10 @@ case 105: break; case 106: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_COORD|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, + SPOVAR_COORD | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); @@ -2868,8 +2885,10 @@ case 106: break; case 107: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_REGION|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, + SPOVAR_REGION | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); @@ -2877,8 +2896,10 @@ case 107: break; case 108: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-6].map, SPOVAR_MAPCHAR|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-6].map, + SPOVAR_MAPCHAR | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); Free(yyvsp[-6].map); @@ -2886,8 +2907,10 @@ case 108: break; case 109: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-6].map, SPOVAR_MONST|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-6].map, + SPOVAR_MONST | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); Free(yyvsp[-6].map); @@ -2895,8 +2918,10 @@ case 109: break; case 110: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-6].map, SPOVAR_OBJ|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-6].map, + SPOVAR_OBJ | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); Free(yyvsp[-6].map); @@ -2904,8 +2929,10 @@ case 110: break; case 111: { - long n_items = yyvsp[-1].i; - variable_definitions = add_vardef_type(variable_definitions, yyvsp[-4].map, SPOVAR_STRING|SPOVAR_ARRAY); + int n_items = (int) yyvsp[-1].i; + + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, + SPOVAR_STRING | SPOVAR_ARRAY); add_opvars(splev, "iso", VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); Free(yyvsp[-4].map); @@ -3008,8 +3035,8 @@ case 126: splev = &(funcdef->code); Free(yyvsp[-1].map); curr_function = funcdef; - function_tmp_var_defs = variable_definitions; - variable_definitions = NULL; + function_tmp_var_defs = vardefs; + vardefs = NULL; } break; case 127: @@ -3023,21 +3050,25 @@ case 128: splev = function_splev_backup; in_function_definition--; curr_function = NULL; - vardef_free_all(variable_definitions); - variable_definitions = function_tmp_var_defs; + vardef_free_all(vardefs); + vardefs = function_tmp_var_defs; } break; case 129: { struct lc_funcdefs *tmpfunc; + tmpfunc = funcdef_defined(function_definitions, yyvsp[-3].map, 1); if (tmpfunc) { - long l; - long nparams = strlen( yyvsp[-1].map ); + int l; + int nparams = (int) strlen(yyvsp[-1].map); char *fparamstr = funcdef_paramtypes(tmpfunc); + if (strcmp(yyvsp[-1].map, 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(fparamstr); @@ -3045,9 +3076,11 @@ case 129: if (!(tmpfunc->n_called)) { /* we haven't called the function yet, so insert it in the code */ struct opvar *jmp = New(struct opvar); + set_opvar_int(jmp, splev->n_opcodes+1); 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; @@ -3062,9 +3095,10 @@ case 129: } 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", VA_PASS3(nparams, l, SPO_CALL)); tmpfunc->n_called++; @@ -3093,7 +3127,7 @@ case 133: { /* val > rn2(100) */ 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; } break; @@ -3117,6 +3151,7 @@ break; case 137: { struct opvar *chkjmp; + if (in_switch_statement > 0) lc_error("Cannot nest switch-statements."); @@ -3181,6 +3216,7 @@ case 141: { if (n_switch_case_list < MAX_SWITCH_CASES) { struct opvar *tmppush = New(struct opvar); + set_opvar_int(tmppush, splev->n_opcodes); switch_case_value[n_switch_case_list] = yyvsp[-1].i; 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) */ add_opvars(splev, "iso", VA_PASS3(0, buf, SPO_VAR_INIT)); - variable_definitions = add_vardef_type(variable_definitions, - yyvsp[-4].map, SPOVAR_INT); + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_INT); /* 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)); @@ -3260,6 +3295,7 @@ case 149: break; case 150: { + int l; char buf[256], buf2[256]; n_forloops--; @@ -3278,10 +3314,9 @@ case 150: VA_PASS3(0, forloop_list[n_forloops].varname, SPO_VAR_INIT)); /* jump back if compared values were not equal */ - add_opvars(splev, "io", - VA_PASS2( - forloop_list[n_forloops].jmp_point - splev->n_opcodes - 1, - SPO_JNE)); + l = (int) (forloop_list[n_forloops].jmp_point + - splev->n_opcodes - 1); + add_opvars(splev, "io", VA_PASS2(l, SPO_JNE)); Free(forloop_list[n_forloops].varname); break_stmt_end(splev); } @@ -3308,10 +3343,11 @@ case 152: add_opvars(splev, "oio", VA_PASS3(SPO_COPY, 0, SPO_CMP)); 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_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; @@ -3340,8 +3376,10 @@ case 154: { if (n_if_list > 0) { struct opvar *tmppush; + 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?"); } break; @@ -3375,8 +3413,10 @@ case 157: { if (n_if_list > 0) { struct opvar *tmppush; + 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?"); } break; @@ -3393,7 +3433,8 @@ case 158: 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; } else lc_error("IF: Huh?! No else-part address?"); } @@ -3592,7 +3633,7 @@ break; case 192: { 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_y_map = ROWNO; } @@ -3600,15 +3641,15 @@ break; case 193: { add_opvars(splev, "cii", - VA_PASS3(SP_COORD_PACK((yyvsp[-4].i),(yyvsp[-2].i)), - 1, (long)yyvsp[-1].i)); + VA_PASS3(SP_COORD_PACK((yyvsp[-4].i), (yyvsp[-2].i)), + 1, (int) yyvsp[-1].i)); scan_map(yyvsp[0].map, splev); Free(yyvsp[0].map); } break; 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); Free(yyvsp[0].map); } @@ -3640,6 +3681,7 @@ break; case 203: { struct opvar *stopit = New(struct opvar); + set_opvar_int(stopit, SP_M_V_END); add_opcode(splev, SPO_PUSH, stopit); yyval.i = 0x0000; @@ -3661,28 +3703,28 @@ break; case 206: { 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; } break; case 207: { 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; } break; case 208: { 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; } break; case 209: { 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; } break; @@ -3749,13 +3791,14 @@ break; case 220: { 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; } break; case 221: { int token = get_trap_type(yyvsp[0].map); + if (token == ERR || token == 0) lc_error("Unknown trap type '%s'!", yyvsp[0].map); Free(yyvsp[0].map); @@ -3781,15 +3824,19 @@ case 223: break; case 224: { - long cnt = 0; - if (in_container_obj) cnt |= SP_OBJ_CONTENT; + int cnt = 0; + + if (in_container_obj) + cnt |= SP_OBJ_CONTENT; add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); } break; case 225: { - long cnt = SP_OBJ_CONTAINER; - if (in_container_obj) cnt |= SP_OBJ_CONTENT; + int cnt = SP_OBJ_CONTAINER; + + if (in_container_obj) + cnt |= SP_OBJ_CONTENT; add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT)); in_container_obj++; break_stmt_start(); @@ -3828,7 +3875,7 @@ break; case 230: { 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; } break; @@ -3864,7 +3911,7 @@ case 235: break; 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; } break; @@ -3894,7 +3941,8 @@ case 239: break; 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; } break; @@ -3924,7 +3972,7 @@ case 244: break; 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; case 246: @@ -3958,14 +4006,14 @@ break; case 247: { 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; case 248: { add_opvars(splev, "iiio", - VA_PASS4((long)yyvsp[-3].i, (long)yyvsp[-1].i, - (long)yyvsp[0].i, SPO_MAZEWALK)); + VA_PASS4((int) yyvsp[-3].i, (int) yyvsp[-1].i, + (int) yyvsp[0].i, SPO_MAZEWALK)); } break; case 249: @@ -3983,13 +4031,13 @@ break; case 251: { add_opvars(splev, "io", - VA_PASS2((long)yyvsp[0].i, SPO_LADDER)); + VA_PASS2((int) yyvsp[0].i, SPO_LADDER)); } break; case 252: { add_opvars(splev, "io", - VA_PASS2((long)yyvsp[0].i, SPO_STAIR)); + VA_PASS2((int) yyvsp[0].i, SPO_STAIR)); } break; case 253: @@ -4251,16 +4299,17 @@ case 304: break; case 305: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_STRING); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_STRING); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 306: { - check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_STRING|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_STRING | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } @@ -4282,16 +4331,17 @@ case 309: break; case 310: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_COORD); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_COORD); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 311: { - check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_COORD|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_COORD | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } @@ -4299,7 +4349,8 @@ break; case 312: { 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); } break; @@ -4310,7 +4361,7 @@ case 313: break; case 314: { - yyval.i = SP_COORD_PACK_RANDOM( yyvsp[-1].i ); + yyval.i = SP_COORD_PACK_RANDOM(yyvsp[-1].i); } break; case 315: @@ -4332,16 +4383,17 @@ case 317: break; case 318: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_REGION); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_REGION); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 319: { - check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_REGION|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_REGION | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } @@ -4349,8 +4401,10 @@ break; case 320: { 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)); yyval.i = r; @@ -4363,16 +4417,17 @@ case 321: break; case 322: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_MAPCHAR); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_MAPCHAR); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 323: { - check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_MAPCHAR|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_MAPCHAR | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } @@ -4404,16 +4459,17 @@ case 326: break; case 327: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_MONST); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_MONST); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 328: { - check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_MONST|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_MONST | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } @@ -4463,16 +4519,17 @@ case 333: break; case 334: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_OBJ); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_OBJ); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } break; case 335: { - check_vardef_type(variable_definitions, yyvsp[-3].map, SPOVAR_OBJ|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_OBJ | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); } @@ -4484,7 +4541,8 @@ case 336: lc_error("Unknown object \"%s\"!", yyvsp[0].map); yyval.i = -1; } 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); } break; @@ -4539,8 +4597,8 @@ case 344: break; case 345: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_INT); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_INT); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); is_inconstant_number = 1; @@ -4548,9 +4606,9 @@ case 345: break; case 346: { - check_vardef_type(variable_definitions, - yyvsp[-3].map, SPOVAR_INT|SPOVAR_ARRAY); - vardef_used(variable_definitions, yyvsp[-3].map); + check_vardef_type(vardefs, yyvsp[-3].map, + SPOVAR_INT | SPOVAR_ARRAY); + vardef_used(vardefs, yyvsp[-3].map); add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); Free(yyvsp[-3].map); is_inconstant_number = 1; @@ -4627,9 +4685,7 @@ case 355: lc_error("Unknown func param conversion."); break; } - variable_definitions = add_vardef_type( - variable_definitions, - yyvsp[-2].map, vt); + vardefs = add_vardef_type( vardefs, yyvsp[-2].map, vt); } Free(yyvsp[-2].map); } @@ -4767,8 +4823,8 @@ case 382: break; case 383: { - check_vardef_type(variable_definitions, yyvsp[0].map, SPOVAR_SEL); - vardef_used(variable_definitions, yyvsp[0].map); + check_vardef_type(vardefs, yyvsp[0].map, SPOVAR_SEL); + vardef_used(vardefs, yyvsp[0].map); add_opvars(splev, "v", VA_PASS1(yyvsp[0].map)); Free(yyvsp[0].map); } -- 2.40.0