X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/96a1981a778d4c72d6fc2f6e9f6be6ce2f6e9fd6..9bf32be3a065900ecb103ce1b5fbbd210f7ca5ea:/data/push.c diff --git a/data/push.c b/data/push.c index b347c16f..c2e39637 100644 --- a/data/push.c +++ b/data/push.c @@ -134,7 +134,7 @@ m4_define([b4_rhs_location], # We do want M4 expansion after # for CPP macros. m4_changecom() m4_divert(0)dnl -@output @output_parser_name@ +@output b4_parser_file_name b4_copyright([Skeleton implementation for Bison's Yacc-like parsers in C],dnl ' [1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006])[ @@ -152,23 +152,20 @@ b4_copyright([Skeleton implementation for Bison's Yacc-like parsers in C],dnl ' m4_if(b4_prefix, [yy], [], [/* Substitute the variable and function names. */ #define yyparse b4_prefix[]parse -#define yypushparse b4_prefix[]pushparse -#define yypvarsinit b4_prefix[]pvarsinit -#define yypvars b4_prefix[]pvars +]b4_push_if([#define yypush_parse b4_prefix[]push_parse +#define yypstate_new b4_prefix[]pstate_new +#define yypstate_delete b4_prefix[]pstate_delete +#define yypstate b4_prefix[]pstate])[ #define yylex b4_prefix[]lex #define yyerror b4_prefix[]error #define yylval b4_prefix[]lval #define yychar b4_prefix[]char #define yydebug b4_prefix[]debug #define yynerrs b4_prefix[]nerrs -b4_locations_if([#define yylloc b4_prefix[]lloc]) -b4_push_if([ -#define yychar_set b4_prefix[]char_set -#define yylval_set b4_prefix[]lval_set -#define yylloc_set b4_prefix[]lloc_set])])[ +b4_locations_if([#define yylloc b4_prefix[]lloc])])[ /* Copy the first part of user declarations. */ -]b4_pre_prologue[ +]b4_user_pre_prologue[ /* Enabling traces. */ #ifndef YYDEBUG @@ -188,9 +185,9 @@ b4_push_if([ # define YYTOKEN_TABLE ]b4_token_table[ #endif -]m4_ifdef([b4_start_header], -[[/* Copy the %start-header blocks. */ -]b4_start_header])[]dnl +]m4_ifdef([b4_requires], +[[/* Copy the %requires blocks. */ +]b4_user_requires])[]dnl b4_token_enums_defines(b4_tokens)[ @@ -220,9 +217,9 @@ typedef struct YYLTYPE # define YYLTYPE_IS_TRIVIAL 1 #endif]) -m4_ifdef([b4_end_header], -[[/* Copy the %end-header blocks. */ -]b4_end_header])[]dnl +m4_ifdef([b4_provides], +[[/* Copy the %provides blocks. */ +]b4_user_provides])[]dnl [/* Copy the second part of user declarations. */ ]b4_user_post_prologue[ @@ -972,16 +969,15 @@ yysyntax_error (char *yyresult, int yystate, int yychar) #endif /* ! YYPARSE_PARAM */ ]b4_push_if([ -struct yypvars; +struct yypstate; enum { YYPUSH_MORE = 4 }; -]b4_c_function_decl([yychar_set], [void], [[struct yypvars *YYPVARS], [YYPVARS]], [[int yychar], [yychar]])[ -]b4_c_function_decl([yylval_set], [void], [[struct yypvars *YYPVARS], [YYPVARS]], [[YYSTYPE yylval], [yylval]])[ -#ifdef YYLTYPE_IS_TRIVIAL -]b4_c_function_decl([yylloc_set], [void], [[struct yypvars *YYPVARS], [YYPVARS]], [[YYLTYPE yylloc], [yylloc]])[ -#endif -]b4_c_function_decl([yypvarsinit], [void *], [[void], []])[ -]b4_c_function_decl([yypushparse], [int], - [[struct yypvars *YYPVARS], [YYPVARS]])[ +]b4_c_function_decl([yypstate_new], [struct yypstate *], [[void], []])[ +]b4_c_function_decl([yypstate_delete], [void], [[struct yypstate *yyps], [yyps]])[ +]b4_c_function_decl([yypush_parse], [int], + [[struct yypstate *yyps], [yyps]], + [[int yynchar], [yynchar]], + [[YYSTYPE const *yynlval], [yynlval]] + b4_locations_if([,[[YYLTYPE const *yynlloc], [yynlloc]]]))[ ])[ ]m4_divert_push([KILL])# ======================== M4 code. @@ -997,18 +993,21 @@ int yychar; YYSTYPE yylval; /* Number of syntax errors so far. */ -int yynerrs;b4_locations_if([ +]b4_push_if([],[ +int yynerrs;])[b4_locations_if([ /* Location data for the lookahead symbol. */ 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_yyparse_variables # ---------------------------- # Declare all the variables that are needed local to YYPARSE m4_define([b4_declare_yyparse_variables], -[[struct yypvars +[[struct yypstate { -]]b4_declare_parser_variables[[ int yystate; int yyn; int yyresult; @@ -1027,7 +1026,6 @@ m4_define([b4_declare_yyparse_variables], /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyssa_ptr; yytype_int16 *yyss; yytype_int16 *yyssp; @@ -1040,10 +1038,8 @@ m4_define([b4_declare_yyparse_variables], YYLTYPE *yyls; YYLTYPE *yylsp; /* The locations where the error started and ended. */ - YYLTYPE yyerror_range[2]; - YYLTYPE *yyerror_range_ptr;]]])[ + YYLTYPE yyerror_range[2];]]])[ YYSIZE_T yystacksize; - int yylen; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; @@ -1053,74 +1049,53 @@ m4_define([b4_declare_yyparse_variables], }; /* Initialize the parser data structure. */ -void * -yypvarsinit (void) +]b4_c_function_def([yypstate_new], [struct yypstate *])[ { - struct yypvars *pv = (struct yypvars *) malloc (sizeof *pv); - pv->yystate = 0; - pv->yyresult = -1; - pv->yyerrstatus = 0; - pv->yytoken = 0; + struct yypstate *yyps = (struct yypstate *) malloc (sizeof *yyps); + yyps->yystate = 0; + yyps->yyresult = -1; + yyps->yyerrstatus = 0; + yyps->yytoken = 0; - pv->yyssa_ptr = pv->yyssa; - pv->yyss = pv->yyssa; - pv->yyvs = pv->yyvsa; + yyps->yyss = yyps->yyssa; + yyps->yyvs = yyps->yyvsa; ]b4_locations_if([ - pv->yyls = pv->yylsa;])[ - pv->yystacksize = YYINITDEPTH; - - pv->yyssp = pv->yyss; - pv->yyvsp = pv->yyvs; - -#if YYLTYPE_IS_TRIVIAL - /* Initialize the default location before parsing starts. */ - pv->yylloc.first_line = pv->yylloc.last_line = ]b4_location_initial_line[; - pv->yylloc.first_column = pv->yylloc.last_column = ]b4_location_initial_column[; -#endif - - pv->yynew = 1; + yyps->yyls = yyps->yylsa;])[ + yyps->yystacksize = YYINITDEPTH; -]b4_locations_if([ pv->yylsp = pv->yyls;])[ + yyps->yyssp = yyps->yyss; + yyps->yyvsp = yyps->yyvs; - return (void *) pv; -} + yyps->yynew = 1; -void -yychar_set (struct yypvars *YYPVARS, int yychar) -{ - if (YYPVARS) - YYPVARS->yychar = yychar; -} +]b4_locations_if([ yyps->yylsp = yyps->yyls;])[ -void -yylval_set (struct yypvars *YYPVARS, YYSTYPE yylval) -{ - if (YYPVARS) - YYPVARS->yylval = yylval; + return yyps; } -#ifdef YYLTYPE_IS_TRIVIAL -void -yylloc_set (struct yypvars *YYPVARS, YYLTYPE yylloc) +]b4_c_function_def([yypstate_delete], [void], + [[struct yypstate *yyps], [yyps]])[ { - if (YYPVARS) - YYPVARS->yylloc = yylloc; + free (yyps); } -#endif]) +]) m4_divert_pop([KILL])dnl# ====================== End of M4 code. -b4_pure_if([], - [b4_declare_parser_variables]) +b4_push_if([],[b4_pure_if([], + [b4_declare_parser_variables])]) b4_push_if([b4_declare_yyparse_variables]) /*-------------------------. -| yyparse or yypushparse. | +| yyparse or yypush_parse. | `-------------------------*/ b4_push_if([ -b4_c_function_def([yypushparse], [int], [[struct yypvars *YYPVARS], [YYPVARS]])],[ +b4_c_function_def([yypush_parse], [int], [[struct yypstate *yyps], [yyps]], + [[int yynchar], [yynchar]], + [[YYSTYPE const *yynlval], [yynlval]] + b4_locations_if([,[[YYLTYPE const *yynlloc], [yynlloc]]]))],[ #ifdef YYPARSE_PARAM b4_c_function_def([yyparse], [int], [[void *YYPARSE_PARAM], [YYPARSE_PARAM]]) #else /* ! YYPARSE_PARAM */ @@ -1128,7 +1103,7 @@ b4_c_function_def([yyparse], [int], b4_parse_param) #endif]) {[ ]b4_pure_if([b4_declare_parser_variables])[ - ]b4_push_if([struct yypvars *pv;])[ + ]b4_push_if([b4_declare_parser_variables])[ int yystate; int yyn; int yyresult; @@ -1153,7 +1128,6 @@ b4_c_function_def([yyparse], [int], b4_parse_param) /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyssa_ptr = yyssa; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; @@ -1168,8 +1142,7 @@ b4_c_function_def([yyparse], [int], b4_parse_param) YYLTYPE *yyls = yylsa; YYLTYPE *yylsp; /* The locations where the error started and ended. */ - YYLTYPE yyerror_range[2]; - YYLTYPE *yyerror_range_ptr = yyerror_range; + ]b4_push_if([],[YYLTYPE yyerror_range[[2]]])[; ]])[ #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)]b4_locations_if([, yylsp -= (N)])[) @@ -1187,12 +1160,14 @@ b4_c_function_def([yyparse], [int], b4_parse_param) YYDPRINTF ((stderr, "Starting parse\n")); - ]b4_push_if([pv = YYPVARS;])[ - yystate = 0; yyerrstatus = 0; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ +]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. */])[ /* Initialize stack pointers. Waste one element of value and location stack @@ -1222,40 +1197,30 @@ m4_ifdef([b4_at_dollar_used], [[ yylsp[0] = yylloc; ]])dnl [ ]b4_push_if([ /* Initialize the locals to the current context. */ - yychar = pv->yychar; - yylval = pv->yylval; - yynerrs = pv->yynerrs; - ]b4_locations_if([ - yylloc = pv->yylloc;])[ - - yystate = pv->yystate; - yyn = pv->yyn; - yyresult = pv->yyresult; - yyerrstatus = pv->yyerrstatus; - yytoken = pv->yytoken; + yystate = yyps->yystate; + yyn = yyps->yyn; + yyresult = yyps->yyresult; + yyerrstatus = yyps->yyerrstatus; + yytoken = yyps->yytoken; - yyssa_ptr = pv->yyssa_ptr; - yyss = pv->yyss; - yyssp = pv->yyssp; + yyss = yyps->yyss; + yyssp = yyps->yyssp; - yyvs = pv->yyvs; - yyvsp = pv->yyvsp; + yyvs = yyps->yyvs; + yyvsp = yyps->yyvsp; ]b4_locations_if([[ /* The location stack. */ - yyls = pv->yyls; - yylsp = pv->yylsp; + yyls = yyps->yyls; + yylsp = yyps->yylsp;]])[ - yyerror_range_ptr = pv->yyerror_range_ptr;]])[ - - yystacksize = pv->yystacksize; - yylen = pv->yylen; - yyval = pv->yyval; - ]b4_locations_if([yyloc = pv->yyloc;])[ - if (pv->yynew == 0) + yystacksize = yyps->yystacksize; + yyval = yyps->yyval; + ]b4_locations_if([yyloc = yyps->yyloc;])[ + if (yyps->yynew == 0) { goto gottoken; } - pv->yynew= 0;])[ + yyps->yynew= 0;])[ goto yysetstate; /*------------------------------------------------------------. @@ -1317,7 +1282,7 @@ m4_ifdef([b4_at_dollar_used], [[ yylsp[0] = yylloc; YYSTACK_RELOCATE (yyvs); ]b4_locations_if([ YYSTACK_RELOCATE (yyls);])[ # undef YYSTACK_RELOCATE - if (yyss1 != yyssa_ptr) + if (yyss1 != ]b4_yyssa[) YYSTACK_FREE (yyss1); } # endif @@ -1363,35 +1328,26 @@ yybackup: YYDPRINTF ((stderr, "Return for a new token:\n")); yyresult = YYPUSH_MORE; /* Initialize the locals to the current context. */ - pv->yychar = yychar; - pv->yylval = yylval; - pv->yynerrs = yynerrs; - ]b4_locations_if([ - pv->yylloc = yylloc;])[ - - pv->yystate = yystate; - pv->yyn = yyn; - pv->yyerrstatus = yyerrstatus; - pv->yytoken = yytoken; + yyps->yystate = yystate; + yyps->yyn = yyn; + yyps->yyerrstatus = yyerrstatus; + yyps->yytoken = yytoken; - pv->yyssa_ptr = yyssa_ptr; - pv->yyss = yyss; - pv->yyssp = yyssp; + yyps->yyss = yyss; + yyps->yyssp = yyssp; - pv->yyvs = yyvs; - pv->yyvsp = yyvsp; + yyps->yyvs = yyvs; + yyps->yyvsp = yyvsp; ]b4_locations_if([[ /* The location stack. */ - pv->yyls = yyls; - pv->yylsp = yylsp; - pv->yyerror_range_ptr = yyerror_range_ptr;]])[ - - pv->yystacksize = yystacksize; - pv->yylen = yylen; - pv->yyval = yyval; - ]b4_locations_if([pv->yyloc = yyloc;])[ + yyps->yyls = yyls; + yyps->yylsp = yylsp;]])[ + + yyps->yystacksize = yystacksize; + yyps->yyval = yyval; + ]b4_locations_if([yyps->yyloc = yyloc;])[ goto yypushreturn; -gottoken:]) +gottoken:])[ YYDPRINTF ((stderr, "Reading a token: ")); ]b4_push_if([], [yychar = YYLEX;])[ } @@ -1505,7 +1461,7 @@ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { - ++yynerrs; +]b4_push_if([],[ ++yynerrs;])[ #if ! YYERROR_VERBOSE yyerror (]b4_yyerror_args[YY_("syntax error")); #else @@ -1543,7 +1499,7 @@ yyerrlab: #endif } -]b4_locations_if([[ yyerror_range[0] = yylloc;]])[ +]b4_locations_if([[ ]b4_yyerror_range[[0] = yylloc;]])[ if (yyerrstatus == 3) { @@ -1580,7 +1536,7 @@ yyerrorlab: if (/*CONSTCOND*/ 0) goto yyerrorlab; -]b4_locations_if([[ yyerror_range[0] = yylsp[1-yylen]; +]b4_locations_if([[ ]b4_yyerror_range[[0] = yylsp[1-yylen]; ]])[ /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); @@ -1614,7 +1570,7 @@ yyerrlab1: if (yyssp == yyss) YYABORT; -]b4_locations_if([[ yyerror_range[0] = *yylsp;]])[ +]b4_locations_if([[ ]b4_yyerror_range[[0] = *yylsp;]])[ yydestruct ("Error: popping", yystos[yystate], yyvsp]b4_locations_if([, yylsp])[]b4_user_args[); YYPOPSTACK (1); @@ -1624,10 +1580,10 @@ yyerrlab1: *++yyvsp = yylval; ]b4_locations_if([[ - yyerror_range[1] = yylloc; + ]b4_yyerror_range[[1] = yylloc; /* Using YYLLOC is tempting, but would change the location of the lookahead. YYLOC is available though. */ - YYLLOC_DEFAULT (yyloc, (yyerror_range- 1), 2); + YYLLOC_DEFAULT (yyloc, (]b4_yyerror_range[- 1), 2); *++yylsp = yyloc;]])[ /* Shift the error token. */ @@ -1676,7 +1632,7 @@ yyreturn: YYPOPSTACK (1); } #ifndef yyoverflow - if (yyss != yyssa_ptr) + if (yyss != ]b4_yyssa[) YYSTACK_FREE (yyss); #endif ]b4_push_if([yypushreturn:])[ @@ -1684,42 +1640,20 @@ yyreturn: if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif - ]b4_push_if([pv->yyresult = YYID (yyresult);])[ + ]b4_push_if([yyps->yyresult = YYID (yyresult);])[ /* Make sure YYID is used. */ return YYID (yyresult); ]} -b4_push_if([ -#ifdef YYPARSE_PARAM -b4_c_function_def([yyparse], [int], [[void *YYPARSE_PARAM], [YYPARSE_PARAM]]) -#else /* ! YYPARSE_PARAM */ -b4_c_function_def([yyparse], [int], b4_parse_param) -#endif -{[ - struct yypvars *ctx = yypvarsinit (); - int status; - do { - yychar_set (ctx, yylex ()); - yylval_set (ctx, yylval); -#ifdef YYLTYPE_IS_TRIVIAL - yylloc_set (ctx, yylloc); -#endif - status = yypushparse (ctx); - } while (status == YYPUSH_MORE); - free (ctx); - return status; -]}]) - - b4_epilogue b4_defines_if( -[@output @output_header_name@ +[@output b4_spec_defines_file b4_copyright([Skeleton interface for Bison's Yacc-like parsers in C],dnl ' [1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006]) -m4_ifdef([b4_start_header], -[[/* Copy the %start-header blocks. */ -]b4_start_header])[]dnl +m4_ifdef([b4_requires], +[[/* Copy the %requires blocks. */ +]b4_user_requires])[]dnl b4_token_enums_defines(b4_tokens) @@ -1753,13 +1687,22 @@ typedef struct YYLTYPE # define YYLTYPE_IS_TRIVIAL 1 #endif -]b4_push_if([struct ]b4_prefix[pvars; +]b4_push_if([struct ]b4_prefix[pstate; +]b4_c_function_decl([]b4_prefix[pstate_new], [struct ]b4_prefix[pstate *], + [[void], []])[ +]b4_c_function_decl([]b4_prefix[pstate_delete], [void], + [[struct ]b4_prefix[pstate *yyps],[yyps]])[ +]b4_c_function_decl([]b4_prefix[push_parse], [int], + [[struct ]b4_prefix[pstate *]b4_prefix[pstate], []b4_prefix[pstate]], + [[int yynchar], [yynchar]], + [[YYSTYPE const *yynlval], [yynlval]] + b4_locations_if([,[[YYLTYPE const *yynlloc], [yynlloc]]]))[ enum { YYPUSH_MORE = 4 };])[ ]b4_pure_if([], [extern YYLTYPE b4_prefix[]lloc;]) )dnl b4_locations_if -m4_ifdef([b4_end_header], -[[/* Copy the %end-header blocks. */ -]b4_end_header])[]dnl +m4_ifdef([b4_provides], +[[/* Copy the %provides blocks. */ +]b4_user_provides])[] ])dnl b4_defines_if