From df3df3cb6f05fd50c5d7567356a8e056c07c592a Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 6 Mar 2019 11:37:52 -0800 Subject: [PATCH 1/4] revise integer.h for vms The VMS compiler supports C99 and defines __STDC_VERSION__ to the corresponding value, but it doesn't supply so isaac64.c wouldn't compile. It does supply another header containing what is needed. --- include/integer.h | 53 +++++++++++++++++++++++++++++++---------------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/include/integer.h b/include/integer.h index e5ee19c75..322c2f5e3 100644 --- a/include/integer.h +++ b/include/integer.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 integer.h $NHDT-Date: 1524689514 2018/04/25 20:51:54 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.0 $ */ +/* NetHack 3.6 integer.h $NHDT-Date: 1551901047 2019/03/06 19:37:27 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.7 $ */ /* Copyright (c) 2016 by Michael Allison */ /* NetHack may be freely redistributed. See license for details. */ @@ -32,21 +32,33 @@ #ifndef INTEGER_H #define INTEGER_H -#if (defined(__STDC__) && __STDC_VERSION__ >= 199901L) +/* DEC C (aka Compaq C for a while, HP C these days) for VMS is + classified as a freestanding implementation rather than a hosted one + and even though it claims to be C99, it does not provide . */ +#if defined(__DECC) && defined(VMS) && !defined(HAS_STDINT_H) +#define HAS_INTTYPES_H +#else /*!__DECC*/ + +#if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \ + && !defined(HAS_STDINT_H) /* The compiler claims to conform to C99. Use stdint.h */ -#include -#define SKIP_STDINT_WORKAROUND -#else -# if defined(HAS_STDINT_H) -/* Some compilers have stdint.h but don't conform to all of C99. */ -#include -#define SKIP_STDINT_WORKAROUND -# endif -# if defined(__GNUC__) && defined(__INT64_MAX__) -# include -# define SKIP_STDINT_WORKAROUND -# endif +#define HAS_STDINT_H #endif +#if defined(__GNUC__) && defined(__INT64_MAX__) && !defined(HAS_STDINT_H) +#define HAS_STDINT_H +#endif + +#endif /*?__DECC*/ + +#ifdef HAS_STDINT_H +#include +#define SKIP_STDINT_WORKAROUND +#else /*!stdint*/ +#ifdef HAS_INTTYPES_H +#include +#define SKIP_STDINT_WORKAROUND +#endif +#endif /*?stdint*/ #ifndef SKIP_STDINT_WORKAROUND /* !C99 */ /* @@ -59,8 +71,8 @@ typedef unsigned short uint16_t; #if defined(__WATCOMC__) && !defined(__386__) /* Open Watcom providing a 16 bit build for MS-DOS or OS/2 */ /* int is 16 bits; use long for 32 bits */ -typedef long int32_t; -typedef unsigned long uint32_t; +typedef long int int32_t; +typedef unsigned long int uint32_t; #else /* Otherwise, assume either a 32- or 64-bit compiler */ /* long may be 64 bits; use int for 32 bits */ @@ -68,8 +80,13 @@ typedef int int32_t; typedef unsigned int uint32_t; #endif -typedef long long int64_t; -typedef unsigned long long uint64_t; +/* The only place where nethack cares about 64-bit integers is in the + Isaac64 random number generator. If your environment can't support + 64-bit integers, you should comment out USE_ISAAC64 in config.h so + that the previous RNG gets used instead. Then this file will be + inhibited and it won't matter what the int64_t and uint64_t lines are. */ +typedef long long int int64_t; +typedef unsigned long long int uint64_t; #endif /* !C99 */ From 62507fa40f852868cae4b98fc1e4526c5e39da14 Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 6 Mar 2019 11:43:27 -0800 Subject: [PATCH 2/4] sys/share/*_yacc.c update For the pre-generated yacc sources, revert to the version of byacc used for 3.6.1 and 3.6.0 to avoid unnecessary changes for 3.6.2. --- sys/share/dgn_comp.h | 7 - sys/share/dgn_yacc.c | 564 ++++-------- sys/share/lev_comp.h | 7 - sys/share/lev_yacc.c | 1984 ++++++++++++++++-------------------------- 4 files changed, 964 insertions(+), 1598 deletions(-) diff --git a/sys/share/dgn_comp.h b/sys/share/dgn_comp.h index 7ed4b920a..8f3ecfd64 100644 --- a/sys/share/dgn_comp.h +++ b/sys/share/dgn_comp.h @@ -19,16 +19,9 @@ #define NO_DOWN 275 #define PORTAL 276 #define STRING 277 -#ifdef YYSTYPE -#undef YYSTYPE_IS_DECLARED -#define YYSTYPE_IS_DECLARED 1 -#endif -#ifndef YYSTYPE_IS_DECLARED -#define YYSTYPE_IS_DECLARED 1 typedef union { int i; char* str; } YYSTYPE; -#endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE yylval; diff --git a/sys/share/dgn_yacc.c b/sys/share/dgn_yacc.c index 4db0ceeab..742a7b1a7 100644 --- a/sys/share/dgn_yacc.c +++ b/sys/share/dgn_yacc.c @@ -1,26 +1,17 @@ -/* original parser id follows */ -/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ -/* nhsccsid[] = \"@(#)yaccpar 1.9.0-nh2 (NetHack) 11/22/2018\"; */ -/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ - +#ifndef lint +/* static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; */ +/* static char nhsccsid[] = "@(#)yaccpar 1.9.0-nh (NetHack) 12/03/2015"; */ +#endif #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 -#define YYSUBMINOR "0-nh2" -#define YYPATCH 20160324 +#define YYSUBMINOR "0-nh" -#define YYEMPTY (-1) -#define yyclearin (yychar = YYEMPTY) -#define yyerrok (yyerrflag = 0) -#define YYRECOVERING() (yyerrflag != 0) -#define YYENOMEM (-2) -#define YYEOF 0 +#define yyclearin (yychar=(-1)) +#define yyerrok (yyerrflag=0) +#define YYRECOVERING (yyerrflag!=0) #define YYPREFIX "yy" - -#define YYPURE 0 - -#line 2 "util/dgn_comp.y" -/* NetHack 3.6 dgn_comp.y $NHDT-Date: 1432512785 2015/05/25 00:13:05 $ $NHDT-Branch: master $:$NHDT-Revision: 1.8 $ */ +/* NetHack 3.6 dgn_comp.y $NHDT-Date: 1551901399 2019/03/06 19:43:19 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.15 $ */ /* Copyright (c) 1989 by Jean-Christophe Collet */ /* Copyright (c) 1990 by M. Stephenson */ /* NetHack may be freely redistributed. See license for details. */ @@ -82,55 +73,11 @@ extern int fatal_error; extern const char *fname; extern FILE *yyin, *yyout; /* from dgn_lex.c */ -#line 66 "util/dgn_comp.y" -#ifdef YYSTYPE -#undef YYSTYPE_IS_DECLARED -#define YYSTYPE_IS_DECLARED 1 -#endif -#ifndef YYSTYPE_IS_DECLARED -#define YYSTYPE_IS_DECLARED 1 typedef union { int i; char* str; } YYSTYPE; -#endif /* !YYSTYPE_IS_DECLARED */ -#line 99 "" - -/* compatibility with bison */ -#ifdef YYPARSE_PARAM -/* compatibility with FreeBSD */ -# ifdef YYPARSE_PARAM_TYPE -# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) -# else -# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) -# endif -#else -# define YYPARSE_DECL() yyparse(void) -#endif - -/* Parameters sent to lex. */ -#ifdef YYLEX_PARAM -# define YYLEX_DECL() yylex(void *YYLEX_PARAM) -# define YYLEX yylex(YYLEX_PARAM) -#else -# define YYLEX_DECL() yylex(void) -# define YYLEX yylex() -#endif - -/* Parameters sent to yyerror. */ -#ifndef YYERROR_DECL -#define YYERROR_DECL() yyerror(const char *s) -#endif -#ifndef YYERROR_CALL -#define YYERROR_CALL(msg) yyerror(msg) -#endif - -extern int YYPARSE_DECL(); -#define YYNHXFLAG 1 -#define YYSTACKSIZE 500 -#define YYMAXDEPTH 500 - #define INTEGER 257 #define A_DUNGEON 258 #define BRANCH 259 @@ -153,22 +100,21 @@ extern int YYPARSE_DECL(); #define PORTAL 276 #define STRING 277 #define YYERRCODE 256 -typedef short YYINT; - YYINT yylhs[] = { -1, +short yylhs[] = { -1, 0, 0, 5, 5, 6, 6, 6, 6, 7, 1, 1, 8, 8, 8, 12, 13, 15, 15, 14, 10, 10, 10, 10, 10, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 9, 9, 22, 23, 3, 3, 3, 3, 3, 2, 2, 4, 21, 11, }; - YYINT yylen[] = { 2, +short yylen[] = { 2, 0, 1, 1, 2, 1, 1, 1, 1, 6, 0, 1, 1, 1, 1, 3, 1, 3, 3, 3, 1, 1, 1, 1, 1, 6, 7, 7, 8, 3, 3, 7, 8, 8, 9, 1, 1, 7, 8, 0, 1, 1, 1, 1, 0, 1, 1, 5, 5, }; - YYINT yydefred[] = { 0, +short yydefred[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 5, 6, 7, 8, 12, 13, 14, 16, 20, 21, 22, 23, 24, 35, @@ -181,12 +127,12 @@ typedef short YYINT; 0, 45, 37, 0, 27, 0, 0, 0, 0, 0, 38, 28, 33, 0, 48, 47, 34, }; - YYINT yydgoto[] = { 14, +short yydgoto[] = { 14, 78, 93, 84, 60, 15, 16, 17, 18, 19, 20, 68, 21, 22, 23, 24, 25, 26, 27, 28, 29, 70, 30, 31, }; - YYINT yysindex[] = { -237, +short yysindex[] = { -237, -46, -45, -44, -39, -38, -30, -22, -21, -20, -19, -18, -17, -16, 0, -237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -199,7 +145,7 @@ typedef short YYINT; -178, 0, 0, -193, 0, -177, -176, -175, 42, 43, 0, 0, 0, -172, 0, 0, 0, }; - YYINT yyrindex[] = { 86, +short yyrindex[] = { 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -212,13 +158,13 @@ typedef short YYINT; 0, 0, 0, 31, 0, 61, 76, 0, 0, 0, 0, 0, 0, 91, 0, 0, 0, }; - YYINT yygindex[] = { 0, +short yygindex[] = { 0, 0, -6, 4, -43, 0, 75, 0, 0, 0, 0, -71, 0, 0, 0, 0, 0, 0, 0, 0, 0, -62, 0, 0, }; #define YYTABLESIZE 363 - YYINT yytable[] = { 85, +short yytable[] = { 85, 39, 80, 81, 82, 83, 63, 64, 65, 66, 86, 87, 32, 33, 34, 46, 10, 97, 98, 35, 36, 1, 2, 3, 4, 5, 6, 7, 37, 8, 9, @@ -257,7 +203,7 @@ typedef short YYINT; 32, 32, 32, 32, 32, 0, 32, 32, 0, 32, 32, 32, 32, }; - YYINT yycheck[] = { 71, +short yycheck[] = { 71, 0, 273, 274, 275, 276, 49, 50, 51, 52, 72, 73, 58, 58, 58, 277, 0, 88, 89, 58, 58, 258, 259, 260, 261, 262, 263, 264, 58, 266, 267, @@ -301,11 +247,8 @@ typedef short YYINT; #define YYDEBUG 0 #endif #define YYMAXTOKEN 277 -#define YYUNDFTOKEN 303 -#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG - char * yyname[] = { - +char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,"'('","')'",0,"'+'","','",0,0,0,0,0,0,0,0,0,0,0,0,0,"':'",0,0,0,0,0, "'@'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -315,10 +258,9 @@ typedef short YYINT; 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"INTEGER", "A_DUNGEON","BRANCH","CHBRANCH","LEVEL","RNDLEVEL","CHLEVEL","RNDCHLEVEL", "UP_OR_DOWN","PROTOFILE","DESCRIPTION","DESCRIPTOR","LEVELDESC","ALIGNMENT", -"LEVALIGN","ENTRY","STAIR","NO_UP","NO_DOWN","PORTAL","STRING",0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", +"LEVALIGN","ENTRY","STAIR","NO_UP","NO_DOWN","PORTAL","STRING", }; - char * yyrule[] = { +char *yyrule[] = { "$accept : file", "file :", "file : dungeons", @@ -368,44 +310,30 @@ typedef short YYINT; "bones_tag : STRING", "acouple : '(' INTEGER ',' INTEGER ')'", "rcouple : '(' INTEGER ',' INTEGER ')'", - }; #endif - -int yydebug; -int yynerrs; - -int yyerrflag; -int yychar; -YYSTYPE yyval; -YYSTYPE yylval; - -/* define the initial stack-sizes */ #ifdef YYSTACKSIZE #undef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE +#define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else -#define YYSTACKSIZE 10000 -#define YYMAXDEPTH 10000 +#define YYSTACKSIZE 500 +#define YYMAXDEPTH 500 #endif #endif - -#define YYINITSTACKSIZE 200 - -typedef struct { - unsigned stacksize; - YYINT *s_base; - YYINT *s_mark; - YYINT *s_last; - YYSTYPE *l_base; - YYSTYPE *l_mark; -} YYSTACKDATA; -/* variables for the parser stack */ -static YYSTACKDATA yystack; -#line 433 "util/dgn_comp.y" +int yydebug; +int yynerrs; +int yyerrflag; +int yychar; +short *yyssp; +YYSTYPE *yyvsp; +YYSTYPE yyval; +YYSTYPE yylval; +short yyss[YYSTACKSIZE]; +YYSTYPE yyvs[YYSTACKSIZE]; +#define yystacksize YYSTACKSIZE void init_dungeon() @@ -652,78 +580,17 @@ output_dgn() } /*dgn_comp.y*/ -#line 656 "" - -#if YYDEBUG -#include /* needed for printf */ -#endif - -#if YYNHXFLAG -extern char *getenv(); -#define CONST -#else -#include /* needed for malloc, etc */ -#include /* needed for memset */ -#define CONST const -#endif - -/* allocate initial stack or double stack size, up to YYMAXDEPTH */ -static int yygrowstack(YYSTACKDATA *data) -{ - int i; - unsigned newsize; - YYINT *newss; - YYSTYPE *newvs; - - if ((newsize = data->stacksize) == 0) - newsize = YYINITSTACKSIZE; - else if (newsize >= YYMAXDEPTH) - return YYENOMEM; - else if ((newsize *= 2) > YYMAXDEPTH) - newsize = YYMAXDEPTH; - - i = (int) (data->s_mark - data->s_base); - newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); - if (newss == 0) - return YYENOMEM; - - data->s_base = newss; - data->s_mark = newss + i; - - newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); - if (newvs == 0) - return YYENOMEM; - - data->l_base = newvs; - data->l_mark = newvs + i; - - data->stacksize = newsize; - data->s_last = data->s_base + newsize - 1; - return 0; -} - -#if YYPURE || defined(YY_NO_LEAKS) -static void yyfreestack(YYSTACKDATA *data) -{ - free(data->s_base); - free(data->l_base); - memset(data, 0, sizeof(*data)); -} -#else -#define yyfreestack(data) /* nothing */ -#endif - -#define YYABORT goto yyabort +#define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept -#define YYERROR goto yyerrlab - +#define YYERROR goto yyerrlab int -YYPARSE_DECL() +yyparse() { - int yym, yyn, yystate; + register int yym, yyn, yystate; #if YYDEBUG - CONST char *yys; + register char *yys; + extern char *getenv(); if ((yys = getenv("YYDEBUG")) != 0) { @@ -735,28 +602,23 @@ YYPARSE_DECL() yynerrs = 0; yyerrflag = 0; - yychar = YYEMPTY; - yystate = 0; + yychar = (-1); -#if YYPURE - memset(&yystack, 0, sizeof(yystack)); -#endif - - if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; - yystack.s_mark = yystack.s_base; - yystack.l_mark = yystack.l_base; - yystate = 0; - *yystack.s_mark = 0; + yyssp = yyss; + yyvsp = yyvs; + *yyssp = yystate = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { - if ((yychar = YYLEX) < 0) yychar = YYEOF; + if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { - yys = yyname[YYTRANSLATE(yychar)]; + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } @@ -770,14 +632,13 @@ yyloop: printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif - if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } - yystate = yytable[yyn]; - *++yystack.s_mark = yytable[yyn]; - *++yystack.l_mark = yylval; - yychar = YYEMPTY; + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; + yychar = (-1); if (yyerrflag > 0) --yyerrflag; goto yyloop; } @@ -788,35 +649,32 @@ yyloop: goto yyreduce; } if (yyerrflag) goto yyinrecovery; - - YYERROR_CALL("syntax error"); - + goto yynewerror; +yynewerror: + yyerror("syntax error"); goto yyerrlab; - yyerrlab: ++yynerrs; - yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { - if ((yyn = yysindex[*yystack.s_mark]) != 0 && (yyn += YYERRCODE) >= 0 && + if ((yyn = yysindex[*yyssp]) != 0 && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, error recovery shifting\ - to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); + to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif - if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } - yystate = yytable[yyn]; - *++yystack.s_mark = yytable[yyn]; - *++yystack.l_mark = yylval; + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; goto yyloop; } else @@ -824,29 +682,30 @@ yyinrecovery: #if YYDEBUG if (yydebug) printf("%sdebug: error recovery discarding state %d\n", - YYPREFIX, *yystack.s_mark); + YYPREFIX, *yyssp); #endif - if (yystack.s_mark <= yystack.s_base) goto yyabort; - --yystack.s_mark; - --yystack.l_mark; + if (yyssp <= yyss) goto yyabort; + --yyssp; + --yyvsp; } } } else { - if (yychar == YYEOF) goto yyabort; + if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { - yys = yyname[YYTRANSLATE(yychar)]; + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif - yychar = YYEMPTY; + yychar = (-1); goto yyloop; } - yyreduce: #if YYDEBUG if (yydebug) @@ -854,283 +713,252 @@ yyreduce: YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; - if (yym) - yyval = yystack.l_mark[1-yym]; - else - memset(&yyval, 0, sizeof yyval); + yyval = yyvsp[1-yym]; switch (yyn) { case 2: -#line 83 "util/dgn_comp.y" - { +{ output_dgn(); } break; case 9: -#line 99 "util/dgn_comp.y" - { +{ init_dungeon(); - Strcpy(tmpdungeon[n_dgns].name, yystack.l_mark[-3].str); - tmpdungeon[n_dgns].boneschar = (char)yystack.l_mark[-2].i; + Strcpy(tmpdungeon[n_dgns].name, yyvsp[-3].str); + tmpdungeon[n_dgns].boneschar = (char)yyvsp[-2].i; tmpdungeon[n_dgns].lev.base = couple.base; tmpdungeon[n_dgns].lev.rand = couple.rand; - tmpdungeon[n_dgns].chance = yystack.l_mark[0].i; - Free(yystack.l_mark[-3].str); + tmpdungeon[n_dgns].chance = yyvsp[0].i; + Free(yyvsp[-3].str); } break; case 10: -#line 111 "util/dgn_comp.y" - { +{ yyval.i = 0; } break; case 11: -#line 115 "util/dgn_comp.y" - { - yyval.i = yystack.l_mark[0].i; +{ + yyval.i = yyvsp[0].i; } break; case 15: -#line 126 "util/dgn_comp.y" - { - tmpdungeon[n_dgns].entry_lev = yystack.l_mark[0].i; +{ + tmpdungeon[n_dgns].entry_lev = yyvsp[0].i; } break; case 17: -#line 135 "util/dgn_comp.y" - { - if(yystack.l_mark[0].i <= TOWN || yystack.l_mark[0].i >= D_ALIGN_CHAOTIC) +{ + if(yyvsp[0].i <= TOWN || yyvsp[0].i >= D_ALIGN_CHAOTIC) yyerror("Illegal description - ignoring!"); else - tmpdungeon[n_dgns].flags |= yystack.l_mark[0].i ; + tmpdungeon[n_dgns].flags |= yyvsp[0].i ; } break; case 18: -#line 142 "util/dgn_comp.y" - { - if(yystack.l_mark[0].i && yystack.l_mark[0].i < D_ALIGN_CHAOTIC) +{ + if(yyvsp[0].i && yyvsp[0].i < D_ALIGN_CHAOTIC) yyerror("Illegal alignment - ignoring!"); else - tmpdungeon[n_dgns].flags |= yystack.l_mark[0].i ; + tmpdungeon[n_dgns].flags |= yyvsp[0].i ; } break; case 19: -#line 151 "util/dgn_comp.y" - { - Strcpy(tmpdungeon[n_dgns].protoname, yystack.l_mark[0].str); - Free(yystack.l_mark[0].str); +{ + Strcpy(tmpdungeon[n_dgns].protoname, yyvsp[0].str); + Free(yyvsp[0].str); } break; case 25: -#line 165 "util/dgn_comp.y" - { +{ init_level(); - Strcpy(tmplevel[n_levs].name, yystack.l_mark[-3].str); - tmplevel[n_levs].boneschar = (char)yystack.l_mark[-2].i; + Strcpy(tmplevel[n_levs].name, yyvsp[-3].str); + tmplevel[n_levs].boneschar = (char)yyvsp[-2].i; tmplevel[n_levs].lev.base = couple.base; tmplevel[n_levs].lev.rand = couple.rand; tmpdungeon[n_dgns].levels++; - Free(yystack.l_mark[-3].str); + Free(yyvsp[-3].str); } break; case 26: -#line 175 "util/dgn_comp.y" - { +{ init_level(); - Strcpy(tmplevel[n_levs].name, yystack.l_mark[-4].str); - tmplevel[n_levs].boneschar = (char)yystack.l_mark[-3].i; + Strcpy(tmplevel[n_levs].name, yyvsp[-4].str); + tmplevel[n_levs].boneschar = (char)yyvsp[-3].i; tmplevel[n_levs].lev.base = couple.base; tmplevel[n_levs].lev.rand = couple.rand; - tmplevel[n_levs].rndlevs = yystack.l_mark[0].i; + tmplevel[n_levs].rndlevs = yyvsp[0].i; tmpdungeon[n_dgns].levels++; - Free(yystack.l_mark[-4].str); + Free(yyvsp[-4].str); } break; case 27: -#line 188 "util/dgn_comp.y" - { +{ init_level(); - Strcpy(tmplevel[n_levs].name, yystack.l_mark[-4].str); - tmplevel[n_levs].boneschar = (char)yystack.l_mark[-3].i; + Strcpy(tmplevel[n_levs].name, yyvsp[-4].str); + tmplevel[n_levs].boneschar = (char)yyvsp[-3].i; tmplevel[n_levs].lev.base = couple.base; tmplevel[n_levs].lev.rand = couple.rand; - tmplevel[n_levs].chance = yystack.l_mark[0].i; + tmplevel[n_levs].chance = yyvsp[0].i; tmpdungeon[n_dgns].levels++; - Free(yystack.l_mark[-4].str); + Free(yyvsp[-4].str); } break; case 28: -#line 199 "util/dgn_comp.y" - { +{ init_level(); - Strcpy(tmplevel[n_levs].name, yystack.l_mark[-5].str); - tmplevel[n_levs].boneschar = (char)yystack.l_mark[-4].i; + Strcpy(tmplevel[n_levs].name, yyvsp[-5].str); + tmplevel[n_levs].boneschar = (char)yyvsp[-4].i; tmplevel[n_levs].lev.base = couple.base; tmplevel[n_levs].lev.rand = couple.rand; - tmplevel[n_levs].chance = yystack.l_mark[-1].i; - tmplevel[n_levs].rndlevs = yystack.l_mark[0].i; + tmplevel[n_levs].chance = yyvsp[-1].i; + tmplevel[n_levs].rndlevs = yyvsp[0].i; tmpdungeon[n_dgns].levels++; - Free(yystack.l_mark[-5].str); + Free(yyvsp[-5].str); } break; case 29: -#line 213 "util/dgn_comp.y" - { - if(yystack.l_mark[0].i >= D_ALIGN_CHAOTIC) +{ + if(yyvsp[0].i >= D_ALIGN_CHAOTIC) yyerror("Illegal description - ignoring!"); else - tmplevel[n_levs].flags |= yystack.l_mark[0].i ; + tmplevel[n_levs].flags |= yyvsp[0].i ; } break; case 30: -#line 220 "util/dgn_comp.y" - { - if(yystack.l_mark[0].i && yystack.l_mark[0].i < D_ALIGN_CHAOTIC) +{ + if(yyvsp[0].i && yyvsp[0].i < D_ALIGN_CHAOTIC) yyerror("Illegal alignment - ignoring!"); else - tmplevel[n_levs].flags |= yystack.l_mark[0].i ; + tmplevel[n_levs].flags |= yyvsp[0].i ; } break; case 31: -#line 229 "util/dgn_comp.y" - { +{ init_level(); - Strcpy(tmplevel[n_levs].name, yystack.l_mark[-4].str); - tmplevel[n_levs].boneschar = (char)yystack.l_mark[-3].i; - tmplevel[n_levs].chain = getchain(yystack.l_mark[-2].str); + Strcpy(tmplevel[n_levs].name, yyvsp[-4].str); + tmplevel[n_levs].boneschar = (char)yyvsp[-3].i; + tmplevel[n_levs].chain = getchain(yyvsp[-2].str); tmplevel[n_levs].lev.base = couple.base; tmplevel[n_levs].lev.rand = couple.rand; if(!check_level()) n_levs--; else tmpdungeon[n_dgns].levels++; - Free(yystack.l_mark[-4].str); - Free(yystack.l_mark[-2].str); + Free(yyvsp[-4].str); + Free(yyvsp[-2].str); } break; case 32: -#line 242 "util/dgn_comp.y" - { +{ init_level(); - Strcpy(tmplevel[n_levs].name, yystack.l_mark[-5].str); - tmplevel[n_levs].boneschar = (char)yystack.l_mark[-4].i; - tmplevel[n_levs].chain = getchain(yystack.l_mark[-3].str); + Strcpy(tmplevel[n_levs].name, yyvsp[-5].str); + tmplevel[n_levs].boneschar = (char)yyvsp[-4].i; + tmplevel[n_levs].chain = getchain(yyvsp[-3].str); tmplevel[n_levs].lev.base = couple.base; tmplevel[n_levs].lev.rand = couple.rand; - tmplevel[n_levs].rndlevs = yystack.l_mark[0].i; + tmplevel[n_levs].rndlevs = yyvsp[0].i; if(!check_level()) n_levs--; else tmpdungeon[n_dgns].levels++; - Free(yystack.l_mark[-5].str); - Free(yystack.l_mark[-3].str); + Free(yyvsp[-5].str); + Free(yyvsp[-3].str); } break; case 33: -#line 258 "util/dgn_comp.y" - { +{ init_level(); - Strcpy(tmplevel[n_levs].name, yystack.l_mark[-5].str); - tmplevel[n_levs].boneschar = (char)yystack.l_mark[-4].i; - tmplevel[n_levs].chain = getchain(yystack.l_mark[-3].str); + Strcpy(tmplevel[n_levs].name, yyvsp[-5].str); + tmplevel[n_levs].boneschar = (char)yyvsp[-4].i; + tmplevel[n_levs].chain = getchain(yyvsp[-3].str); tmplevel[n_levs].lev.base = couple.base; tmplevel[n_levs].lev.rand = couple.rand; - tmplevel[n_levs].chance = yystack.l_mark[0].i; + tmplevel[n_levs].chance = yyvsp[0].i; if(!check_level()) n_levs--; else tmpdungeon[n_dgns].levels++; - Free(yystack.l_mark[-5].str); - Free(yystack.l_mark[-3].str); + Free(yyvsp[-5].str); + Free(yyvsp[-3].str); } break; case 34: -#line 272 "util/dgn_comp.y" - { +{ init_level(); - Strcpy(tmplevel[n_levs].name, yystack.l_mark[-6].str); - tmplevel[n_levs].boneschar = (char)yystack.l_mark[-5].i; - tmplevel[n_levs].chain = getchain(yystack.l_mark[-4].str); + Strcpy(tmplevel[n_levs].name, yyvsp[-6].str); + tmplevel[n_levs].boneschar = (char)yyvsp[-5].i; + tmplevel[n_levs].chain = getchain(yyvsp[-4].str); tmplevel[n_levs].lev.base = couple.base; tmplevel[n_levs].lev.rand = couple.rand; - tmplevel[n_levs].chance = yystack.l_mark[-1].i; - tmplevel[n_levs].rndlevs = yystack.l_mark[0].i; + tmplevel[n_levs].chance = yyvsp[-1].i; + tmplevel[n_levs].rndlevs = yyvsp[0].i; if(!check_level()) n_levs--; else tmpdungeon[n_dgns].levels++; - Free(yystack.l_mark[-6].str); - Free(yystack.l_mark[-4].str); + Free(yyvsp[-6].str); + Free(yyvsp[-4].str); } break; case 37: -#line 293 "util/dgn_comp.y" - { +{ init_branch(); - Strcpy(tmpbranch[n_brs].name, yystack.l_mark[-4].str); + Strcpy(tmpbranch[n_brs].name, yyvsp[-4].str); tmpbranch[n_brs].lev.base = couple.base; tmpbranch[n_brs].lev.rand = couple.rand; - tmpbranch[n_brs].type = yystack.l_mark[-1].i; - tmpbranch[n_brs].up = yystack.l_mark[0].i; + tmpbranch[n_brs].type = yyvsp[-1].i; + tmpbranch[n_brs].up = yyvsp[0].i; if(!check_branch()) n_brs--; else tmpdungeon[n_dgns].branches++; - Free(yystack.l_mark[-4].str); + Free(yyvsp[-4].str); } break; case 38: -#line 307 "util/dgn_comp.y" - { +{ init_branch(); - Strcpy(tmpbranch[n_brs].name, yystack.l_mark[-5].str); - tmpbranch[n_brs].chain = getchain(yystack.l_mark[-4].str); + Strcpy(tmpbranch[n_brs].name, yyvsp[-5].str); + tmpbranch[n_brs].chain = getchain(yyvsp[-4].str); tmpbranch[n_brs].lev.base = couple.base; tmpbranch[n_brs].lev.rand = couple.rand; - tmpbranch[n_brs].type = yystack.l_mark[-1].i; - tmpbranch[n_brs].up = yystack.l_mark[0].i; + tmpbranch[n_brs].type = yyvsp[-1].i; + tmpbranch[n_brs].up = yyvsp[0].i; if(!check_branch()) n_brs--; else tmpdungeon[n_dgns].branches++; - Free(yystack.l_mark[-5].str); - Free(yystack.l_mark[-4].str); + Free(yyvsp[-5].str); + Free(yyvsp[-4].str); } break; case 39: -#line 323 "util/dgn_comp.y" - { +{ yyval.i = TBR_STAIR; /* two way stair */ } break; case 40: -#line 327 "util/dgn_comp.y" - { +{ yyval.i = TBR_STAIR; /* two way stair */ } break; case 41: -#line 331 "util/dgn_comp.y" - { +{ yyval.i = TBR_NO_UP; /* no up staircase */ } break; case 42: -#line 335 "util/dgn_comp.y" - { +{ yyval.i = TBR_NO_DOWN; /* no down staircase */ } break; case 43: -#line 339 "util/dgn_comp.y" - { +{ yyval.i = TBR_PORTAL; /* portal connection */ } break; case 44: -#line 345 "util/dgn_comp.y" - { +{ yyval.i = 0; /* defaults to down */ } break; case 45: -#line 349 "util/dgn_comp.y" - { - yyval.i = yystack.l_mark[0].i; +{ + yyval.i = yyvsp[0].i; } break; case 46: -#line 355 "util/dgn_comp.y" - { - char *p = yystack.l_mark[0].str; +{ + char *p = yyvsp[0].str; if (strlen(p) != 1) { if (strcmp(p, "none") != 0) yyerror("Bones marker must be a single char, or \"none\"!"); @@ -1141,39 +969,36 @@ case 46: } break; case 47: -#line 385 "util/dgn_comp.y" - { - if (yystack.l_mark[-3].i < -MAXLEVEL || yystack.l_mark[-3].i > MAXLEVEL) { +{ + if (yyvsp[-3].i < -MAXLEVEL || yyvsp[-3].i > MAXLEVEL) { yyerror("Abs base out of dlevel range - zeroing!"); couple.base = couple.rand = 0; - } else if (yystack.l_mark[-1].i < -1 || - ((yystack.l_mark[-3].i < 0) ? (MAXLEVEL + yystack.l_mark[-3].i + yystack.l_mark[-1].i + 1) > MAXLEVEL : - (yystack.l_mark[-3].i + yystack.l_mark[-1].i) > MAXLEVEL)) { + } else if (yyvsp[-1].i < -1 || + ((yyvsp[-3].i < 0) ? (MAXLEVEL + yyvsp[-3].i + yyvsp[-1].i + 1) > MAXLEVEL : + (yyvsp[-3].i + yyvsp[-1].i) > MAXLEVEL)) { yyerror("Abs range out of dlevel range - zeroing!"); couple.base = couple.rand = 0; } else { - couple.base = yystack.l_mark[-3].i; - couple.rand = yystack.l_mark[-1].i; + couple.base = yyvsp[-3].i; + couple.rand = yyvsp[-1].i; } } break; case 48: -#line 422 "util/dgn_comp.y" - { - if (yystack.l_mark[-3].i < -MAXLEVEL || yystack.l_mark[-3].i > MAXLEVEL) { +{ + if (yyvsp[-3].i < -MAXLEVEL || yyvsp[-3].i > MAXLEVEL) { yyerror("Rel base out of dlevel range - zeroing!"); couple.base = couple.rand = 0; } else { - couple.base = yystack.l_mark[-3].i; - couple.rand = yystack.l_mark[-1].i; + couple.base = yyvsp[-3].i; + couple.rand = yyvsp[-1].i; } } break; -#line 1173 "" } - yystack.s_mark -= yym; - yystate = *yystack.s_mark; - yystack.l_mark -= yym; + yyssp -= yym; + yystate = *yyssp; + yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { @@ -1183,21 +1008,23 @@ break; state %d\n", YYPREFIX, YYFINAL); #endif yystate = YYFINAL; - *++yystack.s_mark = YYFINAL; - *++yystack.l_mark = yyval; + *++yyssp = YYFINAL; + *++yyvsp = yyval; if (yychar < 0) { - if ((yychar = YYLEX) < 0) yychar = YYEOF; + if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { - yys = yyname[YYTRANSLATE(yychar)]; + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } - if (yychar == YYEOF) goto yyaccept; + if (yychar == 0) goto yyaccept; goto yyloop; } if ((yyn = yygindex[yym]) != 0 && (yyn += yystate) >= 0 && @@ -1208,24 +1035,19 @@ break; #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \ -to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +to state %d\n", YYPREFIX, *yyssp, yystate); #endif - if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } - *++yystack.s_mark = (YYINT) yystate; - *++yystack.l_mark = yyval; + *++yyssp = yystate; + *++yyvsp = yyval; goto yyloop; - yyoverflow: - YYERROR_CALL("yacc stack overflow"); - + yyerror("yacc stack overflow"); yyabort: - yyfreestack(&yystack); return (1); - yyaccept: - yyfreestack(&yystack); return (0); } diff --git a/sys/share/lev_comp.h b/sys/share/lev_comp.h index 2f4ae4d13..1e3f16fa4 100644 --- a/sys/share/lev_comp.h +++ b/sys/share/lev_comp.h @@ -172,12 +172,6 @@ #define METHOD_SEL 428 #define METHOD_SEL_ARRAY 429 #define DICE 430 -#ifdef YYSTYPE -#undef YYSTYPE_IS_DECLARED -#define YYSTYPE_IS_DECLARED 1 -#endif -#ifndef YYSTYPE_IS_DECLARED -#define YYSTYPE_IS_DECLARED 1 typedef union { long i; @@ -215,5 +209,4 @@ typedef union char *varstr; } meth; } YYSTYPE; -#endif /* !YYSTYPE_IS_DECLARED */ extern YYSTYPE yylval; diff --git a/sys/share/lev_yacc.c b/sys/share/lev_yacc.c index 812aa48b1..b6ac4d935 100644 --- a/sys/share/lev_yacc.c +++ b/sys/share/lev_yacc.c @@ -1,26 +1,17 @@ -/* original parser id follows */ -/* yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93" */ -/* nhsccsid[] = \"@(#)yaccpar 1.9.0-nh2 (NetHack) 11/22/2018\"; */ -/* (use YYMAJOR/YYMINOR for ifdefs dependent on parser version) */ - +#ifndef lint +/* static char yysccsid[] = "@(#)yaccpar 1.9 (Berkeley) 02/21/93"; */ +/* static char nhsccsid[] = "@(#)yaccpar 1.9.0-nh (NetHack) 12/03/2015"; */ +#endif #define YYBYACC 1 #define YYMAJOR 1 #define YYMINOR 9 -#define YYSUBMINOR "0-nh2" -#define YYPATCH 20160324 +#define YYSUBMINOR "0-nh" -#define YYEMPTY (-1) -#define yyclearin (yychar = YYEMPTY) -#define yyerrok (yyerrflag = 0) -#define YYRECOVERING() (yyerrflag != 0) -#define YYENOMEM (-2) -#define YYEOF 0 +#define yyclearin (yychar=(-1)) +#define yyerrok (yyerrflag=0) +#define YYRECOVERING (yyerrflag!=0) #define YYPREFIX "yy" - -#define YYPURE 0 - -#line 2 "util/lev_comp.y" -/* 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 $ */ +/* NetHack 3.6 lev_comp.y $NHDT-Date: 1551901401 2019/03/06 19:43:21 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.26 $ */ /* Copyright (c) 1989 by Jean-Christophe Collet */ /* NetHack may be freely redistributed. See license for details. */ @@ -166,13 +157,6 @@ extern const char *fname; extern char curr_token[512]; -#line 150 "util/lev_comp.y" -#ifdef YYSTYPE -#undef YYSTYPE_IS_DECLARED -#define YYSTYPE_IS_DECLARED 1 -#endif -#ifndef YYSTYPE_IS_DECLARED -#define YYSTYPE_IS_DECLARED 1 typedef union { long i; @@ -210,43 +194,6 @@ typedef union char *varstr; } meth; } YYSTYPE; -#endif /* !YYSTYPE_IS_DECLARED */ -#line 215 "" - -/* compatibility with bison */ -#ifdef YYPARSE_PARAM -/* compatibility with FreeBSD */ -# ifdef YYPARSE_PARAM_TYPE -# define YYPARSE_DECL() yyparse(YYPARSE_PARAM_TYPE YYPARSE_PARAM) -# else -# define YYPARSE_DECL() yyparse(void *YYPARSE_PARAM) -# endif -#else -# define YYPARSE_DECL() yyparse(void) -#endif - -/* Parameters sent to lex. */ -#ifdef YYLEX_PARAM -# define YYLEX_DECL() yylex(void *YYLEX_PARAM) -# define YYLEX yylex(YYLEX_PARAM) -#else -# define YYLEX_DECL() yylex(void) -# define YYLEX yylex() -#endif - -/* Parameters sent to yyerror. */ -#ifndef YYERROR_DECL -#define YYERROR_DECL() yyerror(const char *s) -#endif -#ifndef YYERROR_CALL -#define YYERROR_CALL(msg) yyerror(msg) -#endif - -extern int YYPARSE_DECL(); -#define YYNHXFLAG 1 -#define YYSTACKSIZE 500 -#define YYMAXDEPTH 500 - #define CHAR 257 #define INTEGER 258 #define BOOLEAN 259 @@ -422,8 +369,7 @@ extern int YYPARSE_DECL(); #define METHOD_SEL_ARRAY 429 #define DICE 430 #define YYERRCODE 256 -typedef short YYINT; - YYINT yylhs[] = { -1, +short yylhs[] = { -1, 0, 0, 73, 73, 74, 57, 57, 56, 56, 76, 76, 76, 76, 55, 55, 54, 54, 46, 46, 14, 14, 75, 75, 26, 26, 22, 22, 23, 78, 78, @@ -466,7 +412,7 @@ typedef short YYINT; 153, 153, 153, 153, 51, 51, 52, 52, 53, 53, 25, 25, 67, 67, 66, }; - YYINT yylen[] = { 2, +short yylen[] = { 2, 0, 1, 1, 2, 3, 3, 5, 1, 1, 5, 5, 3, 16, 0, 2, 0, 2, 0, 2, 1, 1, 0, 3, 3, 1, 0, 2, 3, 1, 1, @@ -509,7 +455,7 @@ typedef short YYINT; 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 9, }; - YYINT yydefred[] = { 0, +short yydefred[] = { 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 4, 0, 6, 0, 133, 0, 0, 0, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -598,7 +544,7 @@ typedef short YYINT; 171, 142, 0, 0, 0, 0, 20, 21, 0, 0, 0, 13, 17, 381, }; - YYINT yydgoto[] = { 3, +short yydgoto[] = { 3, 209, 449, 233, 271, 236, 486, 490, 671, 491, 351, 757, 729, 689, 859, 294, 467, 614, 354, 578, 584, 730, 80, 337, 822, 512, 133, 788, 789, 747, 345, @@ -616,7 +562,7 @@ typedef short YYINT; 521, 319, 401, 295, 517, 272, 800, 841, 230, 359, 220, 355, 580, 790, 196, 182, 530, 531, }; - YYINT yysindex[] = { 68, +short yysindex[] = { 68, 17, 31, 0, -217, 0, 68, -257, -226, 112, 5680, 0, 136, 0, -136, 0, 170, 185, 201, 0, 225, 229, 238, 244, 248, 251, 255, 266, 272, 275, 283, @@ -705,7 +651,7 @@ typedef short YYINT; 0, 0, 1024, 109, -149, 1026, 0, 0, 876, 109, 1028, 0, 0, 0, }; - YYINT yyrindex[] = { 1071, +short yyrindex[] = { 1071, 0, 0, 0, 5225, 0, 1072, 0, 0, 0, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2985, 0, 0, 0, @@ -794,7 +740,7 @@ typedef short YYINT; 0, 0, 0, 0, 0, 1043, 0, 0, 4715, 0, 0, 0, 0, 0, }; - YYINT yygindex[] = { 0, +short yygindex[] = { 0, 410, 294, 0, 487, -329, -480, 0, 0, 438, 645, 330, 0, 0, 0, 0, -474, 0, 0, 0, 0, 0, -86, -287, 0, 0, 901, 0, 273, -629, 657, @@ -813,7 +759,7 @@ typedef short YYINT; 975, 0, 0, 0, 792, 680, 504, 0, }; #define YYTABLESIZE 6091 - YYINT yytable[] = { 186, +short yytable[] = { 186, 181, 299, 211, 195, 177, 255, 252, 400, 237, 238, 507, 518, 260, 261, 266, 499, 608, 177, 206, 273, 514, 283, 284, 285, 282, 177, 206, 313, 296, 224, @@ -1425,7 +1371,7 @@ typedef short YYINT; 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, }; - YYINT yycheck[] = { 86, +short yycheck[] = { 86, 59, 169, 136, 134, 40, 40, 144, 295, 142, 143, 395, 40, 146, 147, 148, 40, 497, 40, 40, 40, 40, 159, 160, 161, 158, 40, 40, 37, 166, 40, @@ -2042,11 +1988,8 @@ typedef short YYINT; #define YYDEBUG 0 #endif #define YYMAXTOKEN 430 -#define YYUNDFTOKEN 591 -#define YYTRANSLATE(a) ((a) > YYMAXTOKEN ? YYUNDFTOKEN : (a)) #if YYDEBUG - char * yyname[] = { - +char *yyname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,"'%'","'&'",0,"'('","')'","'*'","'+'","','","'-'","'.'","'/'",0,0,0,0,0,0, 0,0,0,0,"':'",0,0,"'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -2088,13 +2031,9 @@ typedef short YYINT; "METHOD_VAR","METHOD_VAR_ARRAY","METHOD_COORD","METHOD_COORD_ARRAY", "METHOD_REGION","METHOD_REGION_ARRAY","METHOD_MAPCHAR","METHOD_MAPCHAR_ARRAY", "METHOD_MONST","METHOD_MONST_ARRAY","METHOD_OBJ","METHOD_OBJ_ARRAY", -"METHOD_SEL","METHOD_SEL_ARRAY","DICE",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"illegal-symbol", +"METHOD_SEL","METHOD_SEL_ARRAY","DICE", }; - char * yyrule[] = { +char *yyrule[] = { "$accept : file", "file :", "file : levels", @@ -2501,118 +2440,43 @@ typedef short YYINT; "lev_region : region", "lev_region : LEV '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'", "region : '(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ')'", - }; #endif - -int yydebug; -int yynerrs; - -int yyerrflag; -int yychar; -YYSTYPE yyval; -YYSTYPE yylval; - -/* define the initial stack-sizes */ #ifdef YYSTACKSIZE #undef YYMAXDEPTH -#define YYMAXDEPTH YYSTACKSIZE +#define YYMAXDEPTH YYSTACKSIZE #else #ifdef YYMAXDEPTH #define YYSTACKSIZE YYMAXDEPTH #else -#define YYSTACKSIZE 10000 -#define YYMAXDEPTH 10000 +#define YYSTACKSIZE 500 +#define YYMAXDEPTH 500 #endif #endif - -#define YYINITSTACKSIZE 200 - -typedef struct { - unsigned stacksize; - YYINT *s_base; - YYINT *s_mark; - YYINT *s_last; - YYSTYPE *l_base; - YYSTYPE *l_mark; -} YYSTACKDATA; -/* variables for the parser stack */ -static YYSTACKDATA yystack; -#line 2720 "util/lev_comp.y" +int yydebug; +int yynerrs; +int yyerrflag; +int yychar; +short *yyssp; +YYSTYPE *yyvsp; +YYSTYPE yyval; +YYSTYPE yylval; +short yyss[YYSTACKSIZE]; +YYSTYPE yyvs[YYSTACKSIZE]; +#define yystacksize YYSTACKSIZE /*lev_comp.y*/ -#line 2545 "" - -#if YYDEBUG -#include /* needed for printf */ -#endif - -#if YYNHXFLAG -extern char *getenv(); -#define CONST -#else -#include /* needed for malloc, etc */ -#include /* needed for memset */ -#define CONST const -#endif - -/* allocate initial stack or double stack size, up to YYMAXDEPTH */ -static int yygrowstack(YYSTACKDATA *data) -{ - int i; - unsigned newsize; - YYINT *newss; - YYSTYPE *newvs; - - if ((newsize = data->stacksize) == 0) - newsize = YYINITSTACKSIZE; - else if (newsize >= YYMAXDEPTH) - return YYENOMEM; - else if ((newsize *= 2) > YYMAXDEPTH) - newsize = YYMAXDEPTH; - - i = (int) (data->s_mark - data->s_base); - newss = (YYINT *)realloc(data->s_base, newsize * sizeof(*newss)); - if (newss == 0) - return YYENOMEM; - - data->s_base = newss; - data->s_mark = newss + i; - - newvs = (YYSTYPE *)realloc(data->l_base, newsize * sizeof(*newvs)); - if (newvs == 0) - return YYENOMEM; - - data->l_base = newvs; - data->l_mark = newvs + i; - - data->stacksize = newsize; - data->s_last = data->s_base + newsize - 1; - return 0; -} - -#if YYPURE || defined(YY_NO_LEAKS) -static void yyfreestack(YYSTACKDATA *data) -{ - free(data->s_base); - free(data->l_base); - memset(data, 0, sizeof(*data)); -} -#else -#define yyfreestack(data) /* nothing */ -#endif - -#define YYABORT goto yyabort +#define YYABORT goto yyabort #define YYREJECT goto yyabort #define YYACCEPT goto yyaccept -#define YYERROR goto yyerrlab - +#define YYERROR goto yyerrlab int -YYPARSE_DECL() +yyparse() { - int yym, yyn, yystate; + register int yym, yyn, yystate; #if YYDEBUG - CONST char *yys; + register char *yys; + extern char *getenv(); if ((yys = getenv("YYDEBUG")) != 0) { @@ -2624,28 +2488,23 @@ YYPARSE_DECL() yynerrs = 0; yyerrflag = 0; - yychar = YYEMPTY; - yystate = 0; + yychar = (-1); -#if YYPURE - memset(&yystack, 0, sizeof(yystack)); -#endif - - if (yystack.s_base == NULL && yygrowstack(&yystack) == YYENOMEM) goto yyoverflow; - yystack.s_mark = yystack.s_base; - yystack.l_mark = yystack.l_base; - yystate = 0; - *yystack.s_mark = 0; + yyssp = yyss; + yyvsp = yyvs; + *yyssp = yystate = 0; yyloop: if ((yyn = yydefred[yystate]) != 0) goto yyreduce; if (yychar < 0) { - if ((yychar = YYLEX) < 0) yychar = YYEOF; + if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { - yys = yyname[YYTRANSLATE(yychar)]; + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, yystate, yychar, yys); } @@ -2659,14 +2518,13 @@ yyloop: printf("%sdebug: state %d, shifting to state %d\n", YYPREFIX, yystate, yytable[yyn]); #endif - if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } - yystate = yytable[yyn]; - *++yystack.s_mark = yytable[yyn]; - *++yystack.l_mark = yylval; - yychar = YYEMPTY; + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; + yychar = (-1); if (yyerrflag > 0) --yyerrflag; goto yyloop; } @@ -2677,35 +2535,32 @@ yyloop: goto yyreduce; } if (yyerrflag) goto yyinrecovery; - - YYERROR_CALL("syntax error"); - + goto yynewerror; +yynewerror: + yyerror("syntax error"); goto yyerrlab; - yyerrlab: ++yynerrs; - yyinrecovery: if (yyerrflag < 3) { yyerrflag = 3; for (;;) { - if ((yyn = yysindex[*yystack.s_mark]) != 0 && (yyn += YYERRCODE) >= 0 && + if ((yyn = yysindex[*yyssp]) != 0 && (yyn += YYERRCODE) >= 0 && yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE) { #if YYDEBUG if (yydebug) printf("%sdebug: state %d, error recovery shifting\ - to state %d\n", YYPREFIX, *yystack.s_mark, yytable[yyn]); + to state %d\n", YYPREFIX, *yyssp, yytable[yyn]); #endif - if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } - yystate = yytable[yyn]; - *++yystack.s_mark = yytable[yyn]; - *++yystack.l_mark = yylval; + *++yyssp = yystate = yytable[yyn]; + *++yyvsp = yylval; goto yyloop; } else @@ -2713,29 +2568,30 @@ yyinrecovery: #if YYDEBUG if (yydebug) printf("%sdebug: error recovery discarding state %d\n", - YYPREFIX, *yystack.s_mark); + YYPREFIX, *yyssp); #endif - if (yystack.s_mark <= yystack.s_base) goto yyabort; - --yystack.s_mark; - --yystack.l_mark; + if (yyssp <= yyss) goto yyabort; + --yyssp; + --yyvsp; } } } else { - if (yychar == YYEOF) goto yyabort; + if (yychar == 0) goto yyabort; #if YYDEBUG if (yydebug) { - yys = yyname[YYTRANSLATE(yychar)]; + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, error recovery discards token %d (%s)\n", YYPREFIX, yystate, yychar, yys); } #endif - yychar = YYEMPTY; + yychar = (-1); goto yyloop; } - yyreduce: #if YYDEBUG if (yydebug) @@ -2743,29 +2599,25 @@ yyreduce: YYPREFIX, yystate, yyn, yyrule[yyn]); #endif yym = yylen[yyn]; - if (yym) - yyval = yystack.l_mark[1-yym]; - else - memset(&yyval, 0, sizeof yyval); + yyval = yyvsp[1-yym]; switch (yyn) { case 5: -#line 290 "util/lev_comp.y" - { +{ if (fatal_error > 0) { (void) fprintf(stderr, "%s: %d errors detected for level \"%s\". No output created!\n", - fname, fatal_error, yystack.l_mark[-2].map); + fname, fatal_error, yyvsp[-2].map); fatal_error = 0; got_errors++; } else if (!got_errors) { - if (!write_level_file(yystack.l_mark[-2].map, splev)) { + if (!write_level_file(yyvsp[-2].map, splev)) { lc_error("Can't write output file for '%s'!", - yystack.l_mark[-2].map); + yyvsp[-2].map); exit(EXIT_FAILURE); } } - Free(yystack.l_mark[-2].map); + Free(yyvsp[-2].map); Free(splev); splev = NULL; vardef_free_all(vardefs); @@ -2773,22 +2625,20 @@ case 5: } break; case 6: -#line 313 "util/lev_comp.y" - { - start_level_def(&splev, yystack.l_mark[0].map); - yyval.map = yystack.l_mark[0].map; +{ + start_level_def(&splev, yyvsp[0].map); + yyval.map = yyvsp[0].map; } break; case 7: -#line 318 "util/lev_comp.y" - { - start_level_def(&splev, yystack.l_mark[-2].map); - if (yystack.l_mark[0].i == -1) { +{ + start_level_def(&splev, yyvsp[-2].map); + if (yyvsp[0].i == -1) { add_opvars(splev, "iiiiiiiio", VA_PASS9(LVLINIT_MAZEGRID, HWALL, 0,0, 0,0,0,0, SPO_INITLEVEL)); } else { - int bg = (int) what_map_char((char) yystack.l_mark[0].i); + int bg = (int) what_map_char((char) yyvsp[0].i); add_opvars(splev, "iiiiiiiio", VA_PASS9(LVLINIT_SOLIDFILL, bg, 0,0, @@ -2798,40 +2648,36 @@ case 7: VA_PASS2(MAZELEVEL, SPO_LEVEL_FLAGS)); max_x_map = COLNO-1; max_y_map = ROWNO; - yyval.map = yystack.l_mark[-2].map; + yyval.map = yyvsp[-2].map; } break; case 8: -#line 340 "util/lev_comp.y" - { +{ yyval.i = -1; } break; case 9: -#line 344 "util/lev_comp.y" - { - yyval.i = what_map_char((char) yystack.l_mark[0].i); +{ + yyval.i = what_map_char((char) yyvsp[0].i); } break; case 10: -#line 350 "util/lev_comp.y" - { - int filling = (int) yystack.l_mark[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", VA_PASS9(LVLINIT_SOLIDFILL, filling, - 0, (int) yystack.l_mark[0].terr.lit, + 0, (int) yyvsp[0].terr.lit, 0,0,0,0, SPO_INITLEVEL)); max_x_map = COLNO-1; max_y_map = ROWNO; } break; case 11: -#line 363 "util/lev_comp.y" - { - int filling = (int) what_map_char((char) yystack.l_mark[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."); @@ -2843,23 +2689,21 @@ case 11: } break; case 12: -#line 375 "util/lev_comp.y" - { +{ add_opvars(splev, "iiiiiiiio", VA_PASS9(LVLINIT_ROGUE,0,0,0, 0,0,0,0, SPO_INITLEVEL)); } break; case 13: -#line 381 "util/lev_comp.y" - { - int fg = (int) what_map_char((char) yystack.l_mark[-11].i), - bg = (int) what_map_char((char) yystack.l_mark[-9].i); - int smoothed = (int) yystack.l_mark[-7].i, - joined = (int) yystack.l_mark[-5].i, - lit = (int) yystack.l_mark[-3].i, - walled = (int) yystack.l_mark[-1].i, - filling = (int) yystack.l_mark[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."); @@ -2880,374 +2724,328 @@ case 13: } break; case 14: -#line 410 "util/lev_comp.y" - { +{ yyval.i = 0; } break; case 15: -#line 414 "util/lev_comp.y" - { - yyval.i = yystack.l_mark[0].i; +{ + yyval.i = yyvsp[0].i; } break; case 16: -#line 420 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_COPY)); yyval.i = 0; } break; case 17: -#line 425 "util/lev_comp.y" - { +{ yyval.i = 1; } break; case 18: -#line 431 "util/lev_comp.y" - { +{ yyval.i = -1; } break; case 19: -#line 435 "util/lev_comp.y" - { - yyval.i = what_map_char((char) yystack.l_mark[0].i); +{ + yyval.i = what_map_char((char) yyvsp[0].i); } break; case 22: -#line 446 "util/lev_comp.y" - { +{ add_opvars(splev, "io", VA_PASS2(0, SPO_LEVEL_FLAGS)); } break; case 23: -#line 450 "util/lev_comp.y" - { +{ add_opvars(splev, "io", - VA_PASS2((int) yystack.l_mark[0].i, SPO_LEVEL_FLAGS)); + VA_PASS2((int) yyvsp[0].i, SPO_LEVEL_FLAGS)); } break; case 24: -#line 457 "util/lev_comp.y" - { - yyval.i = (yystack.l_mark[-2].i | yystack.l_mark[0].i); +{ + yyval.i = (yyvsp[-2].i | yyvsp[0].i); } break; case 25: -#line 461 "util/lev_comp.y" - { - yyval.i = yystack.l_mark[0].i; +{ + yyval.i = yyvsp[0].i; } break; case 26: -#line 467 "util/lev_comp.y" - { +{ yyval.i = 0; } break; case 27: -#line 471 "util/lev_comp.y" - { - yyval.i = 1 + yystack.l_mark[0].i; +{ + yyval.i = 1 + yyvsp[0].i; } break; case 28: -#line 477 "util/lev_comp.y" - { - yyval.i = yystack.l_mark[-1].i; +{ + yyval.i = yyvsp[-1].i; } break; case 96: -#line 560 "util/lev_comp.y" - { +{ struct lc_vardefs *vd; - if ((vd = vardef_defined(vardefs, yystack.l_mark[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'", - yystack.l_mark[0].map); + yyvsp[0].map); } else lc_error("Trying to shuffle undefined variable '%s'", - yystack.l_mark[0].map); - add_opvars(splev, "so", VA_PASS2(yystack.l_mark[0].map, SPO_SHUFFLE_ARRAY)); - Free(yystack.l_mark[0].map); + yyvsp[0].map); + add_opvars(splev, "so", VA_PASS2(yyvsp[0].map, SPO_SHUFFLE_ARRAY)); + Free(yyvsp[0].map); } break; case 97: -#line 576 "util/lev_comp.y" - { - vardefs = add_vardef_type(vardefs, yystack.l_mark[-2].map, SPOVAR_INT); - add_opvars(splev, "iso", VA_PASS3(0, yystack.l_mark[-2].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-2].map); +{ + 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: -#line 582 "util/lev_comp.y" - { - vardefs = add_vardef_type(vardefs, yystack.l_mark[-4].map, SPOVAR_SEL); - add_opvars(splev, "iso", VA_PASS3(0, yystack.l_mark[-4].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-4].map); +{ + 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: -#line 588 "util/lev_comp.y" - { - vardefs = add_vardef_type(vardefs, yystack.l_mark[-2].map, SPOVAR_STRING); - add_opvars(splev, "iso", VA_PASS3(0, yystack.l_mark[-2].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-2].map); +{ + 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: -#line 594 "util/lev_comp.y" - { - vardefs = add_vardef_type(vardefs, yystack.l_mark[-4].map, SPOVAR_MAPCHAR); - add_opvars(splev, "iso", VA_PASS3(0, yystack.l_mark[-4].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-4].map); +{ + 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: -#line 600 "util/lev_comp.y" - { - vardefs = add_vardef_type(vardefs, yystack.l_mark[-4].map, SPOVAR_MONST); - add_opvars(splev, "iso", VA_PASS3(0, yystack.l_mark[-4].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-4].map); +{ + 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: -#line 606 "util/lev_comp.y" - { - vardefs = add_vardef_type(vardefs, yystack.l_mark[-4].map, SPOVAR_OBJ); - add_opvars(splev, "iso", VA_PASS3(0, yystack.l_mark[-4].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-4].map); +{ + 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: -#line 612 "util/lev_comp.y" - { - vardefs = add_vardef_type(vardefs, yystack.l_mark[-2].map, SPOVAR_COORD); - add_opvars(splev, "iso", VA_PASS3(0, yystack.l_mark[-2].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-2].map); +{ + 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: -#line 618 "util/lev_comp.y" - { - vardefs = add_vardef_type(vardefs, yystack.l_mark[-2].map, SPOVAR_REGION); - add_opvars(splev, "iso", VA_PASS3(0, yystack.l_mark[-2].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-2].map); +{ + 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: -#line 624 "util/lev_comp.y" - { - int n_items = (int) yystack.l_mark[-1].i; +{ + int n_items = (int) yyvsp[-1].i; - vardefs = add_vardef_type(vardefs, yystack.l_mark[-4].map, + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_INT | SPOVAR_ARRAY); add_opvars(splev, "iso", - VA_PASS3(n_items, yystack.l_mark[-4].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-4].map); + VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); + Free(yyvsp[-4].map); } break; case 106: -#line 634 "util/lev_comp.y" - { - int n_items = (int) yystack.l_mark[-1].i; +{ + int n_items = (int) yyvsp[-1].i; - vardefs = add_vardef_type(vardefs, yystack.l_mark[-4].map, + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_COORD | SPOVAR_ARRAY); add_opvars(splev, "iso", - VA_PASS3(n_items, yystack.l_mark[-4].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-4].map); + VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); + Free(yyvsp[-4].map); } break; case 107: -#line 644 "util/lev_comp.y" - { - int n_items = (int) yystack.l_mark[-1].i; +{ + int n_items = (int) yyvsp[-1].i; - vardefs = add_vardef_type(vardefs, yystack.l_mark[-4].map, + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_REGION | SPOVAR_ARRAY); add_opvars(splev, "iso", - VA_PASS3(n_items, yystack.l_mark[-4].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-4].map); + VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); + Free(yyvsp[-4].map); } break; case 108: -#line 654 "util/lev_comp.y" - { - int n_items = (int) yystack.l_mark[-1].i; +{ + int n_items = (int) yyvsp[-1].i; - vardefs = add_vardef_type(vardefs, yystack.l_mark[-6].map, + vardefs = add_vardef_type(vardefs, yyvsp[-6].map, SPOVAR_MAPCHAR | SPOVAR_ARRAY); add_opvars(splev, "iso", - VA_PASS3(n_items, yystack.l_mark[-6].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-6].map); + VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); + Free(yyvsp[-6].map); } break; case 109: -#line 664 "util/lev_comp.y" - { - int n_items = (int) yystack.l_mark[-1].i; +{ + int n_items = (int) yyvsp[-1].i; - vardefs = add_vardef_type(vardefs, yystack.l_mark[-6].map, + vardefs = add_vardef_type(vardefs, yyvsp[-6].map, SPOVAR_MONST | SPOVAR_ARRAY); add_opvars(splev, "iso", - VA_PASS3(n_items, yystack.l_mark[-6].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-6].map); + VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); + Free(yyvsp[-6].map); } break; case 110: -#line 674 "util/lev_comp.y" - { - int n_items = (int) yystack.l_mark[-1].i; +{ + int n_items = (int) yyvsp[-1].i; - vardefs = add_vardef_type(vardefs, yystack.l_mark[-6].map, + vardefs = add_vardef_type(vardefs, yyvsp[-6].map, SPOVAR_OBJ | SPOVAR_ARRAY); add_opvars(splev, "iso", - VA_PASS3(n_items, yystack.l_mark[-6].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-6].map); + VA_PASS3(n_items, yyvsp[-6].map, SPO_VAR_INIT)); + Free(yyvsp[-6].map); } break; case 111: -#line 684 "util/lev_comp.y" - { - int n_items = (int) yystack.l_mark[-1].i; +{ + int n_items = (int) yyvsp[-1].i; - vardefs = add_vardef_type(vardefs, yystack.l_mark[-4].map, + vardefs = add_vardef_type(vardefs, yyvsp[-4].map, SPOVAR_STRING | SPOVAR_ARRAY); add_opvars(splev, "iso", - VA_PASS3(n_items, yystack.l_mark[-4].map, SPO_VAR_INIT)); - Free(yystack.l_mark[-4].map); + VA_PASS3(n_items, yyvsp[-4].map, SPO_VAR_INIT)); + Free(yyvsp[-4].map); } break; case 112: -#line 696 "util/lev_comp.y" - { - add_opvars(splev, "O", VA_PASS1(yystack.l_mark[0].i)); +{ + add_opvars(splev, "O", VA_PASS1(yyvsp[0].i)); yyval.i = 1; } break; case 113: -#line 701 "util/lev_comp.y" - { - add_opvars(splev, "O", VA_PASS1(yystack.l_mark[0].i)); - yyval.i = 1 + yystack.l_mark[-2].i; +{ + add_opvars(splev, "O", VA_PASS1(yyvsp[0].i)); + yyval.i = 1 + yyvsp[-2].i; } break; case 114: -#line 708 "util/lev_comp.y" - { - add_opvars(splev, "M", VA_PASS1(yystack.l_mark[0].i)); +{ + add_opvars(splev, "M", VA_PASS1(yyvsp[0].i)); yyval.i = 1; } break; case 115: -#line 713 "util/lev_comp.y" - { - add_opvars(splev, "M", VA_PASS1(yystack.l_mark[0].i)); - yyval.i = 1 + yystack.l_mark[-2].i; +{ + add_opvars(splev, "M", VA_PASS1(yyvsp[0].i)); + yyval.i = 1 + yyvsp[-2].i; } break; case 116: -#line 720 "util/lev_comp.y" - { - add_opvars(splev, "m", VA_PASS1(yystack.l_mark[0].i)); +{ + add_opvars(splev, "m", VA_PASS1(yyvsp[0].i)); yyval.i = 1; } break; case 117: -#line 725 "util/lev_comp.y" - { - add_opvars(splev, "m", VA_PASS1(yystack.l_mark[0].i)); - yyval.i = 1 + yystack.l_mark[-2].i; +{ + add_opvars(splev, "m", VA_PASS1(yyvsp[0].i)); + yyval.i = 1 + yyvsp[-2].i; } break; case 118: -#line 732 "util/lev_comp.y" - { +{ yyval.i = 1; } break; case 119: -#line 736 "util/lev_comp.y" - { - yyval.i = 1 + yystack.l_mark[-2].i; +{ + yyval.i = 1 + yyvsp[-2].i; } break; case 120: -#line 742 "util/lev_comp.y" - { - add_opvars(splev, "c", VA_PASS1(yystack.l_mark[0].i)); +{ + add_opvars(splev, "c", VA_PASS1(yyvsp[0].i)); yyval.i = 1; } break; case 121: -#line 747 "util/lev_comp.y" - { - add_opvars(splev, "c", VA_PASS1(yystack.l_mark[0].i)); - yyval.i = 1 + yystack.l_mark[-2].i; +{ + add_opvars(splev, "c", VA_PASS1(yyvsp[0].i)); + yyval.i = 1 + yyvsp[-2].i; } break; case 122: -#line 754 "util/lev_comp.y" - { +{ yyval.i = 1; } break; case 123: -#line 758 "util/lev_comp.y" - { - yyval.i = 1 + yystack.l_mark[-2].i; +{ + yyval.i = 1 + yyvsp[-2].i; } break; case 124: -#line 764 "util/lev_comp.y" - { +{ yyval.i = 1; } break; case 125: -#line 768 "util/lev_comp.y" - { - yyval.i = 1 + yystack.l_mark[-2].i; +{ + yyval.i = 1 + yyvsp[-2].i; } break; case 126: -#line 774 "util/lev_comp.y" - { +{ struct lc_funcdefs *funcdef; if (in_function_definition) - lc_error("Recursively defined functions not allowed (function %s).", yystack.l_mark[-1].map); + lc_error("Recursively defined functions not allowed (function %s).", yyvsp[-1].map); in_function_definition++; - if (funcdef_defined(function_definitions, yystack.l_mark[-1].map, 1)) - lc_error("Function '%s' already defined once.", yystack.l_mark[-1].map); + if (funcdef_defined(function_definitions, yyvsp[-1].map, 1)) + lc_error("Function '%s' already defined once.", yyvsp[-1].map); - funcdef = funcdef_new(-1, yystack.l_mark[-1].map); + funcdef = funcdef_new(-1, yyvsp[-1].map); funcdef->next = function_definitions; function_definitions = funcdef; function_splev_backup = splev; splev = &(funcdef->code); - Free(yystack.l_mark[-1].map); + Free(yyvsp[-1].map); curr_function = funcdef; function_tmp_var_defs = vardefs; vardefs = NULL; } break; case 127: -#line 796 "util/lev_comp.y" - { +{ /* nothing */ } break; case 128: -#line 800 "util/lev_comp.y" - { +{ add_opvars(splev, "io", VA_PASS2(0, SPO_RETURN)); splev = function_splev_backup; in_function_definition--; @@ -3257,25 +3055,24 @@ case 128: } break; case 129: -#line 811 "util/lev_comp.y" - { +{ struct lc_funcdefs *tmpfunc; - tmpfunc = funcdef_defined(function_definitions, yystack.l_mark[-3].map, 1); + tmpfunc = funcdef_defined(function_definitions, yyvsp[-3].map, 1); if (tmpfunc) { int l; - int nparams = (int) strlen(yystack.l_mark[-1].map); + int nparams = (int) strlen(yyvsp[-1].map); char *fparamstr = funcdef_paramtypes(tmpfunc); - if (strcmp(yystack.l_mark[-1].map, fparamstr)) { + if (strcmp(yyvsp[-1].map, fparamstr)) { char *tmps = strdup(decode_parm_str(fparamstr)); lc_error("Function '%s' requires params '%s', got '%s' instead.", - yystack.l_mark[-3].map, tmps, decode_parm_str(yystack.l_mark[-1].map)); + yyvsp[-3].map, tmps, decode_parm_str(yyvsp[-1].map)); Free(tmps); } Free(fparamstr); - Free(yystack.l_mark[-1].map); + Free(yyvsp[-1].map); if (!(tmpfunc->n_called)) { /* we haven't called the function yet, so insert it in the code */ struct opvar *jmp = New(struct opvar); @@ -3306,61 +3103,53 @@ case 129: VA_PASS3(nparams, l, SPO_CALL)); tmpfunc->n_called++; } else { - lc_error("Function '%s' not defined.", yystack.l_mark[-3].map); + lc_error("Function '%s' not defined.", yyvsp[-3].map); } - Free(yystack.l_mark[-3].map); + Free(yyvsp[-3].map); } break; case 130: -#line 866 "util/lev_comp.y" - { +{ add_opcode(splev, SPO_EXIT, NULL); } break; case 131: -#line 872 "util/lev_comp.y" - { +{ yyval.i = 100; } break; case 132: -#line 876 "util/lev_comp.y" - { - yyval.i = yystack.l_mark[0].i; +{ + yyval.i = yyvsp[0].i; } break; case 133: -#line 882 "util/lev_comp.y" - { +{ /* val > rn2(100) */ add_opvars(splev, "iio", - VA_PASS3((int) yystack.l_mark[0].i, 100, SPO_RN2)); + VA_PASS3((int) yyvsp[0].i, 100, SPO_RN2)); yyval.i = SPO_JG; } break; case 134: -#line 889 "util/lev_comp.y" - { - yyval.i = yystack.l_mark[-2].i; +{ + yyval.i = yyvsp[-2].i; } break; case 135: -#line 893 "util/lev_comp.y" - { +{ /* boolean, explicit foo != 0 */ add_opvars(splev, "i", VA_PASS1(0)); yyval.i = SPO_JNE; } break; case 136: -#line 901 "util/lev_comp.y" - { +{ is_inconstant_number = 0; } break; case 137: -#line 905 "util/lev_comp.y" - { +{ struct opvar *chkjmp; if (in_switch_statement > 0) @@ -3384,8 +3173,7 @@ case 137: } break; case 138: -#line 928 "util/lev_comp.y" - { +{ struct opvar *endjump = New(struct opvar); int i; @@ -3425,25 +3213,22 @@ case 138: } break; case 141: -#line 973 "util/lev_comp.y" - { +{ 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] = yystack.l_mark[-1].i; + switch_case_value[n_switch_case_list] = yyvsp[-1].i; switch_case_list[n_switch_case_list++] = tmppush; } else lc_error("Too many cases in a switch."); } break; case 142: -#line 983 "util/lev_comp.y" - { +{ } break; case 143: -#line 986 "util/lev_comp.y" - { +{ struct opvar *tmppush = New(struct opvar); if (switch_default_case) @@ -3454,13 +3239,11 @@ case 143: } break; case 144: -#line 996 "util/lev_comp.y" - { +{ } break; case 145: -#line 1001 "util/lev_comp.y" - { +{ if (!allow_break_statements) lc_error("Cannot use BREAK outside a statement block."); else { @@ -3469,8 +3252,7 @@ case 145: } break; case 148: -#line 1015 "util/lev_comp.y" - { +{ char buf[256], buf2[256]; if (n_forloops >= MAX_NESTED_IFS) { @@ -3479,42 +3261,40 @@ case 148: } /* first, define a variable for the for-loop end value */ - Sprintf(buf, "%s end", yystack.l_mark[-4].map); + Sprintf(buf, "%s end", yyvsp[-4].map); /* the value of which is already in stack (the 2nd math_expr) */ add_opvars(splev, "iso", VA_PASS3(0, buf, SPO_VAR_INIT)); - vardefs = add_vardef_type(vardefs, yystack.l_mark[-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, yystack.l_mark[-4].map, SPO_VAR_INIT)); + add_opvars(splev, "iso", VA_PASS3(0, yyvsp[-4].map, SPO_VAR_INIT)); /* calculate value for the loop "step" variable */ - Sprintf(buf2, "%s step", yystack.l_mark[-4].map); + Sprintf(buf2, "%s step", yyvsp[-4].map); /* end - start */ add_opvars(splev, "vvo", - VA_PASS3(buf, yystack.l_mark[-4].map, SPO_MATH_SUB)); + VA_PASS3(buf, yyvsp[-4].map, 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(yystack.l_mark[-4].map); + forloop_list[n_forloops].varname = strdup(yyvsp[-4].map); forloop_list[n_forloops].jmp_point = splev->n_opcodes; n_forloops++; - Free(yystack.l_mark[-4].map); + Free(yyvsp[-4].map); } break; case 149: -#line 1052 "util/lev_comp.y" - { +{ /* nothing */ break_stmt_start(); } break; case 150: -#line 1057 "util/lev_comp.y" - { +{ int l; char buf[256], buf2[256]; @@ -3542,8 +3322,7 @@ case 150: } break; case 151: -#line 1086 "util/lev_comp.y" - { +{ struct opvar *tmppush = New(struct opvar); if (n_if_list >= MAX_NESTED_IFS) { @@ -3558,8 +3337,7 @@ case 151: } break; case 152: -#line 1100 "util/lev_comp.y" - { +{ struct opvar *tmppush; add_opvars(splev, "oio", VA_PASS3(SPO_COPY, 0, SPO_CMP)); @@ -3574,8 +3352,7 @@ case 152: } break; case 153: -#line 1116 "util/lev_comp.y" - { +{ struct opvar *tmppush2 = New(struct opvar); if (n_if_list >= MAX_NESTED_IFS) { @@ -3591,13 +3368,12 @@ case 153: add_opcode(splev, SPO_PUSH, tmppush2); - add_opcode(splev, reverse_jmp_opcode( yystack.l_mark[-1].i ), NULL); + add_opcode(splev, reverse_jmp_opcode( yyvsp[-1].i ), NULL); } break; case 154: -#line 1136 "util/lev_comp.y" - { +{ if (n_if_list > 0) { struct opvar *tmppush; @@ -3608,8 +3384,7 @@ case 154: } break; case 155: -#line 1148 "util/lev_comp.y" - { +{ struct opvar *tmppush2 = New(struct opvar); if (n_if_list >= MAX_NESTED_IFS) { @@ -3625,19 +3400,17 @@ case 155: add_opcode(splev, SPO_PUSH, tmppush2); - add_opcode(splev, reverse_jmp_opcode( yystack.l_mark[0].i ), NULL); + add_opcode(splev, reverse_jmp_opcode( yyvsp[0].i ), NULL); } break; case 156: -#line 1168 "util/lev_comp.y" - { +{ /* do nothing */ } break; case 157: -#line 1174 "util/lev_comp.y" - { +{ if (n_if_list > 0) { struct opvar *tmppush; @@ -3648,8 +3421,7 @@ case 157: } break; case 158: -#line 1184 "util/lev_comp.y" - { +{ if (n_if_list > 0) { struct opvar *tmppush = New(struct opvar); struct opvar *tmppush2; @@ -3668,8 +3440,7 @@ case 158: } break; case 159: -#line 1202 "util/lev_comp.y" - { +{ if (n_if_list > 0) { struct opvar *tmppush; tmppush = (struct opvar *) if_list[--n_if_list]; @@ -3678,216 +3449,189 @@ case 159: } break; case 160: -#line 1212 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_MESSAGE)); } break; case 161: -#line 1218 "util/lev_comp.y" - { +{ add_opvars(splev, "iiiiiio", VA_PASS7(-1, 0, -1, -1, -1, -1, SPO_CORRIDOR)); } break; case 162: -#line 1223 "util/lev_comp.y" - { +{ add_opvars(splev, "iiiiiio", - VA_PASS7(-1, yystack.l_mark[0].i, -1, -1, -1, -1, SPO_CORRIDOR)); + VA_PASS7(-1, yyvsp[0].i, -1, -1, -1, -1, SPO_CORRIDOR)); } break; case 163: -#line 1228 "util/lev_comp.y" - { +{ add_opvars(splev, "iiiiiio", VA_PASS7(-1, -1, -1, -1, -1, -1, SPO_CORRIDOR)); } break; case 164: -#line 1235 "util/lev_comp.y" - { +{ add_opvars(splev, "iiiiiio", - VA_PASS7(yystack.l_mark[-2].corpos.room, yystack.l_mark[-2].corpos.door, yystack.l_mark[-2].corpos.wall, - yystack.l_mark[0].corpos.room, yystack.l_mark[0].corpos.door, yystack.l_mark[0].corpos.wall, + VA_PASS7(yyvsp[-2].corpos.room, yyvsp[-2].corpos.door, yyvsp[-2].corpos.wall, + yyvsp[0].corpos.room, yyvsp[0].corpos.door, yyvsp[0].corpos.wall, SPO_CORRIDOR)); } break; case 165: -#line 1242 "util/lev_comp.y" - { +{ add_opvars(splev, "iiiiiio", - VA_PASS7(yystack.l_mark[-2].corpos.room, yystack.l_mark[-2].corpos.door, yystack.l_mark[-2].corpos.wall, - -1, -1, (long)yystack.l_mark[0].i, + VA_PASS7(yyvsp[-2].corpos.room, yyvsp[-2].corpos.door, yyvsp[-2].corpos.wall, + -1, -1, (long)yyvsp[0].i, SPO_CORRIDOR)); } break; case 166: -#line 1251 "util/lev_comp.y" - { - yyval.corpos.room = yystack.l_mark[-5].i; - yyval.corpos.wall = yystack.l_mark[-3].i; - yyval.corpos.door = yystack.l_mark[-1].i; +{ + yyval.corpos.room = yyvsp[-5].i; + yyval.corpos.wall = yyvsp[-3].i; + yyval.corpos.door = yyvsp[-1].i; } break; case 167: -#line 1259 "util/lev_comp.y" - { - if ((yystack.l_mark[-2].i < 100) && (yystack.l_mark[-3].i == OROOM)) +{ + if ((yyvsp[-2].i < 100) && (yyvsp[-3].i == OROOM)) lc_error("Only typed rooms can have a chance."); else { add_opvars(splev, "iii", - VA_PASS3((long)yystack.l_mark[-3].i, (long)yystack.l_mark[-2].i, (long)yystack.l_mark[0].i)); + VA_PASS3((long)yyvsp[-3].i, (long)yyvsp[-2].i, (long)yyvsp[0].i)); } } break; case 168: -#line 1270 "util/lev_comp.y" - { - long rflags = yystack.l_mark[0].i; +{ + long rflags = yyvsp[0].i; if (rflags == -1) rflags = (1 << 0); add_opvars(splev, "iiiiiiio", VA_PASS8(rflags, ERR, ERR, - yystack.l_mark[-3].crd.x, yystack.l_mark[-3].crd.y, yystack.l_mark[-1].sze.width, yystack.l_mark[-1].sze.height, + yyvsp[-3].crd.x, yyvsp[-3].crd.y, yyvsp[-1].sze.width, yyvsp[-1].sze.height, SPO_SUBROOM)); break_stmt_start(); } break; case 169: -#line 1281 "util/lev_comp.y" - { +{ break_stmt_end(splev); add_opcode(splev, SPO_ENDROOM, NULL); } break; case 170: -#line 1288 "util/lev_comp.y" - { - long rflags = yystack.l_mark[-2].i; +{ + long rflags = yyvsp[-2].i; if (rflags == -1) rflags = (1 << 0); add_opvars(splev, "iiiiiiio", VA_PASS8(rflags, - yystack.l_mark[-3].crd.x, yystack.l_mark[-3].crd.y, yystack.l_mark[-5].crd.x, yystack.l_mark[-5].crd.y, - yystack.l_mark[-1].sze.width, yystack.l_mark[-1].sze.height, SPO_ROOM)); + yyvsp[-3].crd.x, yyvsp[-3].crd.y, yyvsp[-5].crd.x, yyvsp[-5].crd.y, + yyvsp[-1].sze.width, yyvsp[-1].sze.height, SPO_ROOM)); break_stmt_start(); } break; case 171: -#line 1299 "util/lev_comp.y" - { +{ break_stmt_end(splev); add_opcode(splev, SPO_ENDROOM, NULL); } break; case 172: -#line 1306 "util/lev_comp.y" - { +{ yyval.i = 1; } break; case 173: -#line 1310 "util/lev_comp.y" - { - yyval.i = yystack.l_mark[0].i; +{ + yyval.i = yyvsp[0].i; } break; case 174: -#line 1316 "util/lev_comp.y" - { - if ( yystack.l_mark[-3].i < 1 || yystack.l_mark[-3].i > 5 || - yystack.l_mark[-1].i < 1 || yystack.l_mark[-1].i > 5 ) { - lc_error("Room positions should be between 1-5: (%li,%li)!", yystack.l_mark[-3].i, yystack.l_mark[-1].i); +{ + if ( yyvsp[-3].i < 1 || yyvsp[-3].i > 5 || + yyvsp[-1].i < 1 || yyvsp[-1].i > 5 ) { + lc_error("Room positions should be between 1-5: (%li,%li)!", yyvsp[-3].i, yyvsp[-1].i); } else { - yyval.crd.x = yystack.l_mark[-3].i; - yyval.crd.y = yystack.l_mark[-1].i; + yyval.crd.x = yyvsp[-3].i; + yyval.crd.y = yyvsp[-1].i; } } break; case 175: -#line 1326 "util/lev_comp.y" - { +{ yyval.crd.x = yyval.crd.y = ERR; } break; case 176: -#line 1332 "util/lev_comp.y" - { - if ( yystack.l_mark[-3].i < 0 || yystack.l_mark[-1].i < 0) { - lc_error("Invalid subroom position (%li,%li)!", yystack.l_mark[-3].i, yystack.l_mark[-1].i); +{ + if ( yyvsp[-3].i < 0 || yyvsp[-1].i < 0) { + lc_error("Invalid subroom position (%li,%li)!", yyvsp[-3].i, yyvsp[-1].i); } else { - yyval.crd.x = yystack.l_mark[-3].i; - yyval.crd.y = yystack.l_mark[-1].i; + yyval.crd.x = yyvsp[-3].i; + yyval.crd.y = yyvsp[-1].i; } } break; case 177: -#line 1341 "util/lev_comp.y" - { +{ yyval.crd.x = yyval.crd.y = ERR; } break; case 178: -#line 1347 "util/lev_comp.y" - { - yyval.crd.x = yystack.l_mark[-3].i; - yyval.crd.y = yystack.l_mark[-1].i; +{ + yyval.crd.x = yyvsp[-3].i; + yyval.crd.y = yyvsp[-1].i; } break; case 179: -#line 1352 "util/lev_comp.y" - { +{ yyval.crd.x = yyval.crd.y = ERR; } break; case 180: -#line 1358 "util/lev_comp.y" - { - yyval.sze.width = yystack.l_mark[-3].i; - yyval.sze.height = yystack.l_mark[-1].i; +{ + yyval.sze.width = yyvsp[-3].i; + yyval.sze.height = yyvsp[-1].i; } break; case 181: -#line 1363 "util/lev_comp.y" - { +{ yyval.sze.height = yyval.sze.width = ERR; } break; case 182: -#line 1369 "util/lev_comp.y" - { +{ /* ERR means random here */ - if (yystack.l_mark[-2].i == ERR && yystack.l_mark[0].i != ERR) { + if (yyvsp[-2].i == ERR && yyvsp[0].i != ERR) { lc_error("If the door wall is random, so must be its pos!"); } else { add_opvars(splev, "iiiio", - VA_PASS5((long)yystack.l_mark[0].i, (long)yystack.l_mark[-4].i, (long)yystack.l_mark[-6].i, - (long)yystack.l_mark[-2].i, SPO_ROOM_DOOR)); + VA_PASS5((long)yyvsp[0].i, (long)yyvsp[-4].i, (long)yyvsp[-6].i, + (long)yyvsp[-2].i, SPO_ROOM_DOOR)); } } break; case 183: -#line 1380 "util/lev_comp.y" - { - add_opvars(splev, "io", VA_PASS2((long)yystack.l_mark[-2].i, SPO_DOOR)); +{ + add_opvars(splev, "io", VA_PASS2((long)yyvsp[-2].i, SPO_DOOR)); } break; case 188: -#line 1394 "util/lev_comp.y" - { - yyval.i = yystack.l_mark[0].i; +{ + yyval.i = yyvsp[0].i; } break; case 189: -#line 1398 "util/lev_comp.y" - { - yyval.i = (yystack.l_mark[-2].i | yystack.l_mark[0].i); +{ + yyval.i = (yyvsp[-2].i | yyvsp[0].i); } break; case 192: -#line 1408 "util/lev_comp.y" - { +{ add_opvars(splev, "ciisiio", VA_PASS7(0, 0, 1, (char *) 0, 0, 0, SPO_MAP)); max_x_map = COLNO-1; @@ -3895,54 +3639,47 @@ case 192: } break; case 193: -#line 1415 "util/lev_comp.y" - { +{ add_opvars(splev, "cii", - VA_PASS3(SP_COORD_PACK((yystack.l_mark[-4].i), (yystack.l_mark[-2].i)), - 1, (int) yystack.l_mark[-1].i)); - scan_map(yystack.l_mark[0].map, splev); - Free(yystack.l_mark[0].map); + 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: -#line 1423 "util/lev_comp.y" - { - add_opvars(splev, "ii", VA_PASS2(2, (int) yystack.l_mark[-1].i)); - scan_map(yystack.l_mark[0].map, splev); - Free(yystack.l_mark[0].map); +{ + add_opvars(splev, "ii", VA_PASS2(2, (int) yyvsp[-1].i)); + scan_map(yyvsp[0].map, splev); + Free(yyvsp[0].map); } break; case 199: -#line 1439 "util/lev_comp.y" - { +{ add_opvars(splev, "io", VA_PASS2(0, SPO_MONSTER)); } break; case 200: -#line 1443 "util/lev_comp.y" - { +{ add_opvars(splev, "io", VA_PASS2(1, SPO_MONSTER)); in_container_obj++; break_stmt_start(); } break; case 201: -#line 1449 "util/lev_comp.y" - { +{ break_stmt_end(splev); in_container_obj--; add_opvars(splev, "o", VA_PASS1(SPO_END_MONINVENT)); } break; case 202: -#line 1457 "util/lev_comp.y" - { +{ /* nothing */ } break; case 203: -#line 1463 "util/lev_comp.y" - { +{ struct opvar *stopit = New(struct opvar); set_opvar_int(stopit, SP_M_V_END); @@ -3951,163 +3688,142 @@ case 203: } break; case 204: -#line 1471 "util/lev_comp.y" - { - if (( yystack.l_mark[-2].i & yystack.l_mark[0].i )) +{ + if (( yyvsp[-2].i & yyvsp[0].i )) lc_error("MONSTER extra info defined twice."); - yyval.i = ( yystack.l_mark[-2].i | yystack.l_mark[0].i ); + yyval.i = ( yyvsp[-2].i | yyvsp[0].i ); } break; case 205: -#line 1479 "util/lev_comp.y" - { +{ add_opvars(splev, "i", VA_PASS1(SP_M_V_NAME)); yyval.i = 0x0001; } break; case 206: -#line 1484 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", - VA_PASS2((int) yystack.l_mark[0].i, SP_M_V_PEACEFUL)); + VA_PASS2((int) yyvsp[0].i, SP_M_V_PEACEFUL)); yyval.i = 0x0002; } break; case 207: -#line 1490 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", - VA_PASS2((int) yystack.l_mark[0].i, SP_M_V_ASLEEP)); + VA_PASS2((int) yyvsp[0].i, SP_M_V_ASLEEP)); yyval.i = 0x0004; } break; case 208: -#line 1496 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", - VA_PASS2((int) yystack.l_mark[0].i, SP_M_V_ALIGN)); + VA_PASS2((int) yyvsp[0].i, SP_M_V_ALIGN)); yyval.i = 0x0008; } break; case 209: -#line 1502 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", - VA_PASS2((int) yystack.l_mark[-1].i, SP_M_V_APPEAR)); + VA_PASS2((int) yyvsp[-1].i, SP_M_V_APPEAR)); yyval.i = 0x0010; } break; case 210: -#line 1508 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_FEMALE)); yyval.i = 0x0020; } break; case 211: -#line 1513 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_INVIS)); yyval.i = 0x0040; } break; case 212: -#line 1518 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_CANCELLED)); yyval.i = 0x0080; } break; case 213: -#line 1523 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_REVIVED)); yyval.i = 0x0100; } break; case 214: -#line 1528 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_AVENGE)); yyval.i = 0x0200; } break; case 215: -#line 1533 "util/lev_comp.y" - { +{ add_opvars(splev, "i", VA_PASS1(SP_M_V_FLEEING)); yyval.i = 0x0400; } break; case 216: -#line 1538 "util/lev_comp.y" - { +{ add_opvars(splev, "i", VA_PASS1(SP_M_V_BLINDED)); yyval.i = 0x0800; } break; case 217: -#line 1543 "util/lev_comp.y" - { +{ add_opvars(splev, "i", VA_PASS1(SP_M_V_PARALYZED)); yyval.i = 0x1000; } break; case 218: -#line 1548 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_STUNNED)); yyval.i = 0x2000; } break; case 219: -#line 1553 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", VA_PASS2(1, SP_M_V_CONFUSED)); yyval.i = 0x4000; } break; case 220: -#line 1558 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", - VA_PASS2((int) yystack.l_mark[0].i, SP_M_V_SEENTRAPS)); + VA_PASS2((int) yyvsp[0].i, SP_M_V_SEENTRAPS)); yyval.i = 0x8000; } break; case 221: -#line 1566 "util/lev_comp.y" - { - int token = get_trap_type(yystack.l_mark[0].map); +{ + int token = get_trap_type(yyvsp[0].map); if (token == ERR || token == 0) - lc_error("Unknown trap type '%s'!", yystack.l_mark[0].map); - Free(yystack.l_mark[0].map); + lc_error("Unknown trap type '%s'!", yyvsp[0].map); + Free(yyvsp[0].map); yyval.i = (1L << (token - 1)); } break; case 222: -#line 1575 "util/lev_comp.y" - { +{ yyval.i = (long) ~0; } break; case 223: -#line 1579 "util/lev_comp.y" - { - int token = get_trap_type(yystack.l_mark[-2].map); +{ + int token = get_trap_type(yyvsp[-2].map); if (token == ERR || token == 0) - lc_error("Unknown trap type '%s'!", yystack.l_mark[-2].map); + lc_error("Unknown trap type '%s'!", yyvsp[-2].map); - if ((1L << (token - 1)) & yystack.l_mark[0].i) - lc_error("Monster seen_traps, trap '%s' listed twice.", yystack.l_mark[-2].map); - Free(yystack.l_mark[-2].map); - yyval.i = ((1L << (token - 1)) | yystack.l_mark[0].i); + if ((1L << (token - 1)) & yyvsp[0].i) + lc_error("Monster seen_traps, trap '%s' listed twice.", yyvsp[-2].map); + Free(yyvsp[-2].map); + yyval.i = ((1L << (token - 1)) | yyvsp[0].i); } break; case 224: -#line 1592 "util/lev_comp.y" - { +{ int cnt = 0; if (in_container_obj) @@ -4116,8 +3832,7 @@ case 224: } break; case 225: -#line 1600 "util/lev_comp.y" - { +{ int cnt = SP_OBJ_CONTAINER; if (in_container_obj) @@ -4128,25 +3843,22 @@ case 225: } break; case 226: -#line 1610 "util/lev_comp.y" - { +{ break_stmt_end(splev); in_container_obj--; add_opcode(splev, SPO_POP_CONTAINER, NULL); } break; case 227: -#line 1618 "util/lev_comp.y" - { - if (( yystack.l_mark[0].i & 0x4000) && in_container_obj) +{ + if (( yyvsp[0].i & 0x4000) && in_container_obj) lc_error("Object cannot have a coord when contained."); - else if (!( yystack.l_mark[0].i & 0x4000) && !in_container_obj) + else if (!( yyvsp[0].i & 0x4000) && !in_container_obj) lc_error("Object needs a coord when not contained."); } break; case 228: -#line 1627 "util/lev_comp.y" - { +{ struct opvar *stopit = New(struct opvar); set_opvar_int(stopit, SP_O_V_END); add_opcode(splev, SPO_PUSH, stopit); @@ -4154,84 +3866,73 @@ case 228: } break; case 229: -#line 1634 "util/lev_comp.y" - { - if (( yystack.l_mark[-2].i & yystack.l_mark[0].i )) +{ + if (( yyvsp[-2].i & yyvsp[0].i )) lc_error("OBJECT extra info '%s' defined twice.", curr_token); - yyval.i = ( yystack.l_mark[-2].i | yystack.l_mark[0].i ); + yyval.i = ( yyvsp[-2].i | yyvsp[0].i ); } break; case 230: -#line 1642 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", - VA_PASS2((int) yystack.l_mark[0].i, SP_O_V_CURSE)); + VA_PASS2((int) yyvsp[0].i, SP_O_V_CURSE)); yyval.i = 0x0001; } break; case 231: -#line 1648 "util/lev_comp.y" - { +{ add_opvars(splev, "i", VA_PASS1(SP_O_V_CORPSENM)); yyval.i = 0x0002; } break; case 232: -#line 1653 "util/lev_comp.y" - { +{ add_opvars(splev, "i", VA_PASS1(SP_O_V_SPE)); yyval.i = 0x0004; } break; case 233: -#line 1658 "util/lev_comp.y" - { +{ add_opvars(splev, "i", VA_PASS1(SP_O_V_NAME)); yyval.i = 0x0008; } break; case 234: -#line 1663 "util/lev_comp.y" - { +{ add_opvars(splev, "i", VA_PASS1(SP_O_V_QUAN)); yyval.i = 0x0010; } break; case 235: -#line 1668 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_BURIED)); yyval.i = 0x0020; } break; case 236: -#line 1673 "util/lev_comp.y" - { - add_opvars(splev, "ii", VA_PASS2((int) yystack.l_mark[0].i, SP_O_V_LIT)); +{ + add_opvars(splev, "ii", VA_PASS2((int) yyvsp[0].i, SP_O_V_LIT)); yyval.i = 0x0040; } break; case 237: -#line 1678 "util/lev_comp.y" - { +{ add_opvars(splev, "i", VA_PASS1(SP_O_V_ERODED)); yyval.i = 0x0080; } break; case 238: -#line 1683 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", VA_PASS2(-1, SP_O_V_ERODED)); yyval.i = 0x0080; } break; case 239: -#line 1688 "util/lev_comp.y" - { - if (yystack.l_mark[0].i == D_LOCKED) { +{ + if (yyvsp[0].i == D_LOCKED) { add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_LOCKED)); yyval.i = 0x0100; - } else if (yystack.l_mark[0].i == D_BROKEN) { + } else if (yyvsp[0].i == D_BROKEN) { add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_BROKEN)); yyval.i = 0x0200; } else @@ -4239,54 +3940,47 @@ case 239: } break; case 240: -#line 1699 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", - VA_PASS2((int) yystack.l_mark[0].i, SP_O_V_TRAPPED)); + VA_PASS2((int) yyvsp[0].i, SP_O_V_TRAPPED)); yyval.i = 0x0400; } break; case 241: -#line 1705 "util/lev_comp.y" - { +{ add_opvars(splev, "i", VA_PASS1(SP_O_V_RECHARGED)); yyval.i = 0x0800; } break; case 242: -#line 1710 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_INVIS)); yyval.i = 0x1000; } break; case 243: -#line 1715 "util/lev_comp.y" - { +{ add_opvars(splev, "ii", VA_PASS2(1, SP_O_V_GREASED)); yyval.i = 0x2000; } break; case 244: -#line 1720 "util/lev_comp.y" - { +{ add_opvars(splev, "i", VA_PASS1(SP_O_V_COORD)); yyval.i = 0x4000; } break; case 245: -#line 1727 "util/lev_comp.y" - { - add_opvars(splev, "io", VA_PASS2((int) yystack.l_mark[-2].i, SPO_TRAP)); +{ + add_opvars(splev, "io", VA_PASS2((int) yyvsp[-2].i, SPO_TRAP)); } break; case 246: -#line 1733 "util/lev_comp.y" - { +{ long dir, state = 0; /* convert dir from a DIRECTION to a DB_DIR */ - dir = yystack.l_mark[-2].i; + dir = yyvsp[-2].i; switch (dir) { case W_NORTH: dir = DB_NORTH; break; case W_SOUTH: dir = DB_SOUTH; break; @@ -4297,11 +3991,11 @@ case 246: break; } - if ( yystack.l_mark[0].i == D_ISOPEN ) + if ( yyvsp[0].i == D_ISOPEN ) state = 1; - else if ( yystack.l_mark[0].i == D_CLOSED ) + else if ( yyvsp[0].i == D_CLOSED ) state = 0; - else if ( yystack.l_mark[0].i == -1 ) + else if ( yyvsp[0].i == -1 ) state = -1; else lc_error("A drawbridge can only be open, closed or random!"); @@ -4310,759 +4004,662 @@ case 246: } break; case 247: -#line 1762 "util/lev_comp.y" - { +{ add_opvars(splev, "iiio", - VA_PASS4((int) yystack.l_mark[0].i, 1, 0, SPO_MAZEWALK)); + VA_PASS4((int) yyvsp[0].i, 1, 0, SPO_MAZEWALK)); } break; case 248: -#line 1767 "util/lev_comp.y" - { +{ add_opvars(splev, "iiio", - VA_PASS4((int) yystack.l_mark[-3].i, (int) yystack.l_mark[-1].i, - (int) yystack.l_mark[0].i, SPO_MAZEWALK)); + VA_PASS4((int) yyvsp[-3].i, (int) yyvsp[-1].i, + (int) yyvsp[0].i, SPO_MAZEWALK)); } break; case 249: -#line 1775 "util/lev_comp.y" - { +{ add_opvars(splev, "rio", VA_PASS3(SP_REGION_PACK(-1,-1,-1,-1), 0, SPO_WALLIFY)); } break; case 250: -#line 1781 "util/lev_comp.y" - { +{ add_opvars(splev, "io", VA_PASS2(1, SPO_WALLIFY)); } break; case 251: -#line 1787 "util/lev_comp.y" - { +{ add_opvars(splev, "io", - VA_PASS2((int) yystack.l_mark[0].i, SPO_LADDER)); + VA_PASS2((int) yyvsp[0].i, SPO_LADDER)); } break; case 252: -#line 1794 "util/lev_comp.y" - { +{ add_opvars(splev, "io", - VA_PASS2((int) yystack.l_mark[0].i, SPO_STAIR)); + VA_PASS2((int) yyvsp[0].i, SPO_STAIR)); } break; case 253: -#line 1801 "util/lev_comp.y" - { +{ add_opvars(splev, "iiiii iiiii iiso", - VA_PASS14(yystack.l_mark[-4].lregn.x1, yystack.l_mark[-4].lregn.y1, yystack.l_mark[-4].lregn.x2, yystack.l_mark[-4].lregn.y2, yystack.l_mark[-4].lregn.area, - yystack.l_mark[-2].lregn.x1, yystack.l_mark[-2].lregn.y1, yystack.l_mark[-2].lregn.x2, yystack.l_mark[-2].lregn.y2, yystack.l_mark[-2].lregn.area, - (long) ((yystack.l_mark[0].i) ? LR_UPSTAIR : LR_DOWNSTAIR), + VA_PASS14(yyvsp[-4].lregn.x1, yyvsp[-4].lregn.y1, yyvsp[-4].lregn.x2, yyvsp[-4].lregn.y2, yyvsp[-4].lregn.area, + yyvsp[-2].lregn.x1, yyvsp[-2].lregn.y1, yyvsp[-2].lregn.x2, yyvsp[-2].lregn.y2, yyvsp[-2].lregn.area, + (long) ((yyvsp[0].i) ? LR_UPSTAIR : LR_DOWNSTAIR), 0, (char *) 0, SPO_LEVREGION)); } break; case 254: -#line 1811 "util/lev_comp.y" - { +{ add_opvars(splev, "iiiii iiiii iiso", - VA_PASS14(yystack.l_mark[-4].lregn.x1, yystack.l_mark[-4].lregn.y1, yystack.l_mark[-4].lregn.x2, yystack.l_mark[-4].lregn.y2, yystack.l_mark[-4].lregn.area, - yystack.l_mark[-2].lregn.x1, yystack.l_mark[-2].lregn.y1, yystack.l_mark[-2].lregn.x2, yystack.l_mark[-2].lregn.y2, yystack.l_mark[-2].lregn.area, - LR_PORTAL, 0, yystack.l_mark[0].map, SPO_LEVREGION)); - Free(yystack.l_mark[0].map); + VA_PASS14(yyvsp[-4].lregn.x1, yyvsp[-4].lregn.y1, yyvsp[-4].lregn.x2, yyvsp[-4].lregn.y2, yyvsp[-4].lregn.area, + yyvsp[-2].lregn.x1, yyvsp[-2].lregn.y1, yyvsp[-2].lregn.x2, yyvsp[-2].lregn.y2, yyvsp[-2].lregn.area, + LR_PORTAL, 0, yyvsp[0].map, SPO_LEVREGION)); + Free(yyvsp[0].map); } break; case 255: -#line 1821 "util/lev_comp.y" - { +{ long rtyp = 0; - switch(yystack.l_mark[0].i) { + switch(yyvsp[0].i) { case -1: rtyp = LR_TELE; break; case 0: rtyp = LR_DOWNTELE; break; case 1: rtyp = LR_UPTELE; break; } add_opvars(splev, "iiiii iiiii iiso", - VA_PASS14(yystack.l_mark[-3].lregn.x1, yystack.l_mark[-3].lregn.y1, yystack.l_mark[-3].lregn.x2, yystack.l_mark[-3].lregn.y2, yystack.l_mark[-3].lregn.area, - yystack.l_mark[-1].lregn.x1, yystack.l_mark[-1].lregn.y1, yystack.l_mark[-1].lregn.x2, yystack.l_mark[-1].lregn.y2, yystack.l_mark[-1].lregn.area, + VA_PASS14(yyvsp[-3].lregn.x1, yyvsp[-3].lregn.y1, yyvsp[-3].lregn.x2, yyvsp[-3].lregn.y2, yyvsp[-3].lregn.area, + yyvsp[-1].lregn.x1, yyvsp[-1].lregn.y1, yyvsp[-1].lregn.x2, yyvsp[-1].lregn.y2, yyvsp[-1].lregn.area, rtyp, 0, (char *)0, SPO_LEVREGION)); } break; case 256: -#line 1836 "util/lev_comp.y" - { +{ add_opvars(splev, "iiiii iiiii iiso", - VA_PASS14(yystack.l_mark[-2].lregn.x1, yystack.l_mark[-2].lregn.y1, yystack.l_mark[-2].lregn.x2, yystack.l_mark[-2].lregn.y2, yystack.l_mark[-2].lregn.area, - yystack.l_mark[0].lregn.x1, yystack.l_mark[0].lregn.y1, yystack.l_mark[0].lregn.x2, yystack.l_mark[0].lregn.y2, yystack.l_mark[0].lregn.area, + VA_PASS14(yyvsp[-2].lregn.x1, yyvsp[-2].lregn.y1, yyvsp[-2].lregn.x2, yyvsp[-2].lregn.y2, yyvsp[-2].lregn.area, + yyvsp[0].lregn.x1, yyvsp[0].lregn.y1, yyvsp[0].lregn.x2, yyvsp[0].lregn.y2, yyvsp[0].lregn.area, (long) LR_BRANCH, 0, (char *) 0, SPO_LEVREGION)); } break; case 257: -#line 1846 "util/lev_comp.y" - { +{ yyval.i = -1; } break; case 258: -#line 1850 "util/lev_comp.y" - { - yyval.i = yystack.l_mark[0].i; +{ + yyval.i = yyvsp[0].i; } break; case 259: -#line 1856 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_FOUNTAIN)); } break; case 260: -#line 1862 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_SINK)); } break; case 261: -#line 1868 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_POOL)); } break; case 262: -#line 1874 "util/lev_comp.y" - { +{ yyval.terr.lit = -2; - yyval.terr.ter = what_map_char((char) yystack.l_mark[0].i); + yyval.terr.ter = what_map_char((char) yyvsp[0].i); } break; case 263: -#line 1879 "util/lev_comp.y" - { - yyval.terr.lit = yystack.l_mark[-1].i; - yyval.terr.ter = what_map_char((char) yystack.l_mark[-3].i); +{ + yyval.terr.lit = yyvsp[-1].i; + yyval.terr.ter = what_map_char((char) yyvsp[-3].i); } break; case 264: -#line 1886 "util/lev_comp.y" - { +{ add_opvars(splev, "io", - VA_PASS2(yystack.l_mark[0].i, SPO_REPLACETERRAIN)); + VA_PASS2(yyvsp[0].i, SPO_REPLACETERRAIN)); } break; case 265: -#line 1893 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_TERRAIN)); } break; case 266: -#line 1899 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_NON_DIGGABLE)); } break; case 267: -#line 1905 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_NON_PASSWALL)); } break; case 268: -#line 1911 "util/lev_comp.y" - { +{ long irr; - long rt = yystack.l_mark[-1].i; - long rflags = yystack.l_mark[0].i; + long rt = yyvsp[-1].i; + long rflags = yyvsp[0].i; if (rflags == -1) rflags = (1 << 0); if (!(rflags & 1)) rt += MAXRTYPE+1; irr = ((rflags & 2) != 0); add_opvars(splev, "iiio", - VA_PASS4((long)yystack.l_mark[-3].i, rt, rflags, SPO_REGION)); + VA_PASS4((long)yyvsp[-3].i, rt, rflags, SPO_REGION)); yyval.i = (irr || (rflags & 1) || rt != OROOM); break_stmt_start(); } break; case 269: -#line 1925 "util/lev_comp.y" - { +{ break_stmt_end(splev); - if ( yystack.l_mark[-1].i ) { + if ( yyvsp[-1].i ) { add_opcode(splev, SPO_ENDROOM, NULL); - } else if ( yystack.l_mark[0].i ) + } else if ( yyvsp[0].i ) lc_error("Cannot use lev statements in non-permanent REGION"); } break; case 270: -#line 1935 "util/lev_comp.y" - { +{ yyval.i = 0; } break; case 271: -#line 1939 "util/lev_comp.y" - { - yyval.i = yystack.l_mark[0].i; +{ + yyval.i = yyvsp[0].i; } break; case 272: -#line 1945 "util/lev_comp.y" - { +{ add_opvars(splev, "iio", - VA_PASS3((long)yystack.l_mark[0].i, (long)yystack.l_mark[-2].i, SPO_ALTAR)); + VA_PASS3((long)yyvsp[0].i, (long)yyvsp[-2].i, SPO_ALTAR)); } break; case 273: -#line 1952 "util/lev_comp.y" - { +{ add_opvars(splev, "io", VA_PASS2(2, SPO_GRAVE)); } break; case 274: -#line 1956 "util/lev_comp.y" - { +{ add_opvars(splev, "sio", VA_PASS3((char *)0, 1, SPO_GRAVE)); } break; case 275: -#line 1961 "util/lev_comp.y" - { +{ add_opvars(splev, "sio", VA_PASS3((char *)0, 0, SPO_GRAVE)); } break; case 276: -#line 1968 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_GOLD)); } break; case 277: -#line 1974 "util/lev_comp.y" - { +{ add_opvars(splev, "io", - VA_PASS2((long)yystack.l_mark[-2].i, SPO_ENGRAVING)); + VA_PASS2((long)yyvsp[-2].i, SPO_ENGRAVING)); } break; case 278: -#line 1981 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_MINERALIZE)); } break; case 279: -#line 1985 "util/lev_comp.y" - { +{ add_opvars(splev, "iiiio", VA_PASS5(-1L, -1L, -1L, -1L, SPO_MINERALIZE)); } break; case 280: -#line 1992 "util/lev_comp.y" - { - int token = get_trap_type(yystack.l_mark[0].map); +{ + int token = get_trap_type(yyvsp[0].map); if (token == ERR) - lc_error("Unknown trap type '%s'!", yystack.l_mark[0].map); + lc_error("Unknown trap type '%s'!", yyvsp[0].map); yyval.i = token; - Free(yystack.l_mark[0].map); + Free(yyvsp[0].map); } break; case 282: -#line 2003 "util/lev_comp.y" - { - int token = get_room_type(yystack.l_mark[0].map); +{ + int token = get_room_type(yyvsp[0].map); if (token == ERR) { - lc_warning("Unknown room type \"%s\"! Making ordinary room...", yystack.l_mark[0].map); + lc_warning("Unknown room type \"%s\"! Making ordinary room...", yyvsp[0].map); yyval.i = OROOM; } else yyval.i = token; - Free(yystack.l_mark[0].map); + Free(yyvsp[0].map); } break; case 284: -#line 2016 "util/lev_comp.y" - { +{ yyval.i = -1; } break; case 285: -#line 2020 "util/lev_comp.y" - { - yyval.i = yystack.l_mark[0].i; +{ + yyval.i = yyvsp[0].i; } break; case 286: -#line 2026 "util/lev_comp.y" - { - yyval.i = yystack.l_mark[0].i; +{ + yyval.i = yyvsp[0].i; } break; case 287: -#line 2030 "util/lev_comp.y" - { - yyval.i = yystack.l_mark[-2].i | yystack.l_mark[0].i; +{ + yyval.i = yyvsp[-2].i | yyvsp[0].i; } break; case 288: -#line 2037 "util/lev_comp.y" - { - yyval.i = (yystack.l_mark[0].i << 0); +{ + yyval.i = (yyvsp[0].i << 0); } break; case 289: -#line 2041 "util/lev_comp.y" - { - yyval.i = (yystack.l_mark[0].i << 1); +{ + yyval.i = (yyvsp[0].i << 1); } break; case 290: -#line 2045 "util/lev_comp.y" - { - yyval.i = (yystack.l_mark[0].i << 2); +{ + yyval.i = (yyvsp[0].i << 2); } break; case 297: -#line 2061 "util/lev_comp.y" - { +{ yyval.i = - MAX_REGISTERS - 1; } break; case 300: -#line 2069 "util/lev_comp.y" - { +{ yyval.i = - MAX_REGISTERS - 1; } break; case 303: -#line 2079 "util/lev_comp.y" - { - if ( yystack.l_mark[-1].i >= 3 ) +{ + if ( yyvsp[-1].i >= 3 ) lc_error("Register Index overflow!"); else - yyval.i = - yystack.l_mark[-1].i - 1; + yyval.i = - yyvsp[-1].i - 1; } break; case 304: -#line 2088 "util/lev_comp.y" - { - add_opvars(splev, "s", VA_PASS1(yystack.l_mark[0].map)); - Free(yystack.l_mark[0].map); +{ + add_opvars(splev, "s", VA_PASS1(yyvsp[0].map)); + Free(yyvsp[0].map); } break; case 305: -#line 2093 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[0].map, SPOVAR_STRING); - vardef_used(vardefs, yystack.l_mark[0].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[0].map)); - Free(yystack.l_mark[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: -#line 2100 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[-3].map, +{ + check_vardef_type(vardefs, yyvsp[-3].map, SPOVAR_STRING | SPOVAR_ARRAY); - vardef_used(vardefs, yystack.l_mark[-3].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[-3].map)); - Free(yystack.l_mark[-3].map); + vardef_used(vardefs, yyvsp[-3].map); + add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); + Free(yyvsp[-3].map); } break; case 307: -#line 2111 "util/lev_comp.y" - { +{ /* nothing */ } break; case 308: -#line 2117 "util/lev_comp.y" - { - add_opvars(splev, "c", VA_PASS1(yystack.l_mark[0].i)); +{ + add_opvars(splev, "c", VA_PASS1(yyvsp[0].i)); } break; case 309: -#line 2121 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_SEL_RNDCOORD)); } break; case 310: -#line 2125 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[0].map, SPOVAR_COORD); - vardef_used(vardefs, yystack.l_mark[0].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[0].map)); - Free(yystack.l_mark[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: -#line 2132 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[-3].map, +{ + check_vardef_type(vardefs, yyvsp[-3].map, SPOVAR_COORD | SPOVAR_ARRAY); - vardef_used(vardefs, yystack.l_mark[-3].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[-3].map)); - Free(yystack.l_mark[-3].map); + vardef_used(vardefs, yyvsp[-3].map); + add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); + Free(yyvsp[-3].map); } break; case 312: -#line 2142 "util/lev_comp.y" - { - if (yystack.l_mark[-3].i < 0 || yystack.l_mark[-1].i < 0 || yystack.l_mark[-3].i >= COLNO || yystack.l_mark[-1].i >= ROWNO) +{ + if (yyvsp[-3].i < 0 || yyvsp[-1].i < 0 || yyvsp[-3].i >= COLNO || yyvsp[-1].i >= ROWNO) lc_error("Coordinates (%li,%li) out of map range!", - yystack.l_mark[-3].i, yystack.l_mark[-1].i); - yyval.i = SP_COORD_PACK(yystack.l_mark[-3].i, yystack.l_mark[-1].i); + yyvsp[-3].i, yyvsp[-1].i); + yyval.i = SP_COORD_PACK(yyvsp[-3].i, yyvsp[-1].i); } break; case 313: -#line 2149 "util/lev_comp.y" - { +{ yyval.i = SP_COORD_PACK_RANDOM(0); } break; case 314: -#line 2153 "util/lev_comp.y" - { - yyval.i = SP_COORD_PACK_RANDOM(yystack.l_mark[-1].i); +{ + yyval.i = SP_COORD_PACK_RANDOM(yyvsp[-1].i); } break; case 315: -#line 2159 "util/lev_comp.y" - { - yyval.i = yystack.l_mark[0].i; +{ + yyval.i = yyvsp[0].i; } break; case 316: -#line 2163 "util/lev_comp.y" - { - if ((yystack.l_mark[-2].i & yystack.l_mark[0].i)) +{ + if ((yyvsp[-2].i & yyvsp[0].i)) lc_warning("Humidity flag used twice."); - yyval.i = (yystack.l_mark[-2].i | yystack.l_mark[0].i); + yyval.i = (yyvsp[-2].i | yyvsp[0].i); } break; case 317: -#line 2171 "util/lev_comp.y" - { +{ /* nothing */ } break; case 318: -#line 2175 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[0].map, SPOVAR_REGION); - vardef_used(vardefs, yystack.l_mark[0].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[0].map)); - Free(yystack.l_mark[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: -#line 2182 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[-3].map, +{ + check_vardef_type(vardefs, yyvsp[-3].map, SPOVAR_REGION | SPOVAR_ARRAY); - vardef_used(vardefs, yystack.l_mark[-3].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[-3].map)); - Free(yystack.l_mark[-3].map); + vardef_used(vardefs, yyvsp[-3].map); + add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); + Free(yyvsp[-3].map); } break; case 320: -#line 2192 "util/lev_comp.y" - { - long r = SP_REGION_PACK(yystack.l_mark[-7].i, yystack.l_mark[-5].i, yystack.l_mark[-3].i, yystack.l_mark[-1].i); +{ + long r = SP_REGION_PACK(yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); - if (yystack.l_mark[-7].i > yystack.l_mark[-3].i || yystack.l_mark[-5].i > yystack.l_mark[-1].i) + if (yyvsp[-7].i > yyvsp[-3].i || yyvsp[-5].i > yyvsp[-1].i) lc_error("Region start > end: (%ld,%ld,%ld,%ld)!", - yystack.l_mark[-7].i, yystack.l_mark[-5].i, yystack.l_mark[-3].i, yystack.l_mark[-1].i); + yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); add_opvars(splev, "r", VA_PASS1(r)); yyval.i = r; } break; case 321: -#line 2205 "util/lev_comp.y" - { - add_opvars(splev, "m", VA_PASS1(yystack.l_mark[0].i)); +{ + add_opvars(splev, "m", VA_PASS1(yyvsp[0].i)); } break; case 322: -#line 2209 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[0].map, SPOVAR_MAPCHAR); - vardef_used(vardefs, yystack.l_mark[0].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[0].map)); - Free(yystack.l_mark[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: -#line 2216 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[-3].map, +{ + check_vardef_type(vardefs, yyvsp[-3].map, SPOVAR_MAPCHAR | SPOVAR_ARRAY); - vardef_used(vardefs, yystack.l_mark[-3].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[-3].map)); - Free(yystack.l_mark[-3].map); + vardef_used(vardefs, yyvsp[-3].map); + add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); + Free(yyvsp[-3].map); } break; case 324: -#line 2226 "util/lev_comp.y" - { - if (what_map_char((char) yystack.l_mark[0].i) != INVALID_TYPE) - yyval.i = SP_MAPCHAR_PACK(what_map_char((char) yystack.l_mark[0].i), -2); +{ + if (what_map_char((char) yyvsp[0].i) != INVALID_TYPE) + yyval.i = SP_MAPCHAR_PACK(what_map_char((char) yyvsp[0].i), -2); else { - lc_error("Unknown map char type '%c'!", yystack.l_mark[0].i); + lc_error("Unknown map char type '%c'!", yyvsp[0].i); yyval.i = SP_MAPCHAR_PACK(STONE, -2); } } break; case 325: -#line 2235 "util/lev_comp.y" - { - if (what_map_char((char) yystack.l_mark[-3].i) != INVALID_TYPE) - yyval.i = SP_MAPCHAR_PACK(what_map_char((char) yystack.l_mark[-3].i), yystack.l_mark[-1].i); +{ + if (what_map_char((char) yyvsp[-3].i) != INVALID_TYPE) + yyval.i = SP_MAPCHAR_PACK(what_map_char((char) yyvsp[-3].i), yyvsp[-1].i); else { - lc_error("Unknown map char type '%c'!", yystack.l_mark[-3].i); - yyval.i = SP_MAPCHAR_PACK(STONE, yystack.l_mark[-1].i); + lc_error("Unknown map char type '%c'!", yyvsp[-3].i); + yyval.i = SP_MAPCHAR_PACK(STONE, yyvsp[-1].i); } } break; case 326: -#line 2246 "util/lev_comp.y" - { - add_opvars(splev, "M", VA_PASS1(yystack.l_mark[0].i)); +{ + add_opvars(splev, "M", VA_PASS1(yyvsp[0].i)); } break; case 327: -#line 2250 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[0].map, SPOVAR_MONST); - vardef_used(vardefs, yystack.l_mark[0].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[0].map)); - Free(yystack.l_mark[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: -#line 2257 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[-3].map, +{ + check_vardef_type(vardefs, yyvsp[-3].map, SPOVAR_MONST | SPOVAR_ARRAY); - vardef_used(vardefs, yystack.l_mark[-3].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[-3].map)); - Free(yystack.l_mark[-3].map); + vardef_used(vardefs, yyvsp[-3].map); + add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); + Free(yyvsp[-3].map); } break; case 329: -#line 2267 "util/lev_comp.y" - { - long m = get_monster_id(yystack.l_mark[0].map, (char)0); +{ + long m = get_monster_id(yyvsp[0].map, (char)0); if (m == ERR) { - lc_error("Unknown monster \"%s\"!", yystack.l_mark[0].map); + lc_error("Unknown monster \"%s\"!", yyvsp[0].map); yyval.i = -1; } else yyval.i = SP_MONST_PACK(m, def_monsyms[(int) mons[m].mlet].sym); - Free(yystack.l_mark[0].map); + Free(yyvsp[0].map); } break; case 330: -#line 2278 "util/lev_comp.y" - { - if (check_monster_char((char) yystack.l_mark[0].i)) - yyval.i = SP_MONST_PACK(-1, yystack.l_mark[0].i); +{ + if (check_monster_char((char) yyvsp[0].i)) + yyval.i = SP_MONST_PACK(-1, yyvsp[0].i); else { - lc_error("Unknown monster class '%c'!", yystack.l_mark[0].i); + lc_error("Unknown monster class '%c'!", yyvsp[0].i); yyval.i = -1; } } break; case 331: -#line 2287 "util/lev_comp.y" - { - long m = get_monster_id(yystack.l_mark[-1].map, (char) yystack.l_mark[-3].i); +{ + long m = get_monster_id(yyvsp[-1].map, (char) yyvsp[-3].i); if (m == ERR) { - lc_error("Unknown monster ('%c', \"%s\")!", yystack.l_mark[-3].i, yystack.l_mark[-1].map); + lc_error("Unknown monster ('%c', \"%s\")!", yyvsp[-3].i, yyvsp[-1].map); yyval.i = -1; } else - yyval.i = SP_MONST_PACK(m, yystack.l_mark[-3].i); - Free(yystack.l_mark[-1].map); + yyval.i = SP_MONST_PACK(m, yyvsp[-3].i); + Free(yyvsp[-1].map); } break; case 332: -#line 2297 "util/lev_comp.y" - { +{ yyval.i = -1; } break; case 333: -#line 2303 "util/lev_comp.y" - { - add_opvars(splev, "O", VA_PASS1(yystack.l_mark[0].i)); +{ + add_opvars(splev, "O", VA_PASS1(yyvsp[0].i)); } break; case 334: -#line 2307 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[0].map, SPOVAR_OBJ); - vardef_used(vardefs, yystack.l_mark[0].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[0].map)); - Free(yystack.l_mark[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: -#line 2314 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[-3].map, +{ + check_vardef_type(vardefs, yyvsp[-3].map, SPOVAR_OBJ | SPOVAR_ARRAY); - vardef_used(vardefs, yystack.l_mark[-3].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[-3].map)); - Free(yystack.l_mark[-3].map); + vardef_used(vardefs, yyvsp[-3].map); + add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); + Free(yyvsp[-3].map); } break; case 336: -#line 2324 "util/lev_comp.y" - { - long m = get_object_id(yystack.l_mark[0].map, (char)0); +{ + long m = get_object_id(yyvsp[0].map, (char)0); if (m == ERR) { - lc_error("Unknown object \"%s\"!", yystack.l_mark[0].map); + lc_error("Unknown object \"%s\"!", yyvsp[0].map); yyval.i = -1; } else /* obj class != 0 to force generation of a specific item */ yyval.i = SP_OBJ_PACK(m, 1); - Free(yystack.l_mark[0].map); + Free(yyvsp[0].map); } break; case 337: -#line 2335 "util/lev_comp.y" - { - if (check_object_char((char) yystack.l_mark[0].i)) - yyval.i = SP_OBJ_PACK(-1, yystack.l_mark[0].i); +{ + if (check_object_char((char) yyvsp[0].i)) + yyval.i = SP_OBJ_PACK(-1, yyvsp[0].i); else { - lc_error("Unknown object class '%c'!", yystack.l_mark[0].i); + lc_error("Unknown object class '%c'!", yyvsp[0].i); yyval.i = -1; } } break; case 338: -#line 2344 "util/lev_comp.y" - { - long m = get_object_id(yystack.l_mark[-1].map, (char) yystack.l_mark[-3].i); +{ + long m = get_object_id(yyvsp[-1].map, (char) yyvsp[-3].i); if (m == ERR) { - lc_error("Unknown object ('%c', \"%s\")!", yystack.l_mark[-3].i, yystack.l_mark[-1].map); + lc_error("Unknown object ('%c', \"%s\")!", yyvsp[-3].i, yyvsp[-1].map); yyval.i = -1; } else - yyval.i = SP_OBJ_PACK(m, yystack.l_mark[-3].i); - Free(yystack.l_mark[-1].map); + yyval.i = SP_OBJ_PACK(m, yyvsp[-3].i); + Free(yyvsp[-1].map); } break; case 339: -#line 2354 "util/lev_comp.y" - { +{ yyval.i = -1; } break; case 340: -#line 2360 "util/lev_comp.y" - { } +{ } break; case 341: -#line 2362 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_MATH_ADD)); } break; case 342: -#line 2368 "util/lev_comp.y" - { - add_opvars(splev, "i", VA_PASS1(yystack.l_mark[0].i)); +{ + add_opvars(splev, "i", VA_PASS1(yyvsp[0].i)); } break; case 343: -#line 2372 "util/lev_comp.y" - { +{ is_inconstant_number = 1; } break; case 344: -#line 2376 "util/lev_comp.y" - { - add_opvars(splev, "i", VA_PASS1(yystack.l_mark[-1].i)); +{ + add_opvars(splev, "i", VA_PASS1(yyvsp[-1].i)); } break; case 345: -#line 2380 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[0].map, SPOVAR_INT); - vardef_used(vardefs, yystack.l_mark[0].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[0].map)); - Free(yystack.l_mark[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; } break; case 346: -#line 2388 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[-3].map, +{ + check_vardef_type(vardefs, yyvsp[-3].map, SPOVAR_INT | SPOVAR_ARRAY); - vardef_used(vardefs, yystack.l_mark[-3].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[-3].map)); - Free(yystack.l_mark[-3].map); + vardef_used(vardefs, yyvsp[-3].map); + add_opvars(splev, "v", VA_PASS1(yyvsp[-3].map)); + Free(yyvsp[-3].map); is_inconstant_number = 1; } break; case 347: -#line 2397 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_MATH_ADD)); } break; case 348: -#line 2401 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_MATH_SUB)); } break; case 349: -#line 2405 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_MATH_MUL)); } break; case 350: -#line 2409 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_MATH_DIV)); } break; case 351: -#line 2413 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_MATH_MOD)); } break; case 352: -#line 2416 "util/lev_comp.y" - { } +{ } break; case 353: -#line 2420 "util/lev_comp.y" - { - if (!strcmp("int", yystack.l_mark[0].map) || !strcmp("integer", yystack.l_mark[0].map)) { +{ + if (!strcmp("int", yyvsp[0].map) || !strcmp("integer", yyvsp[0].map)) { yyval.i = (int)'i'; } else - lc_error("Unknown function parameter type '%s'", yystack.l_mark[0].map); + lc_error("Unknown function parameter type '%s'", yyvsp[0].map); } break; case 354: -#line 2427 "util/lev_comp.y" - { - if (!strcmp("str", yystack.l_mark[0].map) || !strcmp("string", yystack.l_mark[0].map)) { +{ + if (!strcmp("str", yyvsp[0].map) || !strcmp("string", yyvsp[0].map)) { yyval.i = (int)'s'; } else - lc_error("Unknown function parameter type '%s'", yystack.l_mark[0].map); + lc_error("Unknown function parameter type '%s'", yyvsp[0].map); } break; case 355: -#line 2436 "util/lev_comp.y" - { +{ struct lc_funcdefs_parm *tmp = New(struct lc_funcdefs_parm); if (!curr_function) { @@ -5072,8 +4669,8 @@ case 355: } else { long vt = SPOVAR_NULL; - tmp->name = strdup(yystack.l_mark[-2].map); - tmp->parmtype = (char) yystack.l_mark[0].i; + tmp->name = strdup(yyvsp[-2].map); + tmp->parmtype = (char) yyvsp[0].i; tmp->next = curr_function->params; curr_function->params = tmp; curr_function->n_params++; @@ -5088,288 +4685,252 @@ case 355: lc_error("Unknown func param conversion."); break; } - vardefs = add_vardef_type( vardefs, yystack.l_mark[-2].map, vt); + vardefs = add_vardef_type( vardefs, yyvsp[-2].map, vt); } - Free(yystack.l_mark[-2].map); + Free(yyvsp[-2].map); } break; case 360: -#line 2477 "util/lev_comp.y" - { +{ yyval.i = (int)'i'; } break; case 361: -#line 2481 "util/lev_comp.y" - { +{ yyval.i = (int)'s'; } break; case 362: -#line 2488 "util/lev_comp.y" - { +{ char tmpbuf[2]; - tmpbuf[0] = (char) yystack.l_mark[0].i; + tmpbuf[0] = (char) yyvsp[0].i; tmpbuf[1] = '\0'; yyval.map = strdup(tmpbuf); } break; case 363: -#line 2495 "util/lev_comp.y" - { - long len = strlen( yystack.l_mark[-2].map ); +{ + long len = strlen( yyvsp[-2].map ); char *tmp = (char *) alloc(len + 2); - sprintf(tmp, "%c%s", (char) yystack.l_mark[0].i, yystack.l_mark[-2].map ); - Free( yystack.l_mark[-2].map ); + sprintf(tmp, "%c%s", (char) yyvsp[0].i, yyvsp[-2].map ); + Free( yyvsp[-2].map ); yyval.map = tmp; } break; case 364: -#line 2505 "util/lev_comp.y" - { +{ yyval.map = strdup(""); } break; case 365: -#line 2509 "util/lev_comp.y" - { - char *tmp = strdup( yystack.l_mark[0].map ); - Free( yystack.l_mark[0].map ); +{ + char *tmp = strdup( yyvsp[0].map ); + Free( yyvsp[0].map ); yyval.map = tmp; } break; case 366: -#line 2517 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_SEL_POINT)); } break; case 367: -#line 2521 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_SEL_RECT)); } break; case 368: -#line 2525 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_SEL_FILLRECT)); } break; case 369: -#line 2529 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_SEL_LINE)); } break; case 370: -#line 2533 "util/lev_comp.y" - { +{ /* randline (x1,y1),(x2,y2), roughness */ add_opvars(splev, "o", VA_PASS1(SPO_SEL_RNDLINE)); } break; case 371: -#line 2538 "util/lev_comp.y" - { +{ add_opvars(splev, "io", VA_PASS2(W_ANY, SPO_SEL_GROW)); } break; case 372: -#line 2542 "util/lev_comp.y" - { - add_opvars(splev, "io", VA_PASS2(yystack.l_mark[-3].i, SPO_SEL_GROW)); +{ + add_opvars(splev, "io", VA_PASS2(yyvsp[-3].i, SPO_SEL_GROW)); } break; case 373: -#line 2546 "util/lev_comp.y" - { +{ add_opvars(splev, "iio", - VA_PASS3(yystack.l_mark[-3].i, SPOFILTER_PERCENT, SPO_SEL_FILTER)); + VA_PASS3(yyvsp[-3].i, SPOFILTER_PERCENT, SPO_SEL_FILTER)); } break; case 374: -#line 2551 "util/lev_comp.y" - { +{ add_opvars(splev, "io", VA_PASS2(SPOFILTER_SELECTION, SPO_SEL_FILTER)); } break; case 375: -#line 2556 "util/lev_comp.y" - { +{ add_opvars(splev, "io", VA_PASS2(SPOFILTER_MAPCHAR, SPO_SEL_FILTER)); } break; case 376: -#line 2561 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_SEL_FLOOD)); } break; case 377: -#line 2565 "util/lev_comp.y" - { +{ add_opvars(splev, "oio", VA_PASS3(SPO_COPY, 1, SPO_SEL_ELLIPSE)); } break; case 378: -#line 2570 "util/lev_comp.y" - { +{ add_opvars(splev, "oio", - VA_PASS3(SPO_COPY, yystack.l_mark[-1].i, SPO_SEL_ELLIPSE)); + VA_PASS3(SPO_COPY, yyvsp[-1].i, SPO_SEL_ELLIPSE)); } break; case 379: -#line 2575 "util/lev_comp.y" - { +{ add_opvars(splev, "io", VA_PASS2(1, SPO_SEL_ELLIPSE)); } break; case 380: -#line 2579 "util/lev_comp.y" - { - add_opvars(splev, "io", VA_PASS2(yystack.l_mark[-1].i, SPO_SEL_ELLIPSE)); +{ + add_opvars(splev, "io", VA_PASS2(yyvsp[-1].i, SPO_SEL_ELLIPSE)); } break; case 381: -#line 2583 "util/lev_comp.y" - { +{ add_opvars(splev, "iio", - VA_PASS3(yystack.l_mark[-5].i, yystack.l_mark[-11].i, SPO_SEL_GRADIENT)); + VA_PASS3(yyvsp[-5].i, yyvsp[-11].i, SPO_SEL_GRADIENT)); } break; case 382: -#line 2588 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_SEL_COMPLEMENT)); } break; case 383: -#line 2592 "util/lev_comp.y" - { - check_vardef_type(vardefs, yystack.l_mark[0].map, SPOVAR_SEL); - vardef_used(vardefs, yystack.l_mark[0].map); - add_opvars(splev, "v", VA_PASS1(yystack.l_mark[0].map)); - Free(yystack.l_mark[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); } break; case 384: -#line 2599 "util/lev_comp.y" - { +{ /* nothing */ } break; case 385: -#line 2605 "util/lev_comp.y" - { +{ /* nothing */ } break; case 386: -#line 2609 "util/lev_comp.y" - { +{ add_opvars(splev, "o", VA_PASS1(SPO_SEL_ADD)); } break; case 387: -#line 2615 "util/lev_comp.y" - { +{ add_opvars(splev, "iio", - VA_PASS3(yystack.l_mark[0].dice.num, yystack.l_mark[0].dice.die, SPO_DICE)); + VA_PASS3(yyvsp[0].dice.num, yyvsp[0].dice.die, SPO_DICE)); } break; case 391: -#line 2627 "util/lev_comp.y" - { - add_opvars(splev, "i", VA_PASS1(yystack.l_mark[0].i)); +{ + add_opvars(splev, "i", VA_PASS1(yyvsp[0].i)); } break; case 392: -#line 2631 "util/lev_comp.y" - { - add_opvars(splev, "i", VA_PASS1(yystack.l_mark[0].i)); +{ + add_opvars(splev, "i", VA_PASS1(yyvsp[0].i)); } break; case 393: -#line 2635 "util/lev_comp.y" - { - add_opvars(splev, "i", VA_PASS1(yystack.l_mark[0].i)); +{ + add_opvars(splev, "i", VA_PASS1(yyvsp[0].i)); } break; case 394: -#line 2639 "util/lev_comp.y" - { +{ /* nothing */ } break; case 403: -#line 2661 "util/lev_comp.y" - { - yyval.lregn = yystack.l_mark[0].lregn; +{ + yyval.lregn = yyvsp[0].lregn; } break; case 404: -#line 2665 "util/lev_comp.y" - { - if (yystack.l_mark[-7].i <= 0 || yystack.l_mark[-7].i >= COLNO) +{ + if (yyvsp[-7].i <= 0 || yyvsp[-7].i >= COLNO) lc_error( "Region (%ld,%ld,%ld,%ld) out of level range (x1)!", - yystack.l_mark[-7].i, yystack.l_mark[-5].i, yystack.l_mark[-3].i, yystack.l_mark[-1].i); - else if (yystack.l_mark[-5].i < 0 || yystack.l_mark[-5].i >= ROWNO) + yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); + else if (yyvsp[-5].i < 0 || yyvsp[-5].i >= ROWNO) lc_error( "Region (%ld,%ld,%ld,%ld) out of level range (y1)!", - yystack.l_mark[-7].i, yystack.l_mark[-5].i, yystack.l_mark[-3].i, yystack.l_mark[-1].i); - else if (yystack.l_mark[-3].i <= 0 || yystack.l_mark[-3].i >= COLNO) + yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); + else if (yyvsp[-3].i <= 0 || yyvsp[-3].i >= COLNO) lc_error( "Region (%ld,%ld,%ld,%ld) out of level range (x2)!", - yystack.l_mark[-7].i, yystack.l_mark[-5].i, yystack.l_mark[-3].i, yystack.l_mark[-1].i); - else if (yystack.l_mark[-1].i < 0 || yystack.l_mark[-1].i >= ROWNO) + yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); + else if (yyvsp[-1].i < 0 || yyvsp[-1].i >= ROWNO) lc_error( "Region (%ld,%ld,%ld,%ld) out of level range (y2)!", - yystack.l_mark[-7].i, yystack.l_mark[-5].i, yystack.l_mark[-3].i, yystack.l_mark[-1].i); - yyval.lregn.x1 = yystack.l_mark[-7].i; - yyval.lregn.y1 = yystack.l_mark[-5].i; - yyval.lregn.x2 = yystack.l_mark[-3].i; - yyval.lregn.y2 = yystack.l_mark[-1].i; + yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); + yyval.lregn.x1 = yyvsp[-7].i; + yyval.lregn.y1 = yyvsp[-5].i; + yyval.lregn.x2 = yyvsp[-3].i; + yyval.lregn.y2 = yyvsp[-1].i; yyval.lregn.area = 1; } break; case 405: -#line 2691 "util/lev_comp.y" - { +{ /* This series of if statements is a hack for MSC 5.1. It seems that its tiny little brain cannot compile if these are all one big if statement. */ - if (yystack.l_mark[-7].i < 0 || yystack.l_mark[-7].i > (int) max_x_map) + if (yyvsp[-7].i < 0 || yyvsp[-7].i > (int) max_x_map) lc_error( "Region (%ld,%ld,%ld,%ld) out of map range (x1)!", - yystack.l_mark[-7].i, yystack.l_mark[-5].i, yystack.l_mark[-3].i, yystack.l_mark[-1].i); - else if (yystack.l_mark[-5].i < 0 || yystack.l_mark[-5].i > (int) max_y_map) + yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); + else if (yyvsp[-5].i < 0 || yyvsp[-5].i > (int) max_y_map) lc_error( "Region (%ld,%ld,%ld,%ld) out of map range (y1)!", - yystack.l_mark[-7].i, yystack.l_mark[-5].i, yystack.l_mark[-3].i, yystack.l_mark[-1].i); - else if (yystack.l_mark[-3].i < 0 || yystack.l_mark[-3].i > (int) max_x_map) + yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); + else if (yyvsp[-3].i < 0 || yyvsp[-3].i > (int) max_x_map) lc_error( "Region (%ld,%ld,%ld,%ld) out of map range (x2)!", - yystack.l_mark[-7].i, yystack.l_mark[-5].i, yystack.l_mark[-3].i, yystack.l_mark[-1].i); - else if (yystack.l_mark[-1].i < 0 || yystack.l_mark[-1].i > (int) max_y_map) + yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); + else if (yyvsp[-1].i < 0 || yyvsp[-1].i > (int) max_y_map) lc_error( "Region (%ld,%ld,%ld,%ld) out of map range (y2)!", - yystack.l_mark[-7].i, yystack.l_mark[-5].i, yystack.l_mark[-3].i, yystack.l_mark[-1].i); + yyvsp[-7].i, yyvsp[-5].i, yyvsp[-3].i, yyvsp[-1].i); yyval.lregn.area = 0; - yyval.lregn.x1 = yystack.l_mark[-7].i; - yyval.lregn.y1 = yystack.l_mark[-5].i; - yyval.lregn.x2 = yystack.l_mark[-3].i; - yyval.lregn.y2 = yystack.l_mark[-1].i; + yyval.lregn.x1 = yyvsp[-7].i; + yyval.lregn.y1 = yyvsp[-5].i; + yyval.lregn.x2 = yyvsp[-3].i; + yyval.lregn.y2 = yyvsp[-1].i; } break; -#line 5369 "" } - yystack.s_mark -= yym; - yystate = *yystack.s_mark; - yystack.l_mark -= yym; + yyssp -= yym; + yystate = *yyssp; + yyvsp -= yym; yym = yylhs[yyn]; if (yystate == 0 && yym == 0) { @@ -5379,21 +4940,23 @@ break; state %d\n", YYPREFIX, YYFINAL); #endif yystate = YYFINAL; - *++yystack.s_mark = YYFINAL; - *++yystack.l_mark = yyval; + *++yyssp = YYFINAL; + *++yyvsp = yyval; if (yychar < 0) { - if ((yychar = YYLEX) < 0) yychar = YYEOF; + if ((yychar = yylex()) < 0) yychar = 0; #if YYDEBUG if (yydebug) { - yys = yyname[YYTRANSLATE(yychar)]; + yys = 0; + if (yychar <= YYMAXTOKEN) yys = yyname[yychar]; + if (!yys) yys = "illegal-symbol"; printf("%sdebug: state %d, reading %d (%s)\n", YYPREFIX, YYFINAL, yychar, yys); } #endif } - if (yychar == YYEOF) goto yyaccept; + if (yychar == 0) goto yyaccept; goto yyloop; } if ((yyn = yygindex[yym]) != 0 && (yyn += yystate) >= 0 && @@ -5404,24 +4967,19 @@ break; #if YYDEBUG if (yydebug) printf("%sdebug: after reduction, shifting from state %d \ -to state %d\n", YYPREFIX, *yystack.s_mark, yystate); +to state %d\n", YYPREFIX, *yyssp, yystate); #endif - if (yystack.s_mark >= yystack.s_last && yygrowstack(&yystack) == YYENOMEM) + if (yyssp >= yyss + yystacksize - 1) { goto yyoverflow; } - *++yystack.s_mark = (YYINT) yystate; - *++yystack.l_mark = yyval; + *++yyssp = yystate; + *++yyvsp = yyval; goto yyloop; - yyoverflow: - YYERROR_CALL("yacc stack overflow"); - + yyerror("yacc stack overflow"); yyabort: - yyfreestack(&yystack); return (1); - yyaccept: - yyfreestack(&yystack); return (0); } From 8728de2a0a0d10f850352314ddc74b878d7abf49 Mon Sep 17 00:00:00 2001 From: PatR Date: Wed, 6 Mar 2019 16:59:39 -0800 Subject: [PATCH 3/4] fix #H8330 - kicking obj stack uses wrong weight Kicking a stack splits off one item (except for gold coins) and propels it, but the range for how far it would move was calculated before the split using the entire stack's weight. So a large stack of small items might fail with "thump" (which the report suggested hurt the hero, but it doesn't) and none of the stack would move. Splitting sooner looked complicated because of several potential early returns between the range calculation and the eventual kick, so this hacks the stack's quantity to get the intended weight instead. --- doc/fixes36.2 | 5 ++++- src/dokick.c | 25 ++++++++++++++++++++----- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/doc/fixes36.2 b/doc/fixes36.2 index 81a32b514..a95220e7a 100644 --- a/doc/fixes36.2 +++ b/doc/fixes36.2 @@ -1,4 +1,4 @@ -$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.269 $ $NHDT-Date: 1551739190 2019/03/04 22:39:50 $ +$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.270 $ $NHDT-Date: 1551920371 2019/03/07 00:59:31 $ This fixes36.2 file is here to capture information about updates in the 3.6.x lineage following the release of 3.6.1 in April 2018. Please note, however, @@ -389,6 +389,9 @@ wand or spell of undead turning handled messages and wand-discovery in a non-intuitive manner biased toward healers if steed ate a mimic corpse and began masquerading as something, hero could keep riding it; force dismount +kicking an object stack moves the topmost 1, but range calculation used the + weight of the whole stack to decide how far it would move, possibly + yielding "thump" result with no movement despite being a light item Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository diff --git a/src/dokick.c b/src/dokick.c index 57bde5b74..e06bc285f 100644 --- a/src/dokick.c +++ b/src/dokick.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 dokick.c $NHDT-Date: 1548209738 2019/01/23 02:15:38 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.130 $ */ +/* NetHack 3.6 dokick.c $NHDT-Date: 1551920353 2019/03/07 00:59:13 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.131 $ */ /* Copyright (c) Izchak Miller, Mike Stephenson, Steve Linhart, 1989. */ /* NetHack may be freely redistributed. See license for details. */ @@ -529,9 +529,25 @@ xchar x, y; } } - /* range < 2 means the object will not move. */ - /* maybe dexterity should also figure here. */ - range = (int) ((ACURRSTR) / 2 - kickedobj->owt / 40); + isgold = (kickedobj->oclass == COIN_CLASS); + { + int k_owt = (int) kickedobj->owt; + + /* for non-gold stack, 1 item will be split off below (unless an + early return occurs, so we aren't moving the split to here); + calculate the range for that 1 rather than for the whole stack */ + if (kickedobj->quan > 1L && !isgold) { + long save_quan = kickedobj->quan; + + kickedobj->quan = 1L; + k_owt = weight(kickedobj); + kickedobj->quan = save_quan; + } + + /* range < 2 means the object will not move + (maybe dexterity should also figure here) */ + range = ((int) ACURRSTR) / 2 - k_owt / 40; + } if (martial()) range += rnd(3); @@ -561,7 +577,6 @@ xchar x, y; costly = (!(kickedobj->no_charge && !Has_contents(kickedobj)) && (shkp = shop_keeper(*in_rooms(x, y, SHOPBASE))) != 0 && costly_spot(x, y)); - isgold = (kickedobj->oclass == COIN_CLASS); if (IS_ROCK(levl[x][y].typ) || closed_door(x, y)) { if ((!martial() && rn2(20) > ACURR(A_DEX)) From df84da3ec2f38460e137a4bdfb25148262d544c2 Mon Sep 17 00:00:00 2001 From: PatR Date: Thu, 7 Mar 2019 17:12:01 -0800 Subject: [PATCH 4/4] vms update Suppress Isaac64 on VAX were there isn't an easy way to do 64-bit arithmetic. (Hard way isn't worth it for just an alternate RNG.) Eliminate or suppress some diagnostics: 1) In strict ANSI mode, DEC C was reporting that '$' in identifier is an extension (one time for each file in sys/vms/*.c). (It doesn't do that for the default 'relaxed ANSI' mode.) 2) DEC C uses WIDENED_PROTOTYPES but widens uchar (unsigned char) differently depending upon the mode it is operating in. (Applies to Unix as well as VMS; based on documentation rather than testing.) Update the comment in tradstdc.h about WIDENED vs UNWIDENED_PROTOTYPES. An old comment in config1.h about a problem with the earliest version of DEC C was probably based on an incorrect assumption of what was really going, but I have no way to go back in time to verify that.... --- include/config1.h | 10 ++++++---- include/tradstdc.h | 20 +++++++++++++------- include/unixconf.h | 9 ++++++++- include/vmsconf.h | 34 ++++++++++++++++++++++++++++++---- 4 files changed, 57 insertions(+), 16 deletions(-) diff --git a/include/config1.h b/include/config1.h index 738fd96fa..ee9e5c921 100644 --- a/include/config1.h +++ b/include/config1.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 config1.h $NHDT-Date: 1432512781 2015/05/25 00:13:01 $ $NHDT-Branch: master $:$NHDT-Revision: 1.17 $ */ +/* NetHack 3.6 config1.h $NHDT-Date: 1552007489 2019/03/08 01:11:29 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.20 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Kenneth Lorber, Kensington, Maryland, 2015. */ /* NetHack may be freely redistributed. See license for details. */ @@ -146,7 +146,9 @@ #undef UNIX #ifdef __DECC #ifndef __DECC_VER /* buggy early versions want widened prototypes */ -#define NOTSTDC /* except when typedefs are involved */ +#define NOTSTDC /* except when typedefs are involved */ + /* [25 or so years later... That was probably uchar widening to */ + /* 'unsigned int' rather than anything to do with typedefs. pr] */ #define USE_VARARGS #else #define NHSTDC @@ -200,10 +202,10 @@ /* Because: * #define FOO => FOO={} => defined( ) => (-1 != - - 1) => 1 * #define FOO 1 or on command-line -DFOO - * => defined(1) => (-1 != - 1 - 1) => 1 + * => defined(1) => (-1 != - 1 - 1) => 1 * if FOO isn't defined, FOO=0. But some compilers default to 0 instead of 1 * for -DFOO, oh well. - * => defined(0) => (-1 != - 0 - 1) => 0 + * => defined(0) => (-1 != - 0 - 1) => 0 * * But: * defined("") => (-1 != - "" - 1) diff --git a/include/tradstdc.h b/include/tradstdc.h index 468ebdea8..881787235 100644 --- a/include/tradstdc.h +++ b/include/tradstdc.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 tradstdc.h $NHDT-Date: 1545270756 2018/12/20 01:52:36 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.34 $ */ +/* NetHack 3.6 tradstdc.h $NHDT-Date: 1552007504 2019/03/08 01:11:44 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.35 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2006. */ /* NetHack may be freely redistributed. See license for details. */ @@ -278,12 +278,16 @@ typedef genericptr genericptr_t; /* (void *) or (char *) */ #endif /* - * According to ANSI, prototypes for old-style declarations must widen the - * arguments to int. However, the MSDOS compilers accept shorter arguments - * (char, short, etc.) in prototypes and do typechecking with them. Therefore - * this mess to allow the better typechecking while also allowing some - * prototypes for the ANSI compilers so people quit trying to fix the - * prototypes to match the standard and thus lose the typechecking. + * According to ANSI C, prototypes for old-style function definitions like + * int func(arg) short arg; { ... } + * must specify widened arguments (char and short to int, float to double), + * int func(int); + * same as how narrow arguments get passed when there is no prototype info. + * However, various compilers accept shorter arguments (char, short, etc.) + * in prototypes and do typechecking with them. Therefore this mess to + * allow the better typechecking while also allowing some prototypes for + * the ANSI compilers so people quit trying to fix the prototypes to match + * the standard and thus lose the typechecking. */ #if defined(MSDOS) && !defined(__GO32__) #define UNWIDENED_PROTOTYPES @@ -332,7 +336,9 @@ typedef genericptr genericptr_t; /* (void *) or (char *) */ #ifdef WIDENED_PROTOTYPES #define CHAR_P int #define SCHAR_P int +#ifndef UCHAR_P #define UCHAR_P int +#endif #define XCHAR_P int #define SHORT_P int #define BOOLEAN_P int diff --git a/include/unixconf.h b/include/unixconf.h index 9b5abeed3..63dbddcae 100644 --- a/include/unixconf.h +++ b/include/unixconf.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 unixconf.h $NHDT-Date: 1550532737 2019/02/18 23:32:17 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.39 $ */ +/* NetHack 3.6 unixconf.h $NHDT-Date: 1552007506 2019/03/08 01:11:46 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.40 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Pasi Kallinen, 2018. */ /* NetHack may be freely redistributed. See license for details. */ @@ -271,6 +271,13 @@ #endif #endif +/* Digital Unix/HP Tru64 -- see vmsconf.h for explanation */ +#if defined(__DECC) && (!defined(__STDC__) || !__STDC__) +#define UCHAR_P unsigned int +#else +#define UCHAR_P int +#endif + /* * BSD/ULTRIX systems are normally the only ones that can suspend processes. * Suspending NetHack processes cleanly should be easy to add to other systems diff --git a/include/vmsconf.h b/include/vmsconf.h index 40cde73a0..da77be35a 100644 --- a/include/vmsconf.h +++ b/include/vmsconf.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 vmsconf.h $NHDT-Date: 1432512780 2015/05/25 00:13:00 $ $NHDT-Branch: master $:$NHDT-Revision: 1.22 $ */ +/* NetHack 3.6 vmsconf.h $NHDT-Date: 1552007507 2019/03/08 01:11:47 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.28 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2011. */ /* NetHack may be freely redistributed. See license for details. */ @@ -160,6 +160,12 @@ PANICTRACE_GDB=2 #at conclusion of panic, show a call traceback and then #define RANDOM /* use sys/share/random.c instead of vaxcrtl rand */ +/* config.h defines USE_ISAAC64; we'll use it on Alpha or IA64 but not VAX; + it overrides RANDOM */ +#if (defined(VAX) || defined(vax) || defined(__vax)) && defined(USE_ISAAC64) +#undef ISAAC64 +#endif + #define FCMASK 0660 /* file creation mask */ /* @@ -186,6 +192,21 @@ PANICTRACE_GDB=2 #at conclusion of panic, show a call traceback and then #endif #endif +/* ANSI C uses "value preserving rules", where 'unsigned char' and + 'unsigned short' promote to 'int' if signed int is big enough to hold + all possible values, rather than traditional "sign preserving rules" + where 'unsigned char' and 'unsigned short' promote to 'unsigned int'. + However, the ANSI C rules aren't binding on non-ANSI compilers. + When DEC C (aka Compaq C, then HP C) is in non-standard 'common' mode + it supports prototypes that expect widened types, but it uses the old + sign preserving rules for how to widen narrow unsigned types. (In its + default 'relaxed' mode, __STDC__ is 1 and uchar widens to 'int'.) */ +#if defined(__DECC) && (!defined(__STDC__) || !__STDC__) +#define UCHAR_P unsigned int +#else +#define UCHAR_P int +#endif + #ifdef __DECC #define STRICT_REF_DEF /* used in lev_main.c */ #endif @@ -237,6 +258,12 @@ typedef __mode_t mode_t; #define tgetch vms_getchar +#if defined(__DECC_VER) && (__DECC_VER >= 50000000) + /* for cc/Standard=ANSI89, suppress notification that '$' in identifiers + is an extension; sys/vms/*.c needs it regardless of strict ANSI mode */ + #pragma message disable DOLLARID +#endif + #include "system.h" #define index strchr @@ -247,8 +274,7 @@ typedef __mode_t mode_t; # if defined(RANDOM) # define Rand() random() /* VMS V7 adds these entry points to DECC$SHR; stick with the nethack-supplied - code to avoid having to deal with version-specific conditionalized builds - */ + code to avoid having to deal with version-specific conditionalized builds */ # define random nh_random # define srandom nh_srandom # define initstate nh_initstate @@ -270,7 +296,7 @@ typedef __mode_t mode_t; #define link(f1, f2) vms_link(f1, f2) /* vmsfiles.c */ #define open(f, k, m) vms_open(f, k, m) /* vmsfiles.c */ #define fopen(f, m) vms_fopen(f, m) /* vmsfiles.c */ -/* #define unlink(f0) vms_unlink(f0) /* vmsfiles.c */ +/* #define unlink(f0) vms_unlink(f0) /* vmsfiles.c */ #ifdef VERYOLD_VMS #define unlink(f0) delete (f0) /* vaxcrtl */ #else