X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/552893661babb72c427f5fe21e5a47c6d916af74..d1ff7a7cc62900b658ee4bb8cb2a2c6a1b0a2bea:/data/yacc.c diff --git a/data/yacc.c b/data/yacc.c index bc98400a..9bc021fa 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -1,4 +1,4 @@ -m4_divert(-1) -*- C -*- +m4_divert(-1) -*- C -*- # Yacc compatible skeleton for Bison @@ -36,10 +36,10 @@ m4_define_default([b4_stack_depth_init], [200]) ## ------------------------ ## -# b4_pure_if(IF-TRUE, IF-FALSE) -# ----------------------------- +# b4_yacc_pure_if(IF-TRUE, IF-FALSE) +# ---------------------------------- # Expand IF-TRUE, if %pure-parser and %parse-param, IF-FALSE otherwise. -m4_define([b4_Pure_if], +m4_define([b4_yacc_pure_if], [b4_pure_if([m4_ifset([b4_parse_param], [$1], [$2])], [$2])]) @@ -49,7 +49,7 @@ m4_define([b4_Pure_if], # --------------- # Arguments passed to yyerror: user args plus yylloc. m4_define([b4_yyerror_args], -[b4_Pure_if([b4_location_if([&yylloc, ])])dnl +[b4_yacc_pure_if([b4_location_if([&yylloc, ])])dnl m4_ifset([b4_parse_param], [b4_c_args(b4_parse_param), ])]) @@ -102,7 +102,7 @@ m4_define([b4_lhs_value], # Expansion of $NUM, where the current rule has RULE-LENGTH # symbols on RHS. m4_define([b4_rhs_value], -[(yyvsp@{m4_eval([$2 - $1])@}m4_ifval([$3], [.$3]))]) +[(yyvsp@{($2) - ($1)@}m4_ifval([$3], [.$3]))]) @@ -122,7 +122,7 @@ m4_define([b4_lhs_location], # Expansion of @NUM, where the current rule has RULE-LENGTH symbols # on RHS. m4_define([b4_rhs_location], -[(yylsp@{m4_eval([$2 - $1])@})]) +[(yylsp@{($2) - ($1)@})]) @@ -219,12 +219,25 @@ typedef struct YYLTYPE /* Line __line__ of yacc.c. */ b4_syncline([@oline@], [@ofile@])[ +/* Define YYMODERN_C if this compiler supports C89 or better. If + __STDC__ is defined, the compiler is modern. IBM xlc 7.0 when run + as 'cc' doesn't define __STDC__ (or __STDC_VERSION__) for pedantic + reasons, but it defines __C99__FUNC__ so check that as well. + Consider a C++ compiler to be modern if it defines __cplusplus. */ +#ifndef YYMODERN_C +# if defined (__STDC__) || defined (__C99__FUNC__) || defined (__cplusplus) +# define YYMODERN_C 1 +# else +# define YYMODERN_C 0 +# endif +#endif + #ifndef YYSIZE_T # if defined (__SIZE_TYPE__) # define YYSIZE_T __SIZE_TYPE__ # elif defined (size_t) # define YYSIZE_T size_t -# elif ! defined (YYSIZE_T) && (defined (__STDC__) || defined (__cplusplus)) +# elif ! defined (YYSIZE_T) && YYMODERN_C # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else @@ -246,6 +259,9 @@ b4_syncline([@oline@], [@ofile@])[ # endif #endif +/* Suppress unused-variable warnings by "using" E. */ +#define YYUSE(e) do {;} while (/*CONSTCOND*/ 0 && (e)) + #if ! defined (yyoverflow) || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -254,16 +270,16 @@ b4_syncline([@oline@], [@ofile@])[ # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca -# elif defined __BUILTIN_VA_ARG_INCR +# elif defined (__BUILTIN_VA_ARG_INCR) # include /* INFRINGES ON USER NAME SPACE */ -# elif defined _AIX +# elif defined (_AIX) # define YYSTACK_ALLOC __alloca -# elif defined _MSC_VER +# elif defined (_MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca -# if ! defined (_STDLIB_H) && (defined (__STDC__) || defined (__cplusplus)) +# if ! defined (_ALLOCA_H) && ! defined (_STDLIB_H) && YYMODERN_C # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 @@ -294,15 +310,13 @@ extern "C" { # endif # ifndef YYMALLOC # define YYMALLOC malloc -# if (! defined (malloc) && ! defined (_STDLIB_H) \ - && (defined (__STDC__) || defined (__cplusplus))) +# if ! defined (malloc) && ! defined (_STDLIB_H) && YYMODERN_C void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free -# if (! defined (free) && ! defined (_STDLIB_H) \ - && (defined (__STDC__) || defined (__cplusplus))) +# if ! defined (free) && ! defined (_STDLIB_H) && YYMODERN_C void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif @@ -354,7 +368,7 @@ union yyalloc for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ - while (0) + while (/*CONSTCOND*/ 0) # endif # endif @@ -372,11 +386,11 @@ union yyalloc yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ - while (0) + while (/*CONSTCOND*/ 0) #endif -#if defined (__STDC__) || defined (__cplusplus) +#if YYMODERN_C typedef signed char yysigned_char; #else typedef short int yysigned_char; @@ -543,7 +557,7 @@ do \ yyerror (]b4_yyerror_args[YY_("syntax error: cannot back up")); \ YYERROR; \ } \ -while (0) +while (/*CONSTCOND*/ 0) #define YYTERROR 1 @@ -572,7 +586,7 @@ while (0) (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ - while (0) + while (/*CONSTCOND*/ 0) #endif @@ -612,18 +626,20 @@ while (0) do { \ if (yydebug) \ YYFPRINTF Args; \ -} while (0) +} while (/*CONSTCOND*/ 0) + +# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +do { \ + if (yydebug) \ + { \ + YYFPRINTF (stderr, "%s ", Title); \ + yysymprint (stderr, \ + Type, Value]b4_location_if([, Location])[]b4_user_args[); \ + YYFPRINTF (stderr, "\n"); \ + } \ +} while (/*CONSTCOND*/ 0) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ -do { \ - if (yydebug) \ - { \ - YYFPRINTF (stderr, "%s ", Title); \ - yysymprint (stderr, \ - Type, Value]b4_location_if([, Location])[); \ - YYFPRINTF (stderr, "\n"); \ - } \ -} while (0) +]b4_yysymprint_generate([b4_c_function_def])[ /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | @@ -644,7 +660,7 @@ do { \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ -} while (0) +} while (/*CONSTCOND*/ 0) /*------------------------------------------------. @@ -652,23 +668,33 @@ do { \ `------------------------------------------------*/ ]b4_c_function_def([yy_reduce_print], [static void], - [[int yyrule], [yyrule]])[ + [[YYSTYPE *yyvsp], [yyvsvp]], + b4_location_if([[[YYLTYPE *yylsp], [yyvlvp]],]) + [[int yyrule], [yyrule]] + b4_parse_param)[ { + int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu), ", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); - /* Print the symbols being reduced, and their result. */ - for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) - YYFPRINTF (stderr, "%s ", yytname[yyrhs[yyi]]); - YYFPRINTF (stderr, "-> %s\n", yytname[yyr1[yyrule]]); + /* The symbols being reduced. */ + for (yyi = 0; yyi < yynrhs; yyi++) + { + fprintf (stderr, " $%d = ", yyi + 1); + yysymprint (stderr, yyrhs[yyprhs[yyrule] + yyi], + &]b4_rhs_value(yynrhs, yyi + 1)[ + ]b4_location_if([, &]b4_rhs_location(yynrhs, yyi + 1))[]dnl + b4_user_args[); + fprintf (stderr, "\n"); + } } -# define YY_REDUCE_PRINT(Rule) \ -do { \ - if (yydebug) \ - yy_reduce_print (Rule); \ -} while (0) +# define YY_REDUCE_PRINT(Args) \ +do { \ + if (yydebug) \ + yy_reduce_print (yyvsp, ]b4_location_if([yylsp, ])[Args); \ +} while (/*CONSTCOND*/ 0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ @@ -677,7 +703,7 @@ int yydebug; # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) -# define YY_REDUCE_PRINT(Rule) +# define YY_REDUCE_PRINT(Args) #endif /* !YYDEBUG */ @@ -707,7 +733,7 @@ int yydebug; # else /* Return the length of YYSTR. */ static YYSIZE_T -# if defined (__STDC__) || defined (__cplusplus) +# if YYMODERN_C yystrlen (const char *yystr) # else yystrlen (yystr) @@ -731,7 +757,7 @@ yystrlen (yystr) /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * -# if defined (__STDC__) || defined (__cplusplus) +# if YYMODERN_C yystpcpy (char *yydest, const char *yysrc) # else yystpcpy (yydest, yysrc) @@ -908,26 +934,23 @@ yysyntax_error (char *yyresult, int yystate, int yychar) #endif /* YYERROR_VERBOSE */ -#if YYDEBUG -]b4_yysymprint_generate([b4_c_function_def])[ -#endif /* ! YYDEBUG */ -]b4_yydestruct_generate([b4_c_function_def]) +]b4_yydestruct_generate([b4_c_function_def])[ /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) +# if YYMODERN_C int yyparse (void *YYPARSE_PARAM); # else int yyparse (); # endif #else /* ! YYPARSE_PARAM */ -b4_c_function_decl([yyparse], [int], b4_parse_param) +]b4_c_function_decl([yyparse], [int], b4_parse_param)[ #endif /* ! YYPARSE_PARAM */ -m4_divert_push([KILL])# ======================== M4 code. +]m4_divert_push([KILL])# ======================== M4 code. # b4_declare_parser_variables # --------------------------- # Declare the variables that are global, or local to YYPARSE if @@ -955,7 +978,7 @@ b4_pure_if([], `----------*/ #ifdef YYPARSE_PARAM -# if defined (__STDC__) || defined (__cplusplus) +# if YYMODERN_C int yyparse (void *YYPARSE_PARAM) # else int yyparse (YYPARSE_PARAM) @@ -1238,17 +1261,18 @@ yyreduce: ]b4_location_if( [[ /* Default location. */ YYLLOC_DEFAULT (yyloc, yylsp - yylen, yylen);]])[ - YY_REDUCE_PRINT (yyn); + YY_REDUCE_PRINT ((yyn]b4_user_args[)); switch (yyn) - ]{ - b4_actions + { + ]b4_actions[ default: break; } + YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); /* Line __line__ of yacc.c. */ -b4_syncline([@oline@], [@ofile@]) +]b4_syncline([@oline@], [@ofile@])[ -[ yyvsp -= yylen; + yyvsp -= yylen; yyssp -= yylen; ]b4_location_if([ yylsp -= yylen;])[ @@ -1332,7 +1356,8 @@ yyerrlab: } else { - yydestruct ("Error: discarding", yytoken, &yylval]b4_location_if([, &yylloc])[); + yydestruct ("Error: discarding", + yytoken, &yylval]b4_location_if([, &yylloc])[]b4_user_args[); yychar = YYEMPTY; } } @@ -1350,7 +1375,7 @@ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ - if (0) + if (/*CONSTCOND*/ 0) goto yyerrorlab; ]b4_location_if([[ yyerror_range[0] = yylsp[1-yylen]; @@ -1386,7 +1411,8 @@ yyerrlab1: YYABORT; ]b4_location_if([[ yyerror_range[0] = *yylsp;]])[ - yydestruct ("Error: popping", yystos[yystate], yyvsp]b4_location_if([, yylsp])[); + yydestruct ("Error: popping", + yystos[yystate], yyvsp]b4_location_if([, yylsp])[]b4_user_args[); YYPOPSTACK; yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); @@ -1437,11 +1463,11 @@ yyexhaustedlab: yyreturn: if (yychar != YYEOF && yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval]b4_location_if([, &yylloc])[); + yytoken, &yylval]b4_location_if([, &yylloc])[]b4_user_args[); while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp]b4_location_if([, yylsp])[); + yystos[*yyssp], yyvsp]b4_location_if([, yylsp])[]b4_user_args[); YYPOPSTACK; } #ifndef yyoverflow