OSDN Git Service

upgrade to 3.6.2
[jnethack/source.git] / util / lev_comp.y
index 9122ca5..1b1c930 100644 (file)
@@ -1,5 +1,5 @@
 %{
-/* NetHack 3.6  lev_comp.y     $NHDT-Date: 1455746893 2016/02/17 22:08:13 $  $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.21 $ */
+/* NetHack 3.6  lev_comp.y     $NHDT-Date: 1543371691 2018/11/28 02:21:31 $  $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.22 $ */
 /*      Copyright (c) 1989 by Jean-Christophe Collet */
 /* NetHack may be freely redistributed.  See license for details. */
 
@@ -114,7 +114,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;
@@ -127,7 +128,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;
@@ -148,39 +149,39 @@ extern char curr_token[512];
 
 %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;
 }
 
@@ -214,7 +215,8 @@ extern char curr_token[512];
 %token <i> MSG_OUTPUT_TYPE
 %token <i> COMPARE_TYPE
 %token  <i> UNKNOWN_TYPE
-%token <i> rect_ID fillrect_ID line_ID randline_ID grow_ID selection_ID flood_ID
+%token <i> rect_ID fillrect_ID line_ID randline_ID grow_ID
+%token <i> selection_ID flood_ID
 %token <i> rndcoord_ID circle_ID ellipse_ID filter_ID complement_ID
 %token <i> gradient_ID GRADIENT_TYPE LIMITED HUMIDITY_TYPE
 %token <i> ',' ':' '(' ')' '[' ']' '{' '}'
@@ -247,12 +249,14 @@ extern char curr_token[512];
 %type  <i> dir_list teleprt_detail
 %type  <i> object_infos object_info monster_infos monster_info
 %type  <i> levstatements stmt_block region_detail_end
-%type  <i> engraving_type flag_list roomregionflag roomregionflags optroomregionflags
+%type  <i> engraving_type flag_list roomregionflag roomregionflags
+%type  <i> optroomregionflags
 %type  <i> humidity_flags
 %type  <i> comparestmt encodecoord encoderegion mapchar
 %type  <i> seen_trap_mask
 %type  <i> encodemonster encodeobj encodeobj_list
-%type  <i> integer_list string_list encodecoord_list encoderegion_list mapchar_list encodemonster_list
+%type  <i> integer_list string_list encodecoord_list encoderegion_list
+%type  <i> mapchar_list encodemonster_list
 %type  <i> opt_percent opt_fillchar
 %type  <i> all_integers
 %type  <i> ter_selection ter_selection_x
@@ -286,21 +290,22 @@ level             : level_def flags levstatements
                  {
                        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, $1);
                                fatal_error = 0;
                                got_errors++;
                        } else if (!got_errors) {
                                if (!write_level_file($1, splev)) {
-                                   lc_error("Can't write output file for '%s'!", $1);
+                                    lc_error("Can't write output file for '%s'!",
+                                             $1);
                                    exit(EXIT_FAILURE);
                                }
                        }
                        Free($1);
                        Free(splev);
                        splev = NULL;
-                       vardef_free_all(variable_definitions);
-                       variable_definitions = NULL;
+                       vardef_free_all(vardefs);
+                       vardefs = NULL;
                  }
                ;
 
@@ -314,10 +319,11 @@ level_def : LEVEL_ID ':' STRING
                      start_level_def(&splev, $3);
                      if ($5 == -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) $5);
+                         int bg = (int) what_map_char((char) $5);
+
                          add_opvars(splev, "iiiiiiiio",
                                     VA_PASS9(LVLINIT_SOLIDFILL, bg, 0,0,
                                              0,0,0,0, SPO_INITLEVEL));
