X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/9ca7f077a0a5ecdd00c5945c7a7bd3cf46e23c13..77373efad24be4ed77391c9e8ab2f85285810311:/data/yacc.c diff --git a/data/yacc.c b/data/yacc.c index 7e94146e..56e662d6 100644 --- a/data/yacc.c +++ b/data/yacc.c @@ -3,7 +3,7 @@ # Yacc compatible skeleton for Bison # Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006, -# 2007, 2008 Free Software Foundation, Inc. +# 2007, 2008, 2009 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -18,13 +18,13 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . -# Check the value of %define api.push_pull. -b4_percent_define_default([[api.push_pull]], [[pull]]) -b4_percent_define_check_values([[[[api.push_pull]], +# Check the value of %define api.push-pull. +b4_percent_define_default([[api.push-pull]], [[pull]]) +b4_percent_define_check_values([[[[api.push-pull]], [[pull]], [[push]], [[both]]]]) b4_define_flag_if([pull]) m4_define([b4_pull_flag], [[1]]) b4_define_flag_if([push]) m4_define([b4_push_flag], [[1]]) -m4_case(b4_percent_define_get([[api.push_pull]]), +m4_case(b4_percent_define_get([[api.push-pull]]), [pull], [m4_define([b4_push_flag], [[0]])], [push], [m4_define([b4_pull_flag], [[0]])]) @@ -153,9 +153,10 @@ m4_define([b4_rhs_location], # We do want M4 expansion after # for CPP macros. m4_changecom() m4_divert_push(0)dnl -@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])[ +@output(b4_parser_file_name@)@ +b4_copyright([Skeleton implementation for Bison's Yacc-like parsers in C], + [1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2007, 2008, 2009])[ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ @@ -547,8 +548,8 @@ static const ]b4_int_type_for([b4_r2])[ yyr2[] = ]b4_r2[ }; -/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state - STATE-NUM when YYTABLE doesn't specify something else to do. Zero +/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. + Performed when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const ]b4_int_type_for([b4_defact])[ yydefact[] = { @@ -585,6 +586,12 @@ static const ]b4_int_type_for([b4_table])[ yytable[] = ]b4_table[ }; +#define yyis_pact_ninf(yystate) \ + ]b4_table_value_equals([[pact]], [[yystate]], [b4_pact_ninf])[ + +#define yyis_table_ninf(yytable_value) \ + ]b4_table_value_equals([[table]], [[yytable_value]], [b4_table_ninf])[ + static const ]b4_int_type_for([b4_check])[ yycheck[] = { ]b4_check[ @@ -933,7 +940,8 @@ yysyntax_error (char *yyresult, int yystate, int yychar) char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. */ + YYCHECK. In other words, skip the first -YYN actions for this + state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ @@ -1079,26 +1087,25 @@ b4_push_if( /* Used to determine if this is the first time this instance has been used. */ int yynew; - }; + };]b4_pure_if([], [[ + +static char yypstate_allocated = 0;]])b4_pull_if([ -]b4_pull_if([b4_c_function_def([[yyparse]], [[int]], b4_parse_param)[ +b4_c_function_def([[yyparse]], [[int]], b4_parse_param)[ { return yypull_parse (0]m4_ifset([b4_parse_param], [[, ]b4_c_args(b4_parse_param)])[); -}]b4_pure_if([], [[ - -static char yypstate_allocated = 0;]])[ +} ]b4_c_function_def([[yypull_parse]], [[int]], [[[yypstate *yyps]], [[yyps]]]m4_ifset([b4_parse_param], [, b4_parse_param]))[ { int yystatus; - yypstate *yyps_local; -]b4_pure_if([[ int yychar; - YYSTYPE yylval; -]b4_locations_if([[ YYLTYPE yylloc; -]])])[ + yypstate *yyps_local;]b4_pure_if([[ + int yychar; + YYSTYPE yylval;]b4_locations_if([[ + YYLTYPE yylloc;]])])[ if (yyps == 0) { yyps_local = yypstate_new (); @@ -1120,17 +1127,14 @@ static char yypstate_allocated = 0;]])[ if (yyps == 0) yypstate_delete (yyps_local); return yystatus; -} -]])[ +}]])[ + /* Initialize the parser data structure. */ ]b4_c_function_def([[yypstate_new]], [[yypstate *]])[ { yypstate *yyps;]b4_pure_if([], [[ if (yypstate_allocated) - { - yyerror (]b4_yyerror_args[YY_("cannot allocate multiple impure push-parser instances")); - return 0; - }]])[ + return 0;]])[ yyps = (yypstate *) malloc (sizeof *yyps); if (!yyps) return 0; @@ -1195,9 +1199,9 @@ b4_push_if([b4_pure_if([], [[ int yypushed_char = yychar; int yytoken; /* 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;]])[ + #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; @@ -1209,19 +1213,18 @@ b4_push_if([b4_pure_if([], [[ int yypushed_char = yychar; /* 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([[ + int yylen = 0;]b4_push_if([[ + if (!yyps->yynew) { yyn = yypact[yystate]; goto yyread_pushed_token; - } -]])[ + }]])[ + yytoken = 0; yyss = yyssa; - yyvs = yyvsa; -]b4_locations_if([[ yyls = yylsa; -]])[ + yyvs = yyvsa;]b4_locations_if([[ + yyls = yylsa;]])[ yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); @@ -1351,40 +1354,36 @@ yybackup: /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; - if (yyn == YYPACT_NINF) + if (yyis_pact_ninf (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) - { -]b4_push_if([[ if (!yyps->yynew) - { -]b4_use_push_for_pull_if([], -[[ YYDPRINTF ((stderr, "Return for a new token:\n")); -]])[ yyresult = YYPUSH_MORE; + {]b4_push_if([[ + if (!yyps->yynew) + {]b4_use_push_for_pull_if([], [[ + YYDPRINTF ((stderr, "Return for a new token:\n"));]])[ + yyresult = YYPUSH_MORE; goto yypushreturn; } - yyps->yynew = 0; -]b4_pure_if([], [[ + yyps->yynew = 0;]b4_pure_if([], [[ /* Restoring the pushed token is only necessary for the first yypush_parse invocation since subsequent invocations don't overwrite it before jumping to yyread_pushed_token. */ yychar = yypushed_char; - yylval = yypushed_val; - ]b4_locations_if([[yylloc = yypushed_loc; -]])])[ -yyread_pushed_token: -]])[ YYDPRINTF ((stderr, "Reading a token: ")); -]b4_push_if([b4_pure_if([[ yychar = yypushed_char; + yylval = yypushed_val;]b4_locations_if([[ + yylloc = yypushed_loc;]])])[ +yyread_pushed_token:]])[ + YYDPRINTF ((stderr, "Reading a token: "));]b4_push_if([b4_pure_if([[ + yychar = yypushed_char; if (yypushed_val) - yylval = *yypushed_val; -]b4_locations_if([[ if (yypushed_loc) - yylloc = *yypushed_loc; -]])])], -[[ yychar = YYLEX; -]])[ } + yylval = *yypushed_val;]b4_locations_if([[ + if (yypushed_loc) + yylloc = *yypushed_loc;]])])], [[ + yychar = YYLEX;]])[ + } if (yychar <= YYEOF) { @@ -1405,7 +1404,7 @@ yyread_pushed_token: yyn = yytable[yyn]; if (yyn <= 0) { - if (yyn == 0 || yyn == YYTABLE_NINF) + if (yyn == 0 || yyis_table_ninf (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; @@ -1589,7 +1588,7 @@ yyerrlab1: for (;;) { yyn = yypact[yystate]; - if (yyn != YYPACT_NINF) + if (!yyis_pact_ninf (yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) @@ -1683,9 +1682,10 @@ yypushreturn: ]b4_epilogue b4_defines_if( -[@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]) +[@output(b4_spec_defines_file@)@ +b4_copyright([Skeleton interface for Bison's Yacc-like parsers in C], + [1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, + 2006, 2007, 2008, 2009]) b4_percent_code_get([[requires]])[]dnl