[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: push parser
From: |
Joel E. Denny |
Subject: |
Re: push parser |
Date: |
Sat, 16 Dec 2006 20:43:20 -0500 (EST) |
On Sat, 16 Dec 2006, Paul Eggert wrote:
> "Joel E. Denny" <address@hidden> 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 <address@hidden>
+
+ 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 <address@hidden>
and Joel Denny <address@hidden>
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; }
- Re: push parser, (continued)
- Re: push parser, Bob Rossi, 2006/12/15
- Re: push parser, Paul Eggert, 2006/12/15
- Re: push parser, Joel E. Denny, 2006/12/15
- Re: push parser, Paul Eggert, 2006/12/15
- Re: push parser, Joel E. Denny, 2006/12/15
- Message not available
- Message not available
- Re: push parser, Bob Rossi, 2006/12/16
- Re: push parser, Joel E. Denny, 2006/12/16
- Re: push parser, Bob Rossi, 2006/12/16
- Re: push parser, Bob Rossi, 2006/12/17
- Re: push parser, Paul Eggert, 2006/12/16
- Re: push parser,
Joel E. Denny <=
- Re: push parser, Bob Rossi, 2006/12/16
- Re: push parser, Joel E. Denny, 2006/12/18
- Re: push parser, Bob Rossi, 2006/12/18
- Re: push parser, Joel E. Denny, 2006/12/18
- Re: push parser, Bob Rossi, 2006/12/18
- Re: push parser, Paul Eggert, 2006/12/18
- Re: push parser, Joel E. Denny, 2006/12/18
- Re: push parser, Paul Eggert, 2006/12/18
- Re: push parser, Joel E. Denny, 2006/12/18
- Re: push parser, Joel E. Denny, 2006/12/18