@@ -342,21 +348,25 @@ mazefiller        : RANDOM_TYPE
 
 lev_init       : LEV_INIT_ID ':' SOLID_FILL_ID ',' terrain_type
                  {
-                     long filling = $5.ter;
+                     int filling = (int) $5.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)$5.lit, 0,0,0,0, SPO_INITLEVEL);
+                                VA_PASS9(LVLINIT_SOLIDFILL, filling,
+                                          0, (int) $5.lit,
+                                          0,0,0,0, SPO_INITLEVEL));
                      max_x_map = COLNO-1;
                      max_y_map = ROWNO;
                  }
                | LEV_INIT_ID ':' MAZE_GRID_ID ',' CHAR
                  {
-                     long filling = what_map_char((char) $5);
+                     int filling = (int) what_map_char((char) $5);
+
                      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;
@@ -369,13 +379,14 @@ lev_init  : LEV_INIT_ID ':' SOLID_FILL_ID ',' terrain_type
                  }
                | LEV_INIT_ID ':' MINES_ID ',' CHAR ',' CHAR ',' BOOLEAN ',' BOOLEAN ',' light_state ',' walled opt_fillchar
                  {
-                     long fg = what_map_char((char) $5);
-                     long bg = what_map_char((char) $7);
-                     long smoothed = $9;
-                     long joined = $11;
-                     long lit = $13;
-                     long walled = $15;
-                     long filling = $16;
+                      int fg = (int) what_map_char((char) $5),
+                          bg = (int) what_map_char((char) $7);
+                      int smoothed = (int) $9,
+                          joined = (int) $11,
+                          lit = (int) $13,
+                          walled = (int) $15,
+                          filling = (int) $16;
+
                      if (fg == INVALID_TYPE || fg >= MAX_TYPE)
                          lc_error("INIT_MAP: Invalid foreground type.");
                      if (bg == INVALID_TYPE || bg >= MAX_TYPE)
@@ -387,8 +398,8 @@ lev_init    : LEV_INIT_ID ':' SOLID_FILL_ID ',' terrain_type
                          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;
@@ -437,7 +448,8 @@ flags               : /* nothing */
                  }
                | FLAGS_ID ':' flag_list
                  {
-                     add_opvars(splev, "io", VA_PASS2($3, SPO_LEVEL_FLAGS));
+                     add_opvars(splev, "io",
+                                 VA_PASS2((int) $3, SPO_LEVEL_FLAGS));
                  }
                ;
 
@@ -547,10 +559,14 @@ any_var_or_unk    : VARSTRING
 shuffle_detail : SHUFFLE_ID ':' any_var_array
                  {
                      struct lc_vardefs *vd;
-                     if ((vd = vardef_defined(variable_definitions, $3, 1))) {
+
+                     if ((vd = vardef_defined(vardefs, $3, 1))) {
                          if (!(vd->var_type & SPOVAR_ARRAY))
-                             lc_error("Trying to shuffle non-array variable '%s'", $3);
-                     } else lc_error("Trying to shuffle undefined variable '%s'", $3);
+                             lc_error("Trying to shuffle non-array variable '%s'",
+                                       $3);
+                     } else
+                          lc_error("Trying to shuffle undefined variable '%s'",
+                                   $3);
                      add_opvars(splev, "so", VA_PASS2($3, SPO_SHUFFLE_ARRAY));
                      Free($3);
                  }
