%{
-/* NetHack 3.5 lev_comp.y $NHDT-Date: 1428574134 2015/04/09 10:08:54 $ $NHDT-Branch: master $:$NHDT-Revision: 1.10 $ */
+/* NetHack 3.5 lev_comp.y $NHDT-Date: 1428655167 2015/04/10 08:39:27 $ $NHDT-Branch: master $:$NHDT-Revision: 1.11 $ */
/* NetHack 3.5 lev_comp.y $Date: 2009/05/06 10:54:31 $ $Revision: 1.8 $ */
/* SCCS Id: @(#)lev_yacc.c 3.5 2007/08/01 */
/* Copyright (c) 1989 by Jean-Christophe Collet */
#pragma alloca /* keep leading space! */
#endif
+#define SPEC_LEV /* for USE_OLDARGS (sp_lev.h) */
#include "hack.h"
#include "sp_lev.h"
{
start_level_def(&splev, $3);
if ($5 == -1) {
- add_opvars(splev, "iiiiiiiio", LVLINIT_MAZEGRID,HWALL,0,0, 0,0,0,0, SPO_INITLEVEL);
+ add_opvars(splev, "iiiiiiiio",
+ VA_PASS9(LVLINIT_MAZEGRID,HWALL,0,0,
+ 0,0,0,0, SPO_INITLEVEL));
} else {
long bg = what_map_char((char) $5);
- add_opvars(splev, "iiiiiiiio", LVLINIT_SOLIDFILL, bg, 0,0, 0,0,0,0, SPO_INITLEVEL);
+ add_opvars(splev, "iiiiiiiio",
+ VA_PASS9(LVLINIT_SOLIDFILL, bg, 0,0,
+ 0,0,0,0, SPO_INITLEVEL));
}
- add_opvars(splev, "io", MAZELEVEL, SPO_LEVEL_FLAGS);
+ add_opvars(splev, "io",
+ VA_PASS2(MAZELEVEL, SPO_LEVEL_FLAGS));
max_x_map = COLNO-1;
max_y_map = ROWNO;
$$ = $3;
long filling = $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);
+ add_opvars(splev, "iiiiiiiio",
+ LVLINIT_SOLIDFILL,filling,0,(long)$5.lit, 0,0,0,0, SPO_INITLEVEL);
max_x_map = COLNO-1;
max_y_map = ROWNO;
}
long filling = what_map_char((char) $5);
if (filling == INVALID_TYPE || filling >= MAX_TYPE)
lc_error("INIT_MAP: Invalid fill char type.");
- add_opvars(splev, "iiiiiiiio", LVLINIT_MAZEGRID,filling,0,0, 0,0,0,0, SPO_INITLEVEL);
+ 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;
}
| LEV_INIT_ID ':' ROGUELEV_ID
{
- add_opvars(splev, "iiiiiiiio", LVLINIT_ROGUE,0,0,0,0,0,0,0, SPO_INITLEVEL);
+ add_opvars(splev, "iiiiiiiio",
+ VA_PASS9(LVLINIT_ROGUE,0,0,0,
+ 0,0,0,0, SPO_INITLEVEL));
}
| LEV_INIT_ID ':' MINES_ID ',' CHAR ',' CHAR ',' BOOLEAN ',' BOOLEAN ',' light_state ',' walled opt_fillchar
{
if (filling == INVALID_TYPE)
lc_error("INIT_MAP: Invalid fill char type.");
- add_opvars(splev, "iiiiiiiio", LVLINIT_MINES,filling,walled,lit, joined,smoothed,bg,fg, SPO_INITLEVEL);
+ add_opvars(splev, "iiiiiiiio",
+ VA_PASS9(LVLINIT_MINES,filling,walled,lit,
+ joined,smoothed,bg,fg,
+ SPO_INITLEVEL));
max_x_map = COLNO-1;
max_y_map = ROWNO;
}
opt_coord_or_var : /* nothing */
{
- add_opvars(splev, "o", SPO_COPY);
+ add_opvars(splev, "o", VA_PASS1(SPO_COPY));
$$ = 0;
}
| ',' coord_or_var
flags : /* nothing */
{
- add_opvars(splev, "io", 0, SPO_LEVEL_FLAGS);
+ add_opvars(splev, "io", VA_PASS2(0, SPO_LEVEL_FLAGS));
}
| FLAGS_ID ':' flag_list
{
- add_opvars(splev, "io", $3, SPO_LEVEL_FLAGS);
+ add_opvars(splev, "io", VA_PASS2($3, SPO_LEVEL_FLAGS));
}
;
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);
- add_opvars(splev, "so", $3, SPO_SHUFFLE_ARRAY);
+ add_opvars(splev, "so", VA_PASS2($3, SPO_SHUFFLE_ARRAY));
Free($3);
}
;
variable_define : any_var_or_arr '=' math_expr_var
{
variable_definitions = add_vardef_type(variable_definitions, $1, SPOVAR_INT);
- add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", 0, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT);
+ 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);
- add_opvars(splev, "iso", n_items, $1, SPO_VAR_INIT);
+ add_opvars(splev, "iso",
+ VA_PASS3(n_items, $1, SPO_VAR_INIT));
Free($1);
}
;
encodeobj_list : encodeobj
{
- add_opvars(splev, "O", $1);
+ add_opvars(splev, "O", VA_PASS1($1));
$$ = 1;
}
| encodeobj_list ',' encodeobj
{
- add_opvars(splev, "O", $3);
+ add_opvars(splev, "O", VA_PASS1($3));
$$ = 1 + $1;
}
;
encodemonster_list : encodemonster
{
- add_opvars(splev, "M", $1);
+ add_opvars(splev, "M", VA_PASS1($1));
$$ = 1;
}
| encodemonster_list ',' encodemonster
{
- add_opvars(splev, "M", $3);
+ add_opvars(splev, "M", VA_PASS1($3));
$$ = 1 + $1;
}
;
mapchar_list : mapchar
{
- add_opvars(splev, "m", $1);
+ add_opvars(splev, "m", VA_PASS1($1));
$$ = 1;
}
| mapchar_list ',' mapchar
{
- add_opvars(splev, "m", $3);
+ add_opvars(splev, "m", VA_PASS1($3));
$$ = 1 + $1;
}
;
encodecoord_list : encodecoord
{
- add_opvars(splev, "c", $1);
+ add_opvars(splev, "c", VA_PASS1($1));
$$ = 1;
}
| encodecoord_list ',' encodecoord
{
- add_opvars(splev, "c", $3);
+ add_opvars(splev, "c", VA_PASS1($3));
$$ = 1 + $1;
}
;
}
stmt_block
{
- add_opvars(splev, "io", 0, SPO_RETURN);
+ add_opvars(splev, "io", VA_PASS2(0, SPO_RETURN));
splev = function_splev_backup;
in_function_definition--;
curr_function = NULL;
{ /* init function parameter variables */
struct lc_funcdefs_parm *tfp = tmpfunc->params;
while (tfp) {
- add_opvars(splev, "iso", 0, tfp->name, SPO_VAR_INIT);
+ add_opvars(splev, "iso",
+ VA_PASS3(0, tfp->name,
+ SPO_VAR_INIT));
tfp = tfp->next;
}
}
set_opvar_int(jmp, splev->n_opcodes - jmp->vardata.l);
}
l = tmpfunc->addr - splev->n_opcodes - 2;
- add_opvars(splev, "iio", nparams, l, SPO_CALL);
+ add_opvars(splev, "iio",
+ VA_PASS3(nparams, l, SPO_CALL));
tmpfunc->n_called++;
} else {
lc_error("Function '%s' not defined.", $1);
comparestmt : PERCENT
{
/* val > rn2(100) */
- add_opvars(splev, "iio", (long)$1, 100, SPO_RN2);
+ add_opvars(splev, "iio",
+ VA_PASS3((long)$1, 100, SPO_RN2));
$$ = SPO_JG;
}
| '[' math_expr_var COMPARE_TYPE math_expr_var ']'
| '[' math_expr_var ']'
{
/* boolean, explicit foo != 0 */
- add_opvars(splev, "i", 0);
+ add_opvars(splev, "i", VA_PASS1(0));
$$ = SPO_JNE;
}
;
switch_default_case = NULL;
if (!is_inconstant_number)
- add_opvars(splev, "o", SPO_RN2);
+ add_opvars(splev, "o", VA_PASS1(SPO_RN2));
is_inconstant_number = 0;
chkjmp = New(struct opvar);
add_opcode(splev, SPO_PUSH, endjump);
add_opcode(splev, SPO_JMP, NULL);
- set_opvar_int(switch_check_jump, splev->n_opcodes - switch_check_jump->vardata.l);
+ set_opvar_int(switch_check_jump,
+ splev->n_opcodes - switch_check_jump->vardata.l);
for (i = 0; i < n_switch_case_list; i++) {
- add_opvars(splev, "oio", SPO_COPY, switch_case_value[i], SPO_CMP);
- set_opvar_int(switch_case_list[i], switch_case_list[i]->vardata.l - splev->n_opcodes-1);
+ add_opvars(splev, "oio",
+ VA_PASS3(SPO_COPY,
+ switch_case_value[i], SPO_CMP));
+ set_opvar_int(switch_case_list[i],
+ switch_case_list[i]->vardata.l - splev->n_opcodes-1);
add_opcode(splev, SPO_PUSH, switch_case_list[i]);
add_opcode(splev, SPO_JE, NULL);
}
if (switch_default_case) {
- set_opvar_int(switch_default_case, switch_default_case->vardata.l - splev->n_opcodes-1);
+ set_opvar_int(switch_default_case,
+ switch_default_case->vardata.l - splev->n_opcodes-1);
add_opcode(splev, SPO_PUSH, switch_default_case);
add_opcode(splev, SPO_JMP, NULL);
}
/* first, define a variable for the for-loop end value */
snprintf(buf, 255, "%s end", $2);
/* the value of which is already in stack (the 2nd math_expr) */
- add_opvars(splev, "iso", 0, buf, SPO_VAR_INIT);
+ add_opvars(splev, "iso", VA_PASS3(0, buf, SPO_VAR_INIT));
- variable_definitions = add_vardef_type(variable_definitions, $2, SPOVAR_INT);
+ variable_definitions = add_vardef_type(variable_definitions,
+ $2, SPOVAR_INT);
/* define the for-loop variable. value is in stack (1st math_expr) */
- add_opvars(splev, "iso", 0, $2, SPO_VAR_INIT);
+ add_opvars(splev, "iso", VA_PASS3(0, $2, SPO_VAR_INIT));
/* calculate value for the loop "step" variable */
snprintf(buf2, 255, "%s step", $2);
- add_opvars(splev, "vvo", buf, $2, SPO_MATH_SUB); /* end - start */
- add_opvars(splev, "o", SPO_MATH_SIGN); /* sign of that */
- add_opvars(splev, "iso", 0, buf2, SPO_VAR_INIT); /* save the sign into the step var */
+ /* end - start */
+ add_opvars(splev, "vvo",
+ VA_PASS3(buf, $2, SPO_MATH_SUB));
+ /* sign of that */
+ add_opvars(splev, "o", VA_PASS1(SPO_MATH_SIGN));
+ /* save the sign into the step var */
+ add_opvars(splev, "iso",
+ VA_PASS3(0, buf2, SPO_VAR_INIT));
forloop_list[n_forloops].varname = strdup($2);
forloop_list[n_forloops].jmp_point = splev->n_opcodes;
snprintf(buf, 255, "%s step", forloop_list[n_forloops].varname);
snprintf(buf2, 255, "%s end", forloop_list[n_forloops].varname);
/* compare for-loop var to end value */
- add_opvars(splev, "vvo", forloop_list[n_forloops].varname, buf2, SPO_CMP);
+ add_opvars(splev, "vvo",
+ VA_PASS3(forloop_list[n_forloops].varname,
+ buf2, SPO_CMP));
/* var + step */
- add_opvars(splev, "vvo", buf,
- forloop_list[n_forloops].varname, SPO_MATH_ADD);
+ add_opvars(splev, "vvo",
+ VA_PASS3(buf, forloop_list[n_forloops].varname,
+ SPO_MATH_ADD));
/* for-loop var = (for-loop var + step) */
- add_opvars(splev, "iso", 0, forloop_list[n_forloops].varname, SPO_VAR_INIT);
+ add_opvars(splev, "iso",
+ VA_PASS3(0, forloop_list[n_forloops].varname,
+ SPO_VAR_INIT));
/* jump back if compared values were not equal */
- add_opvars(splev, "io", forloop_list[n_forloops].jmp_point - splev->n_opcodes - 1, SPO_JNE);
+ add_opvars(splev, "io",
+ VA_PASS2(
+ forloop_list[n_forloops].jmp_point - splev->n_opcodes - 1,
+ SPO_JNE));
Free(forloop_list[n_forloops].varname);
break_stmt_end(splev);
}
set_opvar_int(tmppush, splev->n_opcodes);
if_list[n_if_list++] = tmppush;
- add_opvars(splev, "o", SPO_DEC);
+ add_opvars(splev, "o", VA_PASS1(SPO_DEC));
break_stmt_start();
}
stmt_block
{
struct opvar *tmppush;
- add_opvars(splev, "oio", SPO_COPY, 0, SPO_CMP);
+ 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);
message : MESSAGE_ID ':' string_expr
{
- add_opvars(splev, "o", SPO_MESSAGE);
+ add_opvars(splev, "o", VA_PASS1(SPO_MESSAGE));
}
;
random_corridors: RAND_CORRIDOR_ID
{
- add_opvars(splev, "iiiiiio", -1, 0, -1, -1, -1, -1, SPO_CORRIDOR);
+ add_opvars(splev, "iiiiiio",
+ VA_PASS7(-1, 0, -1, -1, -1, -1, SPO_CORRIDOR));
}
| RAND_CORRIDOR_ID ':' all_integers
{
- add_opvars(splev, "iiiiiio", -1, $3, -1, -1, -1, -1, SPO_CORRIDOR);
+ add_opvars(splev, "iiiiiio",
+ VA_PASS7(-1, $3, -1, -1, -1, -1, SPO_CORRIDOR));
}
| RAND_CORRIDOR_ID ':' RANDOM_TYPE
{
- add_opvars(splev, "iiiiiio", -1, -1, -1, -1, -1, -1, SPO_CORRIDOR);
+ add_opvars(splev, "iiiiiio",
+ VA_PASS7(-1, -1, -1, -1, -1, -1, SPO_CORRIDOR));
}
;
corridor : CORRIDOR_ID ':' corr_spec ',' corr_spec
{
add_opvars(splev, "iiiiiio",
- $3.room, $3.door, $3.wall,
- $5.room, $5.door, $5.wall,
- SPO_CORRIDOR);
+ VA_PASS7($3.room, $3.door, $3.wall,
+ $5.room, $5.door, $5.wall,
+ SPO_CORRIDOR));
}
| CORRIDOR_ID ':' corr_spec ',' all_integers
{
add_opvars(splev, "iiiiiio",
- $3.room, $3.door, $3.wall,
- -1, -1, (long)$5,
- SPO_CORRIDOR);
+ VA_PASS7($3.room, $3.door, $3.wall,
+ -1, -1, (long)$5,
+ SPO_CORRIDOR));
}
;
if (($2 < 100) && ($1 == OROOM))
lc_error("Only typed rooms can have a chance.");
else {
- add_opvars(splev, "iii", (long)$1, (long)$2, (long)$4);
+ add_opvars(splev, "iii",
+ VA_PASS3((long)$1, (long)$2, (long)$4));
}
}
;
long rflags = $8;
if (rflags == -1) rflags = (1 << 0);
- add_opvars(splev, "iiiiiiio", rflags, ERR, ERR,
- $5.x, $5.y, $7.width, $7.height, SPO_SUBROOM);
+ add_opvars(splev, "iiiiiiio",
+ VA_PASS8(rflags, ERR, ERR,
+ $5.x, $5.y, $7.width, $7.height,
+ SPO_SUBROOM));
break_stmt_start();
}
stmt_block
long rflags = $8;
if (rflags == -1) rflags = (1 << 0);
- add_opvars(splev, "iiiiiiio", rflags,
- $7.x, $7.y, $5.x, $5.y,
- $9.width, $9.height, SPO_ROOM);
+ add_opvars(splev, "iiiiiiio",
+ VA_PASS8(rflags,
+ $7.x, $7.y, $5.x, $5.y,
+ $9.width, $9.height, SPO_ROOM));
break_stmt_start();
}
stmt_block
if ($7 == ERR && $9 != ERR) {
lc_error("If the door wall is random, so must be its pos!");
} else {
- add_opvars(splev, "iiiio", (long)$9, (long)$5, (long)$3, (long)$7, SPO_ROOM_DOOR);
+ add_opvars(splev, "iiiio",
+ VA_PASS5((long)$9, (long)$5, (long)$3,
+ (long)$7, SPO_ROOM_DOOR));
}
}
| DOOR_ID ':' door_state ',' ter_selection
{
- add_opvars(splev, "io", (long)$3, SPO_DOOR);
+ add_opvars(splev, "io", VA_PASS2((long)$3, SPO_DOOR));
}
;
map_definition : NOMAP_ID
{
- add_opvars(splev, "ciisiio", 0, 0, 1, (char *)0, 0, 0, SPO_MAP);
+ add_opvars(splev, "ciisiio",
+ 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", SP_COORD_PACK(($3),($5)), 1, (long)$6);
+ add_opvars(splev, "cii",
+ VA_PASS3(SP_COORD_PACK(($3),($5)),
+ 1, (long)$6));
scan_map($7, splev);
Free($7);
}
| GEOMETRY_ID ':' coord_or_var roomfill MAP_ID
{
- add_opvars(splev, "ii", 2, (long)$4);
+ add_opvars(splev, "ii", VA_PASS2(2, (long)$4));
scan_map($5, splev);
Free($5);
}
monster_detail : MONSTER_ID ':' monster_desc
{
- add_opvars(splev, "io", 0, SPO_MONSTER);
+ add_opvars(splev, "io", VA_PASS2(0, SPO_MONSTER));
}
| MONSTER_ID ':' monster_desc
{
- add_opvars(splev, "io", 1, SPO_MONSTER);
+ add_opvars(splev, "io", VA_PASS2(1, SPO_MONSTER));
in_container_obj++;
break_stmt_start();
}
{
break_stmt_end(splev);
in_container_obj--;
- add_opvars(splev, "o", SPO_END_MONINVENT);
+ add_opvars(splev, "o", VA_PASS1(SPO_END_MONINVENT));
}
;
monster_info : string_expr
{
- add_opvars(splev, "i", SP_M_V_NAME);
+ add_opvars(splev, "i", VA_PASS1(SP_M_V_NAME));
$$ = 0x0001;
}
| MON_ATTITUDE
{
- add_opvars(splev, "ii", (long)$<i>1, SP_M_V_PEACEFUL);
+ add_opvars(splev, "ii",
+ VA_PASS2((long)$<i>1, SP_M_V_PEACEFUL));
$$ = 0x0002;
}
| MON_ALERTNESS
{
- add_opvars(splev, "ii", (long)$<i>1, SP_M_V_ASLEEP);
+ add_opvars(splev, "ii",
+ VA_PASS2((long)$<i>1, SP_M_V_ASLEEP));
$$ = 0x0004;
}
| alignment_prfx
{
- add_opvars(splev, "ii", (long)$1, SP_M_V_ALIGN);
+ add_opvars(splev, "ii",
+ VA_PASS2((long)$1, SP_M_V_ALIGN));
$$ = 0x0008;
}
| MON_APPEARANCE string_expr
{
- add_opvars(splev, "ii", (long)$<i>1, SP_M_V_APPEAR);
+ add_opvars(splev, "ii",
+ VA_PASS2((long)$<i>1, SP_M_V_APPEAR));
$$ = 0x0010;
}
| FEMALE_ID
{
- add_opvars(splev, "ii", 1, SP_M_V_FEMALE);
+ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_FEMALE));
$$ = 0x0020;
}
| INVIS_ID
{
- add_opvars(splev, "ii", 1, SP_M_V_INVIS);
+ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_INVIS));
$$ = 0x0040;
}
| CANCELLED_ID
{
- add_opvars(splev, "ii", 1, SP_M_V_CANCELLED);
+ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_CANCELLED));
$$ = 0x0080;
}
| REVIVED_ID
{
- add_opvars(splev, "ii", 1, SP_M_V_REVIVED);
+ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_REVIVED));
$$ = 0x0100;
}
| AVENGE_ID
{
- add_opvars(splev, "ii", 1, SP_M_V_AVENGE);
+ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_AVENGE));
$$ = 0x0200;
}
| FLEEING_ID ':' integer_or_var
{
- add_opvars(splev, "i", SP_M_V_FLEEING);
+ add_opvars(splev, "i", VA_PASS1(SP_M_V_FLEEING));
$$ = 0x0400;
}
| BLINDED_ID ':' integer_or_var
{
- add_opvars(splev, "i", SP_M_V_BLINDED);
+ add_opvars(splev, "i", VA_PASS1(SP_M_V_BLINDED));
$$ = 0x0800;
}
| PARALYZED_ID ':' integer_or_var
{
- add_opvars(splev, "i", SP_M_V_PARALYZED);
+ add_opvars(splev, "i", VA_PASS1(SP_M_V_PARALYZED));
$$ = 0x1000;
}
| STUNNED_ID
{
- add_opvars(splev, "ii", 1, SP_M_V_STUNNED);
+ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_STUNNED));
$$ = 0x2000;
}
| CONFUSED_ID
{
- add_opvars(splev, "ii", 1, SP_M_V_CONFUSED);
+ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_CONFUSED));
$$ = 0x4000;
}
| SEENTRAPS_ID ':' seen_trap_mask
{
- add_opvars(splev, "ii", (long)$3, SP_M_V_SEENTRAPS);
+ add_opvars(splev, "ii",
+ VA_PASS2((long)$3, SP_M_V_SEENTRAPS));
$$ = 0x8000;
}
;
{
long cnt = 0;
if (in_container_obj) cnt |= SP_OBJ_CONTENT;
- add_opvars(splev, "io", cnt, SPO_OBJECT);
+ 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;
- add_opvars(splev, "io", cnt, SPO_OBJECT);
+ add_opvars(splev, "io", VA_PASS2(cnt, SPO_OBJECT));
in_container_obj++;
break_stmt_start();
}
object_info : CURSE_TYPE
{
- add_opvars(splev, "ii", (long)$1, SP_O_V_CURSE);
+ add_opvars(splev, "ii",
+ VA_PASS2((long)$1, SP_O_V_CURSE));
$$ = 0x0001;
}
| MONTYPE_ID ':' monster_or_var
{
- add_opvars(splev, "i", SP_O_V_CORPSENM);
+ add_opvars(splev, "i", VA_PASS1(SP_O_V_CORPSENM));
$$ = 0x0002;
}
| all_ints_push
{
- add_opvars(splev, "i", SP_O_V_SPE);
+ add_opvars(splev, "i", VA_PASS1(SP_O_V_SPE));
$$ = 0x0004;
}
| NAME_ID ':' string_expr
{
- add_opvars(splev, "i", SP_O_V_NAME);
+ add_opvars(splev, "i", VA_PASS1(SP_O_V_NAME));
$$ = 0x0008;
}
| QUANTITY_ID ':' integer_or_var
{
- add_opvars(splev, "i", SP_O_V_QUAN);
+ add_opvars(splev, "i", VA_PASS1(SP_O_V_QUAN));
$$ = 0x0010;
}
| BURIED_ID
{
- add_opvars(splev, "ii", 1, SP_O_V_BURIED);
+ add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_BURIED));
$$ = 0x0020;
}
| LIGHT_STATE
{
- add_opvars(splev, "ii", (long)$1, SP_O_V_LIT);
+ add_opvars(splev, "ii", VA_PASS2((long)$1, SP_O_V_LIT));
$$ = 0x0040;
}
| ERODED_ID ':' integer_or_var
{
- add_opvars(splev, "i", SP_O_V_ERODED);
+ add_opvars(splev, "i", VA_PASS1(SP_O_V_ERODED));
$$ = 0x0080;
}
| ERODEPROOF_ID
{
- add_opvars(splev, "ii", -1, SP_O_V_ERODED);
+ add_opvars(splev, "ii", VA_PASS2(-1, SP_O_V_ERODED));
$$ = 0x0080;
}
| DOOR_STATE
{
if ($1 == D_LOCKED) {
- add_opvars(splev, "ii", 1, SP_O_V_LOCKED);
+ add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_LOCKED));
$$ = 0x0100;
} else if ($1 == D_BROKEN) {
- add_opvars(splev, "ii", 1, SP_O_V_BROKEN);
+ add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_BROKEN));
$$ = 0x0200;
} else
- lc_error("OBJECT state can only be locked or broken.");
+ lc_error("DOOR state can only be locked or broken.");
}
| TRAPPED_ID
{
- add_opvars(splev, "ii", 1, SP_O_V_TRAPPED);
+ add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_TRAPPED));
$$ = 0x0400;
}
| RECHARGED_ID ':' integer_or_var
{
- add_opvars(splev, "i", SP_O_V_RECHARGED);
+ add_opvars(splev, "i", VA_PASS1(SP_O_V_RECHARGED));
$$ = 0x0800;
}
| INVIS_ID
{
- add_opvars(splev, "ii", 1, SP_O_V_INVIS);
+ add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_INVIS));
$$ = 0x1000;
}
| GREASED_ID
{
- add_opvars(splev, "ii", 1, SP_O_V_GREASED);
+ add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_GREASED));
$$ = 0x2000;
}
| coord_or_var
{
- add_opvars(splev, "i", SP_O_V_COORD);
+ add_opvars(splev, "i", VA_PASS1(SP_O_V_COORD));
$$ = 0x4000;
}
;
trap_detail : TRAP_ID ':' trap_name ',' coord_or_var
{
- add_opvars(splev, "io", (long)$3, SPO_TRAP);
+ add_opvars(splev, "io", VA_PASS2((long)$3, SPO_TRAP));
}
;
state = -1;
else
lc_error("A drawbridge can only be open, closed or random!");
- add_opvars(splev, "iio", state, dir, SPO_DRAWBRIDGE);
+ add_opvars(splev, "iio",
+ VA_PASS3(state, dir, SPO_DRAWBRIDGE));
}
;
mazewalk_detail : MAZEWALK_ID ':' coord_or_var ',' DIRECTION
{
add_opvars(splev, "iiio",
- (long)$5, 1, 0, SPO_MAZEWALK);
+ VA_PASS4((long)$5, 1, 0, SPO_MAZEWALK));
}
| MAZEWALK_ID ':' coord_or_var ',' DIRECTION ',' BOOLEAN opt_fillchar
{
add_opvars(splev, "iiio",
- (long)$5, (long)$<i>7, (long)$8, SPO_MAZEWALK);
+ VA_PASS4((long)$5, (long)$<i>7,
+ (long)$8, SPO_MAZEWALK));
}
;
wallify_detail : WALLIFY_ID
{
- add_opvars(splev, "rio", SP_REGION_PACK(-1,-1,-1,-1), 0, SPO_WALLIFY);
+ add_opvars(splev, "rio",
+ VA_PASS3(SP_REGION_PACK(-1,-1,-1,-1),
+ 0, SPO_WALLIFY));
}
| WALLIFY_ID ':' ter_selection
{
- add_opvars(splev, "io", 1, SPO_WALLIFY);
+ add_opvars(splev, "io", VA_PASS2(1, SPO_WALLIFY));
}
;
ladder_detail : LADDER_ID ':' coord_or_var ',' UP_OR_DOWN
{
- add_opvars(splev, "io", (long)$<i>5, SPO_LADDER);
+ add_opvars(splev, "io",
+ VA_PASS2((long)$<i>5, SPO_LADDER));
}
;
stair_detail : STAIR_ID ':' coord_or_var ',' UP_OR_DOWN
{
- add_opvars(splev, "io", (long)$<i>5, SPO_STAIR);
+ add_opvars(splev, "io",
+ VA_PASS2((long)$<i>5, SPO_STAIR));
}
;
stair_region : STAIR_ID ':' lev_region ',' lev_region ',' UP_OR_DOWN
{
add_opvars(splev, "iiiii iiiii iiso",
- $3.x1, $3.y1, $3.x2, $3.y2, $3.area,
- $5.x1, $5.y1, $5.x2, $5.y2, $5.area,
- (long)(($7) ? LR_UPSTAIR : LR_DOWNSTAIR),
- 0, (char *)0, SPO_LEVREGION);
+ VA_PASS14($3.x1, $3.y1, $3.x2, $3.y2, $3.area,
+ $5.x1, $5.y1, $5.x2, $5.y2, $5.area,
+ (long)(($7) ? LR_UPSTAIR : LR_DOWNSTAIR),
+ 0, (char *)0, SPO_LEVREGION));
}
;
portal_region : PORTAL_ID ':' lev_region ',' lev_region ',' STRING
{
add_opvars(splev, "iiiii iiiii iiso",
- $3.x1, $3.y1, $3.x2, $3.y2, $3.area,
- $5.x1, $5.y1, $5.x2, $5.y2, $5.area,
- LR_PORTAL, 0, $7, SPO_LEVREGION);
+ VA_PASS14($3.x1, $3.y1, $3.x2, $3.y2, $3.area,
+ $5.x1, $5.y1, $5.x2, $5.y2, $5.area,
+ LR_PORTAL, 0, $7, SPO_LEVREGION));
Free($7);
}
;
teleprt_region : TELEPRT_ID ':' lev_region ',' lev_region teleprt_detail
{
- long rtype = 0;
+ long rtyp = 0;
switch($6) {
- case -1: rtype = LR_TELE; break;
- case 0: rtype = LR_DOWNTELE; break;
- case 1: rtype = LR_UPTELE; break;
+ case -1: rtyp = LR_TELE; break;
+ case 0: rtyp = LR_DOWNTELE; break;
+ case 1: rtyp = LR_UPTELE; break;
}
add_opvars(splev, "iiiii iiiii iiso",
- $3.x1, $3.y1, $3.x2, $3.y2, $3.area,
- $5.x1, $5.y1, $5.x2, $5.y2, $5.area,
- rtype, 0, (char *)0, SPO_LEVREGION);
+ VA_PASS14($3.x1, $3.y1, $3.x2, $3.y2, $3.area,
+ $5.x1, $5.y1, $5.x2, $5.y2, $5.area,
+ rtyp, 0, (char *)0, SPO_LEVREGION));
}
;
branch_region : BRANCH_ID ':' lev_region ',' lev_region
{
add_opvars(splev, "iiiii iiiii iiso",
- $3.x1, $3.y1, $3.x2, $3.y2, $3.area,
- $5.x1, $5.y1, $5.x2, $5.y2, $5.area,
- (long)LR_BRANCH, 0, (char *)0, SPO_LEVREGION);
+ VA_PASS14($3.x1, $3.y1, $3.x2, $3.y2, $3.area,
+ $5.x1, $5.y1, $5.x2, $5.y2, $5.area,
+ (long)LR_BRANCH, 0,
+ (char *)0, SPO_LEVREGION));
}
;
fountain_detail : FOUNTAIN_ID ':' ter_selection
{
- add_opvars(splev, "o", SPO_FOUNTAIN);
+ add_opvars(splev, "o", VA_PASS1(SPO_FOUNTAIN));
}
;
sink_detail : SINK_ID ':' ter_selection
{
- add_opvars(splev, "o", SPO_SINK);
+ add_opvars(splev, "o", VA_PASS1(SPO_SINK));
}
;
pool_detail : POOL_ID ':' ter_selection
{
- add_opvars(splev, "o", SPO_POOL);
+ add_opvars(splev, "o", VA_PASS1(SPO_POOL));
}
;
replace_terrain_detail : REPLACE_TERRAIN_ID ':' region_or_var ',' mapchar_or_var ',' mapchar_or_var ',' SPERCENT
{
- add_opvars(splev, "io", $9, SPO_REPLACETERRAIN);
+ add_opvars(splev, "io",
+ VA_PASS2($9, SPO_REPLACETERRAIN));
}
;
terrain_detail : TERRAIN_ID ':' ter_selection ',' mapchar_or_var
{
- add_opvars(splev, "o", SPO_TERRAIN);
+ add_opvars(splev, "o", VA_PASS1(SPO_TERRAIN));
}
;
diggable_detail : NON_DIGGABLE_ID ':' region_or_var
{
- add_opvars(splev, "o", SPO_NON_DIGGABLE);
+ add_opvars(splev, "o", VA_PASS1(SPO_NON_DIGGABLE));
}
;
passwall_detail : NON_PASSWALL_ID ':' region_or_var
{
- add_opvars(splev, "o", SPO_NON_PASSWALL);
+ add_opvars(splev, "o", VA_PASS1(SPO_NON_PASSWALL));
}
;
if (!(rflags & 1)) rt += MAXRTYPE+1;
irr = ((rflags & 2) != 0);
add_opvars(splev, "iiio",
- (long)$5, rt, rflags, SPO_REGION);
+ VA_PASS4((long)$5, rt, rflags, SPO_REGION));
$<i>$ = (irr || (rflags & 1) || rt != OROOM);
break_stmt_start();
}
altar_detail : ALTAR_ID ':' coord_or_var ',' alignment ',' altar_type
{
- add_opvars(splev, "iio", (long)$7, (long)$5, SPO_ALTAR);
+ add_opvars(splev, "iio",
+ VA_PASS3((long)$7, (long)$5, SPO_ALTAR));
}
;
grave_detail : GRAVE_ID ':' coord_or_var ',' string_expr
{
- add_opvars(splev, "io", 2, SPO_GRAVE);
+ add_opvars(splev, "io", VA_PASS2(2, SPO_GRAVE));
}
| GRAVE_ID ':' coord_or_var ',' RANDOM_TYPE
{
add_opvars(splev, "sio",
- (char *)0, 1, SPO_GRAVE);
+ VA_PASS3((char *)0, 1, SPO_GRAVE));
}
| GRAVE_ID ':' coord_or_var
{
add_opvars(splev, "sio",
- (char *)0, 0, SPO_GRAVE);
+ VA_PASS3((char *)0, 0, SPO_GRAVE));
}
;
gold_detail : GOLD_ID ':' math_expr_var ',' coord_or_var
{
- add_opvars(splev, "o", SPO_GOLD);
+ add_opvars(splev, "o", VA_PASS1(SPO_GOLD));
}
;
engraving_detail: ENGRAVING_ID ':' coord_or_var ',' engraving_type ',' string_expr
{
add_opvars(splev, "io",
- (long)$5, SPO_ENGRAVING);
+ VA_PASS2((long)$5, SPO_ENGRAVING));
}
;
mineralize : MINERALIZE_ID ':' integer_or_var ',' integer_or_var ',' integer_or_var ',' integer_or_var
{
- add_opvars(splev, "o", SPO_MINERALIZE);
+ add_opvars(splev, "o", VA_PASS1(SPO_MINERALIZE));
}
| MINERALIZE_ID
{
- add_opvars(splev, "iiiio", -1L, -1L, -1L, -1L, SPO_MINERALIZE);
+ add_opvars(splev, "iiiio",
+ VA_PASS5(-1L, -1L, -1L, -1L, SPO_MINERALIZE));
}
;
string_or_var : STRING
{
- add_opvars(splev, "s", $1);
+ add_opvars(splev, "s", VA_PASS1($1));
Free($1);
}
| VARSTRING_STRING
{
check_vardef_type(variable_definitions, $1, SPOVAR_STRING);
vardef_used(variable_definitions, $1);
- add_opvars(splev, "v", $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);
- add_opvars(splev, "v", $1);
+ add_opvars(splev, "v", VA_PASS1($1));
Free($1);
}
;
coord_or_var : encodecoord
{
- add_opvars(splev, "c", $1);
+ add_opvars(splev, "c", VA_PASS1($1));
}
| rndcoord_ID '(' ter_selection ')'
{
- add_opvars(splev, "o", SPO_SEL_RNDCOORD);
+ add_opvars(splev, "o", VA_PASS1(SPO_SEL_RNDCOORD));
}
| VARSTRING_COORD
{
check_vardef_type(variable_definitions, $1, SPOVAR_COORD);
vardef_used(variable_definitions, $1);
- add_opvars(splev, "v", $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);
- add_opvars(splev, "v", $1);
+ add_opvars(splev, "v", VA_PASS1($1));
Free($1);
}
;
{
check_vardef_type(variable_definitions, $1, SPOVAR_REGION);
vardef_used(variable_definitions, $1);
- add_opvars(splev, "v", $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);
- add_opvars(splev, "v", $1);
+ add_opvars(splev, "v", VA_PASS1($1));
Free($1);
}
;
if ( $2 > $6 || $4 > $8 )
lc_error("Region start > end: (%li,%li,%li,%li)!", $2, $4, $6, $8);
- add_opvars(splev, "r", r);
+ add_opvars(splev, "r", VA_PASS1(r));
$$ = r;
}
;
mapchar_or_var : mapchar
{
- add_opvars(splev, "m", $1);
+ add_opvars(splev, "m", VA_PASS1($1));
}
| VARSTRING_MAPCHAR
{
check_vardef_type(variable_definitions, $1, SPOVAR_MAPCHAR);
vardef_used(variable_definitions, $1);
- add_opvars(splev, "v", $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);
- add_opvars(splev, "v", $1);
+ add_opvars(splev, "v", VA_PASS1($1));
Free($1);
}
;
monster_or_var : encodemonster
{
- add_opvars(splev, "M", $1);
+ add_opvars(splev, "M", VA_PASS1($1));
}
| VARSTRING_MONST
{
check_vardef_type(variable_definitions, $1, SPOVAR_MONST);
vardef_used(variable_definitions, $1);
- add_opvars(splev, "v", $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);
- add_opvars(splev, "v", $1);
+ add_opvars(splev, "v", VA_PASS1($1));
Free($1);
}
;
object_or_var : encodeobj
{
- add_opvars(splev, "O", $1);
+ add_opvars(splev, "O", VA_PASS1($1));
}
| VARSTRING_OBJ
{
check_vardef_type(variable_definitions, $1, SPOVAR_OBJ);
vardef_used(variable_definitions, $1);
- add_opvars(splev, "v", $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);
- add_opvars(splev, "v", $1);
+ add_opvars(splev, "v", VA_PASS1($1));
Free($1);
}
;
string_expr : string_or_var { }
| string_expr '.' string_or_var
{
- add_opvars(splev, "o", SPO_MATH_ADD);
+ add_opvars(splev, "o", VA_PASS1(SPO_MATH_ADD));
}
;
-math_expr_var : INTEGER { add_opvars(splev, "i", $1 ); }
- | dice { is_inconstant_number = 1; }
- | '(' MINUS_INTEGER ')' { add_opvars(splev, "i", $2 ); }
+math_expr_var : INTEGER
+ {
+ add_opvars(splev, "i", VA_PASS1($1));
+ }
+ | dice
+ {
+ is_inconstant_number = 1;
+ }
+ | '(' MINUS_INTEGER ')'
+ {
+ add_opvars(splev, "i", VA_PASS1($2));
+ }
| VARSTRING_INT
{
check_vardef_type(variable_definitions, $1, SPOVAR_INT);
vardef_used(variable_definitions, $1);
- add_opvars(splev, "v", $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);
+ check_vardef_type(variable_definitions,
+ $1, SPOVAR_INT|SPOVAR_ARRAY);
vardef_used(variable_definitions, $1);
- add_opvars(splev, "v", $1);
+ add_opvars(splev, "v", VA_PASS1($1));
Free($1);
is_inconstant_number = 1;
}
- | math_expr_var '+' math_expr_var { add_opvars(splev, "o", SPO_MATH_ADD); }
- | math_expr_var '-' math_expr_var { add_opvars(splev, "o", SPO_MATH_SUB); }
- | math_expr_var '*' math_expr_var { add_opvars(splev, "o", SPO_MATH_MUL); }
- | math_expr_var '/' math_expr_var { add_opvars(splev, "o", SPO_MATH_DIV); }
- | math_expr_var '%' math_expr_var { add_opvars(splev, "o", SPO_MATH_MOD); }
+ | math_expr_var '+' math_expr_var
+ {
+ add_opvars(splev, "o", VA_PASS1(SPO_MATH_ADD));
+ }
+ | math_expr_var '-' math_expr_var
+ {
+ add_opvars(splev, "o", VA_PASS1(SPO_MATH_SUB));
+ }
+ | math_expr_var '*' math_expr_var
+ {
+ add_opvars(splev, "o", VA_PASS1(SPO_MATH_MUL));
+ }
+ | math_expr_var '/' math_expr_var
+ {
+ add_opvars(splev, "o", VA_PASS1(SPO_MATH_DIV));
+ }
+ | math_expr_var '%' math_expr_var
+ {
+ add_opvars(splev, "o", VA_PASS1(SPO_MATH_MOD));
+ }
| '(' math_expr_var ')' { }
;
-func_param_type : CFUNC_INT
- {
- if (!strcmp("int", $1) || !strcmp("integer", $1)) {
- $$ = (int)'i';
- } else lc_error("Unknown function parameter type '%s'", $1);
- }
- | CFUNC_STR
- {
- if (!strcmp("str", $1) || !strcmp("string", $1)) {
- $$ = (int)'s';
- } else lc_error("Unknown function parameter type '%s'", $1);
- }
- ;
+func_param_type : CFUNC_INT
+ {
+ if (!strcmp("int", $1) || !strcmp("integer", $1)) {
+ $$ = (int)'i';
+ } else
+ lc_error("Unknown function parameter type '%s'", $1);
+ }
+ | CFUNC_STR
+ {
+ if (!strcmp("str", $1) || !strcmp("string", $1)) {
+ $$ = (int)'s';
+ } else
+ lc_error("Unknown function parameter type '%s'", $1);
+ }
+ ;
-func_param_part : any_var_or_arr ':' func_param_type
- {
- struct lc_funcdefs_parm *tmp = New(struct lc_funcdefs_parm);
-
- if (!curr_function)
- lc_error("Function parameters outside function definition.");
- else if (!tmp)
- lc_error("Could not alloc function params.");
- else {
- tmp->name = strdup($1);
- tmp->parmtype = (char) $3;
- tmp->next = curr_function->params;
- curr_function->params = tmp;
- curr_function->n_params++;
- {
- long vt;
- switch (tmp->parmtype) {
- case 'i': vt = SPOVAR_INT; break;
- case 's': vt = SPOVAR_STRING; break;
- default: lc_error("Unknown func param conversion."); break;
- }
- variable_definitions = add_vardef_type(variable_definitions, $1, vt);
- }
- }
- Free($1);
- }
- ;
+func_param_part : any_var_or_arr ':' func_param_type
+ {
+ struct lc_funcdefs_parm *tmp = New(struct lc_funcdefs_parm);
+ if (!curr_function) {
+ lc_error("Function parameters outside function definition.");
+ } else if (!tmp) {
+ lc_error("Could not alloc function params.");
+ } else {
+ long vt;
+ tmp->name = strdup($1);
+ tmp->parmtype = (char) $3;
+ tmp->next = curr_function->params;
+ curr_function->params = tmp;
+ curr_function->n_params++;
+ switch (tmp->parmtype) {
+ case 'i': vt = SPOVAR_INT; break;
+ case 's': vt = SPOVAR_STRING; break;
+ default: lc_error("Unknown func param conversion."); break;
+ }
+ variable_definitions = add_vardef_type(
+ variable_definitions,
+ $1, vt);
+ }
+ Free($1);
+ }
+ ;
func_param_list : func_param_part
| func_param_list ',' func_param_part
ter_selection_x : coord_or_var
{
- add_opvars(splev, "o", SPO_SEL_POINT);
+ add_opvars(splev, "o", VA_PASS1(SPO_SEL_POINT));
}
| rect_ID region_or_var
{
- add_opvars(splev, "o", SPO_SEL_RECT);
+ add_opvars(splev, "o", VA_PASS1(SPO_SEL_RECT));
}
| fillrect_ID region_or_var
{
- add_opvars(splev, "o", SPO_SEL_FILLRECT);
+ add_opvars(splev, "o", VA_PASS1(SPO_SEL_FILLRECT));
}
| line_ID coord_or_var '-' coord_or_var
{
- add_opvars(splev, "o", SPO_SEL_LINE);
+ add_opvars(splev, "o", VA_PASS1(SPO_SEL_LINE));
}
| randline_ID coord_or_var '-' coord_or_var ',' math_expr_var
{
/* randline (x1,y1),(x2,y2), roughness */
- add_opvars(splev, "o", SPO_SEL_RNDLINE);
+ add_opvars(splev, "o", VA_PASS1(SPO_SEL_RNDLINE));
}
| grow_ID '(' ter_selection ')'
{
- add_opvars(splev, "io", W_ANY, SPO_SEL_GROW);
+ add_opvars(splev, "io", VA_PASS2(W_ANY, SPO_SEL_GROW));
}
| grow_ID '(' dir_list ',' ter_selection ')'
{
- add_opvars(splev, "io", $3, SPO_SEL_GROW);
+ add_opvars(splev, "io", VA_PASS2($3, SPO_SEL_GROW));
}
| filter_ID '(' SPERCENT ',' ter_selection ')'
{
- add_opvars(splev, "iio", $3, SPOFILTER_PERCENT, SPO_SEL_FILTER);
+ add_opvars(splev, "iio",
+ VA_PASS3($3, SPOFILTER_PERCENT, SPO_SEL_FILTER));
}
| filter_ID '(' ter_selection ',' ter_selection ')'
{
- add_opvars(splev, "io", SPOFILTER_SELECTION, SPO_SEL_FILTER);
+ add_opvars(splev, "io",
+ VA_PASS2(SPOFILTER_SELECTION, SPO_SEL_FILTER));
}
| filter_ID '(' mapchar_or_var ',' ter_selection ')'
{
- add_opvars(splev, "io", SPOFILTER_MAPCHAR, SPO_SEL_FILTER);
+ add_opvars(splev, "io",
+ VA_PASS2(SPOFILTER_MAPCHAR, SPO_SEL_FILTER));
}
| flood_ID coord_or_var
{
- add_opvars(splev, "o", SPO_SEL_FLOOD);
+ add_opvars(splev, "o", VA_PASS1(SPO_SEL_FLOOD));
}
| circle_ID '(' coord_or_var ',' math_expr_var ')'
{
- add_opvars(splev, "oio", SPO_COPY, 1, SPO_SEL_ELLIPSE);
+ add_opvars(splev, "oio",
+ VA_PASS3(SPO_COPY, 1, SPO_SEL_ELLIPSE));
}
| circle_ID '(' coord_or_var ',' math_expr_var ',' FILLING ')'
{
- add_opvars(splev, "oio", SPO_COPY, $7, SPO_SEL_ELLIPSE);
+ add_opvars(splev, "oio",
+ VA_PASS3(SPO_COPY, $7, SPO_SEL_ELLIPSE));
}
| ellipse_ID '(' coord_or_var ',' math_expr_var ',' math_expr_var ')'
{
- add_opvars(splev, "io", 1, SPO_SEL_ELLIPSE);
+ add_opvars(splev, "io", VA_PASS2(1, SPO_SEL_ELLIPSE));
}
| ellipse_ID '(' coord_or_var ',' math_expr_var ',' math_expr_var ',' FILLING ')'
{
- add_opvars(splev, "io", $9, SPO_SEL_ELLIPSE);
+ add_opvars(splev, "io", VA_PASS2($9, SPO_SEL_ELLIPSE));
}
| gradient_ID '(' GRADIENT_TYPE ',' '(' math_expr_var '-' math_expr_var opt_limited ')' ',' coord_or_var opt_coord_or_var ')'
{
- add_opvars(splev, "iio", $9, $3, SPO_SEL_GRADIENT);
+ add_opvars(splev, "iio",
+ VA_PASS3($9, $3, SPO_SEL_GRADIENT));
}
| complement_ID ter_selection_x
{
- add_opvars(splev, "o", SPO_SEL_COMPLEMENT);
+ add_opvars(splev, "o", VA_PASS1(SPO_SEL_COMPLEMENT));
}
| VARSTRING_SEL
{
check_vardef_type(variable_definitions, $1, SPOVAR_SEL);
vardef_used(variable_definitions, $1);
- add_opvars(splev, "v", $1);
+ add_opvars(splev, "v", VA_PASS1($1));
Free($1);
}
| '(' ter_selection ')'
}
| ter_selection_x '&' ter_selection
{
- add_opvars(splev, "o", SPO_SEL_ADD);
+ add_opvars(splev, "o", VA_PASS1(SPO_SEL_ADD));
}
;
dice : DICE
{
- add_opvars(splev, "iio", $1.num, $1.die, SPO_DICE);
+ add_opvars(splev, "iio",
+ VA_PASS3($1.num, $1.die, SPO_DICE));
}
;
all_ints_push : MINUS_INTEGER
{
- add_opvars(splev, "i", $1 );
+ add_opvars(splev, "i", VA_PASS1($1));
}
| PLUS_INTEGER
{
- add_opvars(splev, "i", $1 );
+ add_opvars(splev, "i", VA_PASS1($1));
}
| INTEGER
{
- add_opvars(splev, "i", $1 );
+ add_opvars(splev, "i", VA_PASS1($1));
}
| dice
{