X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/bb010fe51ab1a82df21117660ac2e6aecb00cf56..8646b6a3fdd5991346314c57257dc8e855e12b2a:/data/push.c diff --git a/data/push.c b/data/push.c index 4799a839..51d75890 100644 --- a/data/push.c +++ b/data/push.c @@ -217,6 +217,22 @@ typedef struct YYLTYPE # define YYLTYPE_IS_TRIVIAL 1 #endif]) +b4_push_if([[#ifndef YYPUSH_DECLS +# define YYPUSH_DECLS +struct yypstate; +typedef struct yypstate yypstate; +enum { YYPUSH_MORE = 4 }; +]b4_c_function_decl([[yypstate_new]], [[yypstate *]], [[[void]], []]) +b4_c_function_decl([[yypstate_delete]], [[void]], + [[[yypstate *yyps]], [[yyps]]]) +b4_c_function_decl([[yypush_parse]], [[int]], + [[[yypstate *yyps]], [[yyps]]], + [[[int yypushed_char]], [[yypushed_char]]], + [[[YYSTYPE const *yypushed_val]], [[yypushed_val]]]b4_locations_if([, + [[[YYLTYPE const *yypushed_loc]], [[yypushed_loc]]]])m4_ifset([b4_parse_param], [, + b4_parse_param]))[ +#endif +]]) m4_ifdef([b4_provides], [[/* Copy the %provides blocks. */ ]b4_user_provides])[]dnl @@ -957,36 +973,23 @@ yysyntax_error (char *yyresult, int yystate, int yychar) ]b4_yydestruct_generate([b4_c_function_def])[ - - -/* Prevent warnings from -Wmissing-prototypes. */ -]b4_push_if([ -struct yypstate; -typedef struct yypstate yypstate; -enum { YYPUSH_MORE = 4 }; -]b4_c_function_decl([yypstate_new], [yypstate *], [[void], []])[ -]b4_c_function_decl([yypstate_delete], [void], [[yypstate *yyps], [yyps]])[ -]b4_c_function_decl([yypush_parse], [int], - [[yypstate *yyps], [yyps]], - [[int yynchar], [yynchar]], - [[YYSTYPE const *yynlval], [yynlval]] - b4_locations_if([,[[YYLTYPE const *yynlloc], [yynlloc]]]) - m4_ifset([b4_parse_param], [, b4_parse_param]))[ -],[#ifdef YYPARSE_PARAM +]b4_push_if([], +[[/* Prevent warnings from -Wmissing-prototypes. */ +#ifdef YYPARSE_PARAM ]b4_c_function_decl([yyparse], [int], [[void *YYPARSE_PARAM], [YYPARSE_PARAM]])[ #else /* ! YYPARSE_PARAM */ ]b4_c_function_decl([yyparse], [int], b4_parse_param)[ -#endif /* ! YYPARSE_PARAM */])[ +#endif /* ! YYPARSE_PARAM */]]) -]m4_divert_push([KILL])# ======================== M4 code. +m4_divert_push([KILL])# ======================== M4 code. # b4_declare_scanner_communication_variables # ------------------------------------------ # Declare the variables that are global, or local to YYPARSE if # pure-parser. m4_define([b4_declare_scanner_communication_variables], -[/* The lookahead symbol. */ +[[/* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ @@ -994,12 +997,11 @@ YYSTYPE yylval; /* Number of syntax errors so far. */ ]b4_push_if([],[ -int yynerrs;])[b4_locations_if([ +int yynerrs;])b4_locations_if([[ /* Location data for the lookahead symbol. */ -YYLTYPE yylloc;]) +YYLTYPE yylloc;]]) ]) -m4_define([b4_yyssa],b4_push_if([yyps->yyssa],[yyssa])) m4_define([b4_yyerror_range],b4_push_if([yyps->yyerror_range],[yyerror_range])) # b4_declare_parser_state_variables @@ -1014,7 +1016,7 @@ m4_define([b4_declare_parser_state_variables], /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ - int yytoken]b4_push_if([], [[ = 0]])[; + int yytoken; /* Three stacks and their tools: `yyss': related to states, @@ -1026,25 +1028,26 @@ m4_define([b4_declare_parser_state_variables], /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss]b4_push_if([], [[ = yyssa]])[; + yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs]b4_push_if([], [[ = yyvsa]])[; - YYSTYPE *yyvsp;]b4_locations_if([[ + YYSTYPE *yyvs; + YYSTYPE *yyvsp; +]b4_locations_if([[ /* The location stack. */ YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls]b4_push_if([], [[ = yylsa]])[; + YYLTYPE *yyls; YYLTYPE *yylsp; /* The locations where the error started and ended. */ YYLTYPE yyerror_range[2];]])[ - YYSIZE_T yystacksize]b4_push_if([], [[ = YYINITDEPTH]])[; + YYSIZE_T yystacksize; /* The variables used to return semantic value and location from the action routines. */ - YYSTYPE yyval;]b4_locations_if([[ - YYLTYPE yyloc;]]) -]) + YYSTYPE yyval; +]b4_locations_if([[ YYLTYPE yyloc; +]])]) m4_divert_pop([KILL])dnl# ====================== End of M4 code. @@ -1060,33 +1063,16 @@ b4_push_if( }; /* Initialize the parser data structure. */ -]b4_c_function_def([yypstate_new], [yypstate *])[ +]b4_c_function_def([[yypstate_new]], [[yypstate *]])[ { yypstate *yyps = (yypstate *) malloc (sizeof *yyps); - yyps->yystate = 0; yyps->yyresult = -1; - yyps->yyerrstatus = 0; - yyps->yytoken = 0; - - yyps->yyss = yyps->yyssa; - yyps->yyvs = yyps->yyvsa; - - ]b4_locations_if([ - yyps->yyls = yyps->yylsa;])[ - yyps->yystacksize = YYINITDEPTH; - - yyps->yyssp = yyps->yyss; - yyps->yyvsp = yyps->yyvs; - yyps->yynew = 1; - -]b4_locations_if([ yyps->yylsp = yyps->yyls;])[ - return yyps; } -]b4_c_function_def([yypstate_delete], [void], - [[yypstate *yyps], [yyps]])[ +]b4_c_function_def([[yypstate_delete]], [[void]], + [[[yypstate *yyps]], [[yyps]]])[ { free (yyps); } @@ -1096,11 +1082,14 @@ b4_push_if( #define yyresult yyps->yyresult #define yyerrstatus yyps->yyerrstatus #define yytoken yyps->yytoken +#define yyssa yyps->yyssa #define yyss yyps->yyss #define yyssp yyps->yyssp +#define yyvsa yyps->yyvsa #define yyvs yyps->yyvs #define yyvsp yyps->yyvsp -]b4_locations_if([[#define yyls yyps->yyls +]b4_locations_if([[#define yylsa yyps->yylsa +#define yyls yyps->yyls #define yylsp yyps->yylsp ]])[#define yystacksize yyps->yystacksize #define yyval yyps->yyval @@ -1112,11 +1101,11 @@ b4_push_if( `-------------------------*/ ]b4_push_if([ -b4_c_function_def([yypush_parse], [int], [[yypstate *yyps], [yyps]], - [[int yynchar], [yynchar]], - [[YYSTYPE const *yynlval], [yynlval]] - b4_locations_if([,[[YYLTYPE const *yynlloc], [yynlloc]]]) - m4_ifset([b4_parse_param], [, b4_parse_param]))],[ +b4_c_function_def([[yypush_parse]], [[int]], [[[yypstate *yyps]], [[yyps]]], + [[[int yypushed_char]], [[yypushed_char]]], + [[[YYSTYPE const *yypushed_val]], [[yypushed_val]]]b4_locations_if([, + [[[YYLTYPE const *yypushed_loc]], [[yypushed_loc]]]])m4_ifset([b4_parse_param], [, + b4_parse_param]))], [ #ifdef YYPARSE_PARAM b4_c_function_def([yyparse], [int], [[void *YYPARSE_PARAM], [YYPARSE_PARAM]]) #else /* ! YYPARSE_PARAM */ @@ -1138,44 +1127,42 @@ b4_c_function_def([yyparse], [int], b4_parse_param) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; +]b4_push_if([[ + if (!yyps->yynew) + goto yyread_pushed_token; +]])[ + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; +]b4_locations_if([[ yyls = yylsa; +]])[ + yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); -]b4_push_if([ yychar = yynchar; - if (yynlval) - yylval = *yynlval; -]b4_locations_if([ if (yynlloc) - yylloc = *yynlloc;])[],[yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */])[ - -]b4_push_if([],[[ yystate = 0; yyerrstatus = 0; +]b4_push_if([], [[ yynerrs = 0;]])[ + yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ - yyssp = yyss; yyvsp = yyvs; ]b4_locations_if([[ yylsp = yyls; + #if YYLTYPE_IS_TRIVIAL /* Initialize the default location before parsing starts. */ yylloc.first_line = yylloc.last_line = ]b4_location_initial_line[; yylloc.first_column = yylloc.last_column = ]b4_location_initial_column[; -#endif]]) -]) -[ ]b4_push_if([ - if (yyps->yynew == 0) - { - goto gottoken; - } - yyps->yynew= 0;]) +#endif +]]) m4_ifdef([b4_initial_action], [ m4_pushdef([b4_at_dollar], [m4_define([b4_at_dollar_used])yylloc])dnl m4_pushdef([b4_dollar_dollar], [m4_define([b4_dollar_dollar_used])yylval])dnl - /* User initialization code. */ +/* User initialization code. */ b4_user_initial_action m4_popdef([b4_dollar_dollar])dnl m4_popdef([b4_at_dollar])])dnl @@ -1245,7 +1232,7 @@ m4_ifdef([b4_at_dollar_used], [[ yylsp[0] = yylloc; YYSTACK_RELOCATE (yyvs_alloc, yyvs); ]b4_locations_if([ YYSTACK_RELOCATE (yyls_alloc, yyls);])[ # undef YYSTACK_RELOCATE - if (yyss1 != ]b4_yyssa[) + if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif @@ -1287,14 +1274,23 @@ yybackup: /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { - ]b4_push_if([ - YYDPRINTF ((stderr, "Return for a new token:\n")); - yyresult = YYPUSH_MORE; - goto yypushreturn; -gottoken:])[ - YYDPRINTF ((stderr, "Reading a token: ")); - ]b4_push_if([], [yychar = YYLEX;])[ - } +]b4_push_if([[ if (!yyps->yynew) + { + YYDPRINTF ((stderr, "Return for a new token:\n")); + yyresult = YYPUSH_MORE; + goto yypushreturn; + } + yyps->yynew = 0; + +yyread_pushed_token: +]])[ YYDPRINTF ((stderr, "Reading a token: ")); +]b4_push_if([[ yychar = yypushed_char; + if (yypushed_val) + yylval = *yypushed_val; +]b4_locations_if([[ if (yypushed_loc) + yylloc = *yypushed_loc;]])], +[[ yychar = YYLEX; +]])[ } if (yychar <= YYEOF) { @@ -1576,7 +1572,7 @@ yyreturn: YYPOPSTACK (1); } #ifndef yyoverflow - if (yyss != ]b4_yyssa[) + if (yyss != yyssa) YYSTACK_FREE (yyss); #endif ]b4_push_if([yypushreturn:])[ @@ -1634,20 +1630,23 @@ typedef struct YYLTYPE [extern YYLTYPE b4_prefix[]lloc;]) )dnl b4_locations_if -]b4_push_if([struct ]b4_prefix[pstate; +b4_push_if([[#ifndef YYPUSH_DECLS +# define YYPUSH_DECLS +struct ]b4_prefix[pstate; typedef struct ]b4_prefix[pstate ]b4_prefix[pstate; -]b4_c_function_decl([]b4_prefix[pstate_new], []b4_prefix[pstate *], - [[void], []])[ -]b4_c_function_decl([]b4_prefix[pstate_delete], [void], - [[]b4_prefix[pstate *yyps],[yyps]])[ -]b4_c_function_decl([]b4_prefix[push_parse], [int], - [[]b4_prefix[pstate *]b4_prefix[pstate], []b4_prefix[pstate]], - [[int yynchar], [yynchar]], - [[YYSTYPE const *yynlval], [yynlval]] - b4_locations_if([,[[YYLTYPE const *yynlloc], [yynlloc]]]) - m4_ifset([b4_parse_param], [, b4_parse_param]))[ -enum { YYPUSH_MORE = 4 };])[ - +enum { YYPUSH_MORE = 4 }; +]b4_c_function_decl([b4_prefix[pstate_new]], [b4_prefix[pstate *]], + [[[void]], []]) +b4_c_function_decl([b4_prefix[pstate_delete]], [[void]], + [[b4_prefix[pstate *yyps]], [[yyps]]]) +b4_c_function_decl([b4_prefix[push_parse]], [[int]], + [[b4_prefix[pstate *yyps]], [[yyps]]], + [[[int yypushed_char]], [[yypushed_char]]], + [[[YYSTYPE const *yypushed_val]], [[yypushed_val]]]b4_locations_if([, + [[[YYLTYPE const *yypushed_loc]], [[yypushed_loc]]]])m4_ifset([b4_parse_param], [, + b4_parse_param]))[ +#endif +]]) m4_ifdef([b4_provides], [[/* Copy the %provides blocks. */ ]b4_user_provides])[]