@@ -558,104 +574,118 @@ shuffle_detail  : SHUFFLE_ID ':' any_var_array
 
 variable_define        : any_var_or_arr '=' math_expr_var
                  {
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_INT);
+                     vardefs = add_vardef_type(vardefs, $1, SPOVAR_INT);
                      add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' selection_ID ':' ter_selection
                  {
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_SEL);
+                     vardefs = add_vardef_type(vardefs, $1, SPOVAR_SEL);
                      add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' string_expr
                  {
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_STRING);
+                     vardefs = add_vardef_type(vardefs, $1, SPOVAR_STRING);
                      add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' terrainid ':' mapchar_or_var
                  {
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_MAPCHAR);
+                     vardefs = add_vardef_type(vardefs, $1, SPOVAR_MAPCHAR);
                      add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' monsterid ':' monster_or_var
                  {
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_MONST);
+                     vardefs = add_vardef_type(vardefs, $1, SPOVAR_MONST);
                      add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' objectid ':' object_or_var
                  {
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_OBJ);
+                     vardefs = add_vardef_type(vardefs, $1, SPOVAR_OBJ);
                      add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' coord_or_var
                  {
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_COORD);
+                     vardefs = add_vardef_type(vardefs, $1, SPOVAR_COORD);
                      add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' region_or_var
                  {
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_REGION);
+                     vardefs = add_vardef_type(vardefs, $1, SPOVAR_REGION);
                      add_opvars(splev, "iso", VA_PASS3(0, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' '{' integer_list '}'
                  {
-                     long n_items = $4;
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_INT|SPOVAR_ARRAY);
+                     int n_items = (int) $4;
+
+                     vardefs = add_vardef_type(vardefs, $1,
+                                                SPOVAR_INT | SPOVAR_ARRAY);
                      add_opvars(splev, "iso",
                                 VA_PASS3(n_items, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' '{' encodecoord_list '}'
                  {
-                     long n_items = $4;
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_COORD|SPOVAR_ARRAY);
+                     int n_items = (int) $4;
+
+                     vardefs = add_vardef_type(vardefs, $1,
+                                                SPOVAR_COORD | SPOVAR_ARRAY);
                      add_opvars(splev, "iso",
                                 VA_PASS3(n_items, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' '{' encoderegion_list '}'
                  {
-                     long n_items = $4;
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_REGION|SPOVAR_ARRAY);
+                      int n_items = (int) $4;
+
+                     vardefs = add_vardef_type(vardefs, $1,
+                                                SPOVAR_REGION | SPOVAR_ARRAY);
                      add_opvars(splev, "iso",
                                 VA_PASS3(n_items, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' terrainid ':' '{' mapchar_list '}'
                  {
-                     long n_items = $6;
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_MAPCHAR|SPOVAR_ARRAY);
+                      int n_items = (int) $6;
+
+                     vardefs = add_vardef_type(vardefs, $1,
+                                                SPOVAR_MAPCHAR | SPOVAR_ARRAY);
                      add_opvars(splev, "iso",
                                 VA_PASS3(n_items, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' monsterid ':' '{' encodemonster_list '}'
                  {
-                     long n_items = $6;
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_MONST|SPOVAR_ARRAY);
+                     int n_items = (int) $6;
+
+                     vardefs = add_vardef_type(vardefs, $1,
+                                                SPOVAR_MONST | SPOVAR_ARRAY);
                      add_opvars(splev, "iso",
                                 VA_PASS3(n_items, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' objectid ':' '{' encodeobj_list '}'
                  {
-                     long n_items = $6;
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_OBJ|SPOVAR_ARRAY);
+                      int n_items = (int) $6;
+
+                     vardefs = add_vardef_type(vardefs, $1,
+                                                SPOVAR_OBJ | SPOVAR_ARRAY);
                      add_opvars(splev, "iso",
                                 VA_PASS3(n_items, $1, SPO_VAR_INIT));
                      Free($1);
                  }
                | any_var_or_arr '=' '{' string_list '}'
                  {
-                     long n_items = $4;
-                     variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_STRING|SPOVAR_ARRAY);
+                      int n_items = (int) $4;
+
+                     vardefs = add_vardef_type(vardefs, $1,
+                                                SPOVAR_STRING | SPOVAR_ARRAY);
                      add_opvars(splev, "iso",
                                 VA_PASS3(n_items, $1, SPO_VAR_INIT));
                      Free($1);
@@ -759,8 +789,8 @@ function_define     : FUNCTION_ID NQSTRING '('
                      splev = &(funcdef->code);
                      Free($2);
                      curr_function = funcdef;
-                     function_tmp_var_defs = variable_definitions;
-                     variable_definitions = NULL;
+                     function_tmp_var_defs = vardefs;
+                     vardefs = NULL;
                  }
                func_params_list ')'
                  {
@@ -772,22 +802,26 @@ function_define   : FUNCTION_ID NQSTRING '('
                      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;
                  }
                ;
 
 function_call  : NQSTRING '(' func_call_params_list ')'
                  {
                      struct lc_funcdefs *tmpfunc;
+
                      tmpfunc = funcdef_defined(function_definitions, $1, 1);
                      if (tmpfunc) {
-                         long l;
-                         long nparams = strlen( $3 );
+                         int l;
+                         int nparams = (int) strlen($3);
                          char *fparamstr = funcdef_paramtypes(tmpfunc);
+
                          if (strcmp($3, fparamstr)) {
                              char *tmps = strdup(decode_parm_str(fparamstr));
-                             lc_error("Function '%s' requires params '%s', got '%s' instead.", $1, tmps, decode_parm_str($3));
+
+                             lc_error("Function '%s' requires params '%s', got '%s' instead.",
+                                       $1, tmps, decode_parm_str($3));
                              Free(tmps);
                          }
                          Free(fparamstr);
@@ -795,9 +829,11 @@ function_call      : NQSTRING '(' func_call_params_list ')'
                          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;
 
@@ -812,9 +848,10 @@ function_call      : NQSTRING '(' func_call_params_list ')'
                              }
 
                              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++;
@@ -845,7 +882,7 @@ comparestmt     : PERCENT
                   {
                      /* val > rn2(100) */
                      add_opvars(splev, "iio",
-                                VA_PASS3((long)$1, 100, SPO_RN2));
+                                VA_PASS3((int) $1, 100, SPO_RN2));
                      $$ = SPO_JG;
                   }
                | '[' math_expr_var COMPARE_TYPE math_expr_var ']'
@@ -867,6 +904,7 @@ switchstatement     : SWITCH_ID
                  '[' integer_or_var ']'
                  {
                      struct opvar *chkjmp;
+
                      if (in_switch_statement > 0)
                          lc_error("Cannot nest switch-statements.");
 
@@ -935,6 +973,7 @@ switchcase  : CASE_ID all_integers ':'
                  {
                      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] = $2;
                          switch_case_list[n_switch_case_list++] = tmppush;
@@ -986,8 +1025,7 @@ forstmt_start      : FOR_ID any_var_or_unk '=' math_expr_var for_to_span math_expr_va
                      /* 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,
-                                                            $2, SPOVAR_INT);
+                     vardefs = add_vardef_type(vardefs, $2, SPOVAR_INT);
                      /* define the for-loop variable. value is in stack (1st math_expr) */
                      add_opvars(splev, "iso", VA_PASS3(0, $2, SPO_VAR_INIT));
 
@@ -1017,6 +1055,7 @@ forstatement      : forstmt_start
                  }
                 stmt_block
                  {
+                      int l;
                      char buf[256], buf2[256];
 
                      n_forloops--;
@@ -1035,10 +1074,9 @@ forstatement     : forstmt_start
                                 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);
                  }
@@ -1065,10 +1103,11 @@ loopstatement   : LOOP_ID '[' integer_or_var ']'
                      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);
                  }
                ;
@@ -1097,8 +1136,10 @@ chancestatement  : comparestmt ':'
                  {
                      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?");
                  }
                ;
@@ -1133,8 +1174,10 @@ if_ending        : stmt_block
                  {
                      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?");
                  }
                | stmt_block
@@ -1150,7 +1193,8 @@ if_ending : stmt_block
 
                          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?");
                  }
@@ -1363,21 +1407,21 @@ door_pos        : INTEGER
 map_definition : NOMAP_ID
                  {
                      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;
                  }
                | GEOMETRY_ID ':' h_justif ',' v_justif roomfill MAP_ID
                  {
                      add_opvars(splev, "cii",
-                                VA_PASS3(SP_COORD_PACK(($3),($5)),
-                                         1, (long)$6));
+                                VA_PASS3(SP_COORD_PACK(($3), ($5)),
+                                         1, (int) $6));
                      scan_map($7, splev);
                      Free($7);
                  }
                | GEOMETRY_ID ':' coord_or_var roomfill MAP_ID
                  {
-                     add_opvars(splev, "ii", VA_PASS2(2, (long)$4));
+                     add_opvars(splev, "ii", VA_PASS2(2, (int) $4));
                      scan_map($5, splev);
                      Free($5);
                  }
@@ -1418,6 +1462,7 @@ monster_desc      : monster_or_var ',' coord_or_var monster_infos
 monster_infos  : /* nothing */
                  {
                      struct opvar *stopit = New(struct opvar);
+
                      set_opvar_int(stopit, SP_M_V_END);
                      add_opcode(splev, SPO_PUSH, stopit);
                      $$ = 0x0000;
@@ -1438,25 +1483,25 @@ monster_info    : string_expr
                | MON_ATTITUDE
                  {
                      add_opvars(splev, "ii",
-                                VA_PASS2((long)$<i>1, SP_M_V_PEACEFUL));
+                                VA_PASS2((int) $<i>1, SP_M_V_PEACEFUL));
                      $$ = 0x0002;
                  }
                | MON_ALERTNESS
                  {
                      add_opvars(splev, "ii",
-                                VA_PASS2((long)$<i>1, SP_M_V_ASLEEP));
+                                VA_PASS2((int) $<i>1, SP_M_V_ASLEEP));
                      $$ = 0x0004;
                  }
                | alignment_prfx
                  {
                      add_opvars(splev, "ii",
-                                VA_PASS2((long)$1, SP_M_V_ALIGN));
+                                VA_PASS2((int) $1, SP_M_V_ALIGN));
                      $$ = 0x0008;
                  }
                | MON_APPEARANCE string_expr
                  {
                      add_opvars(splev, "ii",
-                                VA_PASS2((long)$<i>1, SP_M_V_APPEAR));
+                                VA_PASS2((int) $<i>1, SP_M_V_APPEAR));
                      $$ = 0x0010;
                  }
                | FEMALE_ID
@@ -1512,7 +1557,7 @@ monster_info      : string_expr
                | SEENTRAPS_ID ':' seen_trap_mask
                  {
                      add_opvars(splev, "ii",
-                                VA_PASS2((long)$3, SP_M_V_SEENTRAPS));
+                                VA_PASS2((int) $3, SP_M_V_SEENTRAPS));
                      $$ = 0x8000;
                  }
                ;
@@ -1520,6 +1565,7 @@ monster_info      : string_expr
 seen_trap_mask : STRING
                  {
                      int token = get_trap_type($1);
+
                      if (token == ERR || token == 0)
                          lc_error("Unknown trap type '%s'!", $1);
                       Free($1);
@@ -1544,14 +1590,18 @@ seen_trap_mask  : STRING
 
 object_detail  : OBJECT_ID ':' object_desc
                  {
-                     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));
                  }
                | COBJECT_ID ':' object_desc
                  {
-                     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();
@@ -1591,7 +1641,7 @@ object_infos      : /* nothing */
 object_info    : CURSE_TYPE
                  {
                      add_opvars(splev, "ii",
-                                VA_PASS2((long)$1, SP_O_V_CURSE));
+                                VA_PASS2((int) $1, SP_O_V_CURSE));
                      $$ = 0x0001;
                  }
                | MONTYPE_ID ':' monster_or_var
