Make %push-parser imply %pure-parser. This fixes several bugs; see

<http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00148.html>.
* src/parse-gram.y (prologue_declaration): For %push-parser, also set
pure_parser = true.
* data/push.c: Don't bother testing b4_push_if when deciding whether
to expand b4_declare_parser_variables globally.
(yypush_parse): Likewise in here.

* data/push.c (yypush_parse): Add b4_parse_param to arguments.
(yy_reduce_print): Reformat M4 for readability.
This commit is contained in:
Joel E. Denny
2006-12-17 01:33:31 +00:00
parent ee5abb379b
commit 791934e4b5
4 changed files with 23 additions and 9 deletions

View File

@@ -1,3 +1,16 @@
2006-12-16 Joel E. Denny <jdenny@ces.clemson.edu>
Make %push-parser imply %pure-parser. This fixes several bugs; see
<http://lists.gnu.org/archive/html/bison-patches/2006-12/msg00148.html>.
* src/parse-gram.y (prologue_declaration): For %push-parser, also set
pure_parser = true.
* data/push.c: Don't bother testing b4_push_if when deciding whether
to expand b4_declare_parser_variables globally.
(yypush_parse): Likewise in here.
* data/push.c (yypush_parse): Add b4_parse_param to arguments.
(yy_reduce_print): Reformat M4 for readability.
2006-12-15 Bob Rossi <bob@brasko.net> 2006-12-15 Bob Rossi <bob@brasko.net>
and Joel Denny <jdenny@ces.clemson.edu> and Joel Denny <jdenny@ces.clemson.edu>

View File

@@ -706,7 +706,7 @@ do { \
[[YYSTYPE *yyvsp], [yyvsp]], [[YYSTYPE *yyvsp], [yyvsp]],
b4_locations_if([[[YYLTYPE *yylsp], [yylsp]], b4_locations_if([[[YYLTYPE *yylsp], [yylsp]],
])[[int yyrule], [yyrule]]m4_ifset([b4_parse_param], [, ])[[int yyrule], [yyrule]]m4_ifset([b4_parse_param], [,
])b4_parse_param)[ b4_parse_param]))[
{ {
int yynrhs = yyr2[yyrule]; int yynrhs = yyr2[yyrule];
int yyi; int yyi;
@@ -971,7 +971,8 @@ enum { YYPUSH_MORE = 4 };
[[yypstate *yyps], [yyps]], [[yypstate *yyps], [yyps]],
[[int yynchar], [yynchar]], [[int yynchar], [yynchar]],
[[YYSTYPE const *yynlval], [yynlval]] [[YYSTYPE const *yynlval], [yynlval]]
b4_locations_if([,[[YYLTYPE const *yynlloc], [yynlloc]]]))[ b4_locations_if([,[[YYLTYPE const *yynlloc], [yynlloc]]])
m4_ifset([b4_parse_param], [, b4_parse_param]))[
],[#ifdef YYPARSE_PARAM ],[#ifdef YYPARSE_PARAM
]b4_c_function_decl([yyparse], [int], ]b4_c_function_decl([yyparse], [int],
[[void *YYPARSE_PARAM], [YYPARSE_PARAM]])[ [[void *YYPARSE_PARAM], [YYPARSE_PARAM]])[
@@ -1081,8 +1082,7 @@ m4_define([b4_declare_yyparse_variables],
]) ])
m4_divert_pop([KILL])dnl# ====================== End of M4 code. m4_divert_pop([KILL])dnl# ====================== End of M4 code.
b4_push_if([],[b4_pure_if([], b4_pure_if([], [b4_declare_parser_variables])
[b4_declare_parser_variables])])
b4_push_if([b4_declare_yyparse_variables]) b4_push_if([b4_declare_yyparse_variables])
@@ -1094,7 +1094,8 @@ b4_push_if([
b4_c_function_def([yypush_parse], [int], [[yypstate *yyps], [yyps]], b4_c_function_def([yypush_parse], [int], [[yypstate *yyps], [yyps]],
[[int yynchar], [yynchar]], [[int yynchar], [yynchar]],
[[YYSTYPE const *yynlval], [yynlval]] [[YYSTYPE const *yynlval], [yynlval]]
b4_locations_if([,[[YYLTYPE const *yynlloc], [yynlloc]]]))],[ b4_locations_if([,[[YYLTYPE const *yynlloc], [yynlloc]]])
m4_ifset([b4_parse_param], [, b4_parse_param]))],[
#ifdef YYPARSE_PARAM #ifdef YYPARSE_PARAM
b4_c_function_def([yyparse], [int], [[void *YYPARSE_PARAM], [YYPARSE_PARAM]]) b4_c_function_def([yyparse], [int], [[void *YYPARSE_PARAM], [YYPARSE_PARAM]])
#else /* ! YYPARSE_PARAM */ #else /* ! YYPARSE_PARAM */
@@ -1102,7 +1103,6 @@ b4_c_function_def([yyparse], [int], b4_parse_param)
#endif]) #endif])
{[ {[
]b4_pure_if([b4_declare_parser_variables])[ ]b4_pure_if([b4_declare_parser_variables])[
]b4_push_if([b4_declare_parser_variables])[
int yystate; int yystate;
int yyn; int yyn;
int yyresult; int yyresult;
@@ -1700,7 +1700,8 @@ typedef struct ]b4_prefix[pstate ]b4_prefix[pstate;
[[]b4_prefix[pstate *]b4_prefix[pstate], []b4_prefix[pstate]], [[]b4_prefix[pstate *]b4_prefix[pstate], []b4_prefix[pstate]],
[[int yynchar], [yynchar]], [[int yynchar], [yynchar]],
[[YYSTYPE const *yynlval], [yynlval]] [[YYSTYPE const *yynlval], [yynlval]]
b4_locations_if([,[[YYLTYPE const *yynlloc], [yynlloc]]]))[ b4_locations_if([,[[YYLTYPE const *yynlloc], [yynlloc]]])
m4_ifset([b4_parse_param], [, b4_parse_param]))[
enum { YYPUSH_MORE = 4 };])[ enum { YYPUSH_MORE = 4 };])[
m4_ifdef([b4_provides], m4_ifdef([b4_provides],

View File

@@ -2053,7 +2053,7 @@ yyreduce:
/* Line 1269 of yacc.c */ /* Line 1269 of yacc.c */
#line 258 "parse-gram.y" #line 258 "parse-gram.y"
{ push_parser = true; } { push_parser = true; pure_parser = true; }
break; break;
case 29: case 29:

View File

@@ -255,7 +255,7 @@ prologue_declaration:
| "%output" "=" STRING { spec_outfile = $3; } /* deprecated */ | "%output" "=" STRING { spec_outfile = $3; } /* deprecated */
| "%parse-param" "{...}" { add_param ("parse_param", $2, @2); } | "%parse-param" "{...}" { add_param ("parse_param", $2, @2); }
| "%pure-parser" { pure_parser = true; } | "%pure-parser" { pure_parser = true; }
| "%push-parser" { push_parser = true; } | "%push-parser" { push_parser = true; pure_parser = true; }
| "%require" STRING { version_check (&@2, $2); } | "%require" STRING { version_check (&@2, $2); }
| "%skeleton" STRING { skeleton = $2; } | "%skeleton" STRING { skeleton = $2; }
| "%token-table" { token_table_flag = true; } | "%token-table" { token_table_flag = true; }