X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/136a0f766b38072ec6ac6c386b230e04d4146151..bb010fe51ab1a82df21117660ac2e6aecb00cf56:/data/push.c diff --git a/data/push.c b/data/push.c index 98ece5f4..4799a839 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])[ @@ -151,21 +151,18 @@ b4_copyright([Skeleton implementation for Bison's Yacc-like parsers in C],dnl ' ]b4_identification m4_if(b4_prefix, [yy], [], [/* Substitute the variable and function names. */ -#define yyparse b4_prefix[]parse -]b4_push_if([#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 yyparse b4_prefix[]parse])[ #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_user_pre_prologue[ @@ -376,9 +373,9 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss; - YYSTYPE yyvs; - ]b4_locations_if([ YYLTYPE yyls; + yytype_int16 yyss_alloc; + YYSTYPE yyvs_alloc; + ]b4_locations_if([ YYLTYPE yyls_alloc; ])dnl [}; @@ -418,12 +415,12 @@ union yyalloc elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ -# define YYSTACK_RELOCATE(Stack) \ +# define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ - YYCOPY (&yyptr->Stack, Stack, yysize); \ - Stack = &yyptr->Stack; \ + YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ + Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ @@ -709,7 +706,7 @@ do { \ [[YYSTYPE *yyvsp], [yyvsp]], b4_locations_if([[[YYLTYPE *yylsp], [yylsp]], ])[[int yyrule], [yyrule]]m4_ifset([b4_parse_param], [, - ])b4_parse_param)[ + b4_parse_param]))[ { int yynrhs = yyr2[yyrule]; int yyi; @@ -964,32 +961,31 @@ yysyntax_error (char *yyresult, int yystate, int yychar) /* Prevent warnings from -Wmissing-prototypes. */ -#ifdef YYPARSE_PARAM +]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_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 */ - -]b4_push_if([ -struct yypvars; -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]])[ -])[ +#endif /* ! YYPARSE_PARAM */])[ ]m4_divert_push([KILL])# ======================== M4 code. -# b4_declare_parser_variables -# --------------------------- +# b4_declare_scanner_communication_variables +# ------------------------------------------ # Declare the variables that are global, or local to YYPARSE if # pure-parser. -m4_define([b4_declare_parser_variables], +m4_define([b4_declare_scanner_communication_variables], [/* The lookahead symbol. */ int yychar; @@ -997,28 +993,28 @@ 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([pv->yyssa],[yyssa])) -m4_define([b4_yyerror_range],b4_push_if([pv->yyerror_range],[yyerror_range])) +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 - { -]]b4_declare_parser_variables[[ +# b4_declare_parser_state_variables +# --------------------------------- +# Declare all the variables that are needed to maintain the parser state +# between calls to yypush_parse. +m4_define([b4_declare_parser_state_variables], +[[ int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Look-ahead token as an internal (translated) token number. */ - int yytoken; + int yytoken]b4_push_if([], [[ = 0]])[; /* Three stacks and their tools: `yyss': related to states, @@ -1030,112 +1026,106 @@ m4_define([b4_declare_yyparse_variables], /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; + yytype_int16 *yyss]b4_push_if([], [[ = yyssa]])[; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs; - YYSTYPE *yyvsp;]]b4_locations_if([[[ + YYSTYPE *yyvs]b4_push_if([], [[ = yyvsa]])[; + YYSTYPE *yyvsp;]b4_locations_if([[ /* The location stack. */ YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls; + YYLTYPE *yyls]b4_push_if([], [[ = yylsa]])[; YYLTYPE *yylsp; /* The locations where the error started and ended. */ - YYLTYPE yyerror_range[2];]]])[ - YYSIZE_T yystacksize; - int yylen; + YYLTYPE yyerror_range[2];]])[ + YYSIZE_T yystacksize]b4_push_if([], [[ = YYINITDEPTH]])[; /* The variables used to return semantic value and location from the action routines. */ - YYSTYPE yyval; + YYSTYPE yyval;]b4_locations_if([[ + YYLTYPE yyloc;]]) +]) + +m4_divert_pop([KILL])dnl# ====================== End of M4 code. + +b4_pure_if([], [b4_declare_scanner_communication_variables]) + +b4_push_if( +[[struct yypstate + { + ]b4_declare_parser_state_variables[ /* Used to determine if this is the first time this instance has been used. */ - int yynew;]b4_locations_if([YYLTYPE yyloc;])[ + int yynew; }; /* Initialize the parser data structure. */ -void * -yypvarsinit (void) +]b4_c_function_def([yypstate_new], [yypstate *])[ { - struct yypvars *pv = (struct yypvars *) malloc (sizeof *pv); - pv->yystate = 0; - pv->yyresult = -1; - pv->yyerrstatus = 0; - pv->yytoken = 0; + yypstate *yyps = (yypstate *) malloc (sizeof *yyps); + yyps->yystate = 0; + yyps->yyresult = -1; + yyps->yyerrstatus = 0; + yyps->yytoken = 0; - 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; + yyps->yyls = yyps->yylsa;])[ + yyps->yystacksize = YYINITDEPTH; - pv->yyssp = pv->yyss; - pv->yyvsp = pv->yyvs; + yyps->yyssp = yyps->yyss; + yyps->yyvsp = yyps->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; - -]b4_locations_if([ pv->yylsp = pv->yyls;])[ + yyps->yynew = 1; - return (void *) pv; -} - -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], + [[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_declare_yyparse_variables]) +#define yystate yyps->yystate +#define yyn yyps->yyn +#define yyresult yyps->yyresult +#define yyerrstatus yyps->yyerrstatus +#define yytoken yyps->yytoken +#define yyss yyps->yyss +#define yyssp yyps->yyssp +#define yyvs yyps->yyvs +#define yyvsp yyps->yyvsp +]b4_locations_if([[#define yyls yyps->yyls +#define yylsp yyps->yylsp +]])[#define yystacksize yyps->yystacksize +#define yyval yyps->yyval +]b4_locations_if([[#define yyloc yyps->yyloc +]])])[ /*-------------------------. -| yyparse or yypushparse. | +| yyparse or yypush_parse. | `-------------------------*/ -b4_push_if([ -b4_c_function_def([yypushparse], [int], [[struct yypvars *YYPVARS], [YYPVARS]])],[ +]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]))],[ #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]) -{[ - ]b4_pure_if([b4_declare_parser_variables])[ - ]b4_push_if([struct yypvars *pv;])[ - int yystate; - int yyn; - int yyresult; - /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; +#endif])[ +{ + ]b4_pure_if([b4_declare_scanner_communication_variables]) + b4_push_if([], [b4_declare_parser_state_variables])[ + #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; @@ -1143,54 +1133,24 @@ b4_c_function_def([yyparse], [int], b4_parse_param) YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif - /* Three stacks and their tools: - `yyss': related to states, - `yyvs': related to semantic values, - `yyls': related to locations. - - Refer to the stacks thru separate pointers, to allow yyoverflow - to reallocate them elsewhere. */ - - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss = yyssa; - yytype_int16 *yyssp; - - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs = yyvsa; - YYSTYPE *yyvsp; - -]b4_locations_if( -[[ /* The location stack. */ - YYLTYPE yylsa[YYINITDEPTH]; - YYLTYPE *yyls = yylsa; - YYLTYPE *yylsp; - /* The locations where the error started and ended. */ - YYLTYPE yyerror_range[2]; - ]])[ - #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)]b4_locations_if([, yylsp -= (N)])[) - YYSIZE_T yystacksize = YYINITDEPTH; - - /* The variables used to return semantic value and location from the - action routines. */ - YYSTYPE yyval; -]b4_locations_if([ YYLTYPE yyloc;])[ - /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); - ]b4_push_if([pv = YYPVARS;])[ +]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; - yynerrs = 0; - yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack @@ -1200,13 +1160,18 @@ b4_c_function_def([yyparse], [int], b4_parse_param) yyssp = yyss; yyvsp = yyvs; ]b4_locations_if([[ yylsp = yyls; -]b4_push_if([],[ #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])[ -]]) +#endif]]) +]) +[ ]b4_push_if([ + if (yyps->yynew == 0) + { + goto gottoken; + } + yyps->yynew= 0;]) 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 @@ -1218,39 +1183,7 @@ m4_ifdef([b4_dollar_dollar_used],[[ yyvsp[0] = yylval; ]])dnl 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; - - yyss = pv->yyss; - yyssp = pv->yyssp; - - yyvs = pv->yyvs; - yyvsp = pv->yyvsp; - - ]b4_locations_if([[ /* The location stack. */ - yyls = pv->yyls; - yylsp = pv->yylsp;]])[ - - yystacksize = pv->yystacksize; - yylen = pv->yylen; - yyval = pv->yyval; - ]b4_locations_if([yyloc = pv->yyloc;])[ - if (pv->yynew == 0) - { - goto gottoken; - } - pv->yynew= 0;])[ +[ goto yysetstate; /*------------------------------------------------------------. @@ -1308,9 +1241,9 @@ m4_ifdef([b4_at_dollar_used], [[ yylsp[0] = yylloc; (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; - YYSTACK_RELOCATE (yyss); - YYSTACK_RELOCATE (yyvs); -]b4_locations_if([ YYSTACK_RELOCATE (yyls);])[ + YYSTACK_RELOCATE (yyss_alloc, yyss); + YYSTACK_RELOCATE (yyvs_alloc, yyvs); +]b4_locations_if([ YYSTACK_RELOCATE (yyls_alloc, yyls);])[ # undef YYSTACK_RELOCATE if (yyss1 != ]b4_yyssa[) YYSTACK_FREE (yyss1); @@ -1357,32 +1290,6 @@ yybackup: ]b4_push_if([ 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; - - pv->yyss = yyss; - pv->yyssp = yyssp; - - pv->yyvs = yyvs; - pv->yyvsp = yyvsp; - - ]b4_locations_if([[ /* The location stack. */ - pv->yyls = yyls; - pv->yylsp = yylsp;]])[ - - pv->yystacksize = yystacksize; - pv->yylen = yylen; - pv->yyval = yyval; - ]b4_locations_if([pv->yyloc = yyloc;])[ goto yypushreturn; gottoken:])[ YYDPRINTF ((stderr, "Reading a token: ")); @@ -1498,7 +1405,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 @@ -1677,36 +1584,13 @@ yyreturn: if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif - ]b4_push_if([pv->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]) @@ -1746,13 +1630,25 @@ typedef struct YYLTYPE # define YYLTYPE_IS_TRIVIAL 1 #endif -]b4_push_if([struct ]b4_prefix[pvars; -enum { YYPUSH_MORE = 4 };])[ ]b4_pure_if([], [extern YYLTYPE b4_prefix[]lloc;]) )dnl b4_locations_if +]b4_push_if([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 };])[ + m4_ifdef([b4_provides], [[/* Copy the %provides blocks. */ -]b4_user_provides])[]dnl +]b4_user_provides])[] ])dnl b4_defines_if