@@ -1621,7 +1671,7 @@ object_info       : CURSE_TYPE
                  }
                | LIGHT_STATE
                  {
-                     add_opvars(splev, "ii", VA_PASS2((long)$1, SP_O_V_LIT));
+                     add_opvars(splev, "ii", VA_PASS2((int) $1, SP_O_V_LIT));
                      $$ = 0x0040;
                  }
                | ERODED_ID ':' integer_or_var
@@ -1647,7 +1697,8 @@ object_info       : CURSE_TYPE
                  }
                | TRAPPED_STATE
                  {
-                     add_opvars(splev, "ii", VA_PASS2($1, SP_O_V_TRAPPED));
+                     add_opvars(splev, "ii",
+                                 VA_PASS2((int) $1, SP_O_V_TRAPPED));
                      $$ = 0x0400;
                  }
                | RECHARGED_ID ':' integer_or_var
@@ -1674,7 +1725,7 @@ object_info       : CURSE_TYPE
 
 trap_detail    : TRAP_ID ':' trap_name ',' coord_or_var
                  {
-                     add_opvars(splev, "io", VA_PASS2((long)$3, SPO_TRAP));
+                     add_opvars(splev, "io", VA_PASS2((int) $3, SPO_TRAP));
                  }
                ;
 
@@ -1710,13 +1761,13 @@ drawbridge_detail: DRAWBRIDGE_ID ':' coord_or_var ',' DIRECTION ',' door_state
 mazewalk_detail : MAZEWALK_ID ':' coord_or_var ',' DIRECTION
                  {
                      add_opvars(splev, "iiio",
-                                VA_PASS4((long)$5, 1, 0, SPO_MAZEWALK));
+                                VA_PASS4((int) $5, 1, 0, SPO_MAZEWALK));
                  }
                | MAZEWALK_ID ':' coord_or_var ',' DIRECTION ',' BOOLEAN opt_fillchar
                  {
                      add_opvars(splev, "iiio",
-                                VA_PASS4((long)$5, (long)$<i>7,
-                                         (long)$8, SPO_MAZEWALK));
+                                VA_PASS4((int) $5, (int) $<i>7,
+                                         (int) $8, SPO_MAZEWALK));
                  }
                ;
 
