On Sat, 16 Dec 2006, Paul Eggert wrote: > "Joel E. Denny" <[EMAIL PROTECTED]> writes: > > > + m4_ifset([b4_parse_param], [,]) b4_parse_param)[ > > The patch overall looks fine to me, but one minor thing. In usages > like this, it's better to put the empty item inside the conditional. > That is: > > m4_ifset([b4_parse_param], [, b4_parse_param]))[ > > This is the usual style in Bison and it's easier to follow.
I like that better. Thanks. Here's the updated patch, which I committed. Index: ChangeLog =================================================================== RCS file: /sources/bison/bison/ChangeLog,v retrieving revision 1.1624 diff -p -u -r1.1624 ChangeLog --- ChangeLog 15 Dec 2006 05:31:26 -0000 1.1624 +++ ChangeLog 17 Dec 2006 01:31:21 -0000 @@ -1,3 +1,16 @@ +2006-12-16 Joel E. Denny <[EMAIL PROTECTED]> + + 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. + 2006-12-15 Bob Rossi <[EMAIL PROTECTED]> and Joel Denny <[EMAIL PROTECTED]> Index: data/push.c =================================================================== RCS file: /sources/bison/bison/data/push.c,v retrieving revision 1.16 diff -p -u -r1.16 push.c --- data/push.c 15 Dec 2006 05:31:26 -0000 1.16 +++ data/push.c 17 Dec 2006 01:31:21 -0000 @@ -706,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; @@ -971,7 +971,8 @@ enum { YYPUSH_MORE = 4 }; [[yypstate *yyps], [yyps]], [[int yynchar], [yynchar]], [[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 ]b4_c_function_decl([yyparse], [int], [[void *YYPARSE_PARAM], [YYPARSE_PARAM]])[ @@ -1081,8 +1082,7 @@ m4_define([b4_declare_yyparse_variables] ]) m4_divert_pop([KILL])dnl# ====================== End of M4 code. -b4_push_if([],[b4_pure_if([], - [b4_declare_parser_variables])]) +b4_pure_if([], [b4_declare_parser_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]], [[int yynchar], [yynchar]], [[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 b4_c_function_def([yyparse], [int], [[void *YYPARSE_PARAM], [YYPARSE_PARAM]]) #else /* ! YYPARSE_PARAM */ @@ -1102,7 +1103,6 @@ b4_c_function_def([yyparse], [int], b4_p #endif]) {[ ]b4_pure_if([b4_declare_parser_variables])[ - ]b4_push_if([b4_declare_parser_variables])[ int yystate; int yyn; int yyresult; @@ -1700,7 +1700,8 @@ typedef struct ]b4_prefix[pstate ]b4_pre [[]b4_prefix[pstate *]b4_prefix[pstate], []b4_prefix[pstate]], [[int yynchar], [yynchar]], [[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 };])[ m4_ifdef([b4_provides], Index: src/parse-gram.y =================================================================== RCS file: /sources/bison/bison/src/parse-gram.y,v retrieving revision 1.100 diff -p -u -r1.100 parse-gram.y --- src/parse-gram.y 2 Dec 2006 01:52:16 -0000 1.100 +++ src/parse-gram.y 17 Dec 2006 01:31:22 -0000 @@ -255,7 +255,7 @@ prologue_declaration: | "%output" "=" STRING { spec_outfile = $3; } /* deprecated */ | "%parse-param" "{...}" { add_param ("parse_param", $2, @2); } | "%pure-parser" { pure_parser = true; } -| "%push-parser" { push_parser = true; } +| "%push-parser" { push_parser = true; pure_parser = true; } | "%require" STRING { version_check (&@2, $2); } | "%skeleton" STRING { skeleton = $2; } | "%token-table" { token_table_flag = true; }