@@ -1735,14 +1786,14 @@ wallify_detail  : WALLIFY_ID
 ladder_detail  : LADDER_ID ':' coord_or_var ',' UP_OR_DOWN
                  {
                      add_opvars(splev, "io",
-                                VA_PASS2((long)$<i>5, SPO_LADDER));
+                                VA_PASS2((int) $<i>5, SPO_LADDER));
                  }
                ;
 
 stair_detail   : STAIR_ID ':' coord_or_var ',' UP_OR_DOWN
                  {
                      add_opvars(splev, "io",
-                                VA_PASS2((long)$<i>5, SPO_STAIR));
+                                VA_PASS2((int) $<i>5, SPO_STAIR));
                  }
                ;
 
@@ -2040,15 +2091,16 @@ string_or_var   : STRING
                  }
                | VARSTRING_STRING
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_STRING);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1, SPOVAR_STRING);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                  }
                | VARSTRING_STRING_ARRAY '[' math_expr_var ']'
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_STRING|SPOVAR_ARRAY);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1,
+                                        SPOVAR_STRING | SPOVAR_ARRAY);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                  }
@@ -2071,15 +2123,16 @@ coord_or_var    : encodecoord
                  }
                | VARSTRING_COORD
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_COORD);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1, SPOVAR_COORD);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                  }
                | VARSTRING_COORD_ARRAY '[' math_expr_var ']'
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_COORD|SPOVAR_ARRAY);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1,
+                                        SPOVAR_COORD | SPOVAR_ARRAY);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                  }
@@ -2088,7 +2141,8 @@ coord_or_var      : encodecoord
 encodecoord    : '(' INTEGER ',' INTEGER ')'
                  {
                      if ($2 < 0 || $4 < 0 || $2 >= COLNO || $4 >= ROWNO)
-                         lc_error("Coordinates (%li,%li) out of map range!", $2, $4);
+                          lc_error("Coordinates (%li,%li) out of map range!",
+                                   $2, $4);
                      $$ = SP_COORD_PACK($2, $4);
                  }
                | RANDOM_TYPE
@@ -2097,7 +2151,7 @@ encodecoord       : '(' INTEGER ',' INTEGER ')'
                  }
                | RANDOM_TYPE_BRACKET humidity_flags ']'
                  {
-                     $$ = SP_COORD_PACK_RANDOM( $2 );
+                     $$ = SP_COORD_PACK_RANDOM($2);
                  }
                ;
 
@@ -2119,15 +2173,16 @@ region_or_var   : encoderegion
                  }
                | VARSTRING_REGION
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_REGION);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1, SPOVAR_REGION);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                  }
                | VARSTRING_REGION_ARRAY '[' math_expr_var ']'
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_REGION|SPOVAR_ARRAY);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1,
+                                        SPOVAR_REGION | SPOVAR_ARRAY);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                  }
@@ -2136,8 +2191,10 @@ region_or_var    : encoderegion
 encoderegion   : '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'
                  {
                      long r = SP_REGION_PACK($2, $4, $6, $8);
-                     if ( $2 > $6 || $4 > $8 )
-                         lc_error("Region start > end: (%li,%li,%li,%li)!", $2, $4, $6, $8);
+
+                     if ($2 > $6 || $4 > $8)
+                         lc_error("Region start > end: (%ld,%ld,%ld,%ld)!",
+                                   $2, $4, $6, $8);
 
                      add_opvars(splev, "r", VA_PASS1(r));
                      $$ = r;
@@ -2150,15 +2207,16 @@ mapchar_or_var  : mapchar
                  }
                | VARSTRING_MAPCHAR
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_MAPCHAR);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1, SPOVAR_MAPCHAR);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                  }
                | VARSTRING_MAPCHAR_ARRAY '[' math_expr_var ']'
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_MAPCHAR|SPOVAR_ARRAY);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1,
+                                        SPOVAR_MAPCHAR | SPOVAR_ARRAY);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                  }
@@ -2190,15 +2248,16 @@ monster_or_var  : encodemonster
                  }
                | VARSTRING_MONST
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_MONST);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1, SPOVAR_MONST);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                  }
                | VARSTRING_MONST_ARRAY '[' math_expr_var ']'
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_MONST|SPOVAR_ARRAY);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1,
+                                        SPOVAR_MONST | SPOVAR_ARRAY);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                  }
@@ -2246,15 +2305,16 @@ object_or_var   : encodeobj
                  }
                | VARSTRING_OBJ
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_OBJ);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1, SPOVAR_OBJ);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                  }
                | VARSTRING_OBJ_ARRAY '[' math_expr_var ']'
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_OBJ|SPOVAR_ARRAY);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1,
+                                        SPOVAR_OBJ | SPOVAR_ARRAY);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                  }
@@ -2267,7 +2327,8 @@ encodeobj : STRING
                          lc_error("Unknown object \"%s\"!", $1);
                          $$ = -1;
                      } else
-                         $$ = 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 */
+                          $$ = SP_OBJ_PACK(m, 1);
                       Free($1);
                  }
                | CHAR
@@ -2317,17 +2378,17 @@ math_expr_var   : INTEGER
                  }
                | VARSTRING_INT
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_INT);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1, SPOVAR_INT);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                      is_inconstant_number = 1;
                  }
                | VARSTRING_INT_ARRAY '[' math_expr_var ']'
                  {
-                     check_vardef_type(variable_definitions,
-                                       $1, SPOVAR_INT|SPOVAR_ARRAY);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1,
+                                       SPOVAR_INT | SPOVAR_ARRAY);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                      is_inconstant_number = 1;
@@ -2398,9 +2459,7 @@ func_param_part   : any_var_or_arr ':' func_param_type
                               lc_error("Unknown func param conversion.");
                               break;
                          }
-                         variable_definitions = add_vardef_type(
-                                                        variable_definitions,
-                                                                $1, vt);
+                         vardefs = add_vardef_type( vardefs, $1, vt);
                      }
                      Free($1);
                  }
@@ -2531,8 +2590,8 @@ ter_selection_x   : coord_or_var
                  }
                | VARSTRING_SEL
                  {
-                     check_vardef_type(variable_definitions, $1, SPOVAR_SEL);
-                     vardef_used(variable_definitions, $1);
+                     check_vardef_type(vardefs, $1, SPOVAR_SEL);
+                     vardef_used(vardefs, $1);
                      add_opvars(splev, "v", VA_PASS1($1));
                      Free($1);
                  }