[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: building from CVS
From: |
Joel E. Denny |
Subject: |
Re: building from CVS |
Date: |
Wed, 20 Feb 2008 13:23:25 -0500 (EST) |
On Wed, 20 Feb 2008, Bob Rossi wrote:
> My next error was this, I only added,
> %define api.push_pull "push"
> to my bison input file. That caused this compiler error,
> if gcc -DHAVE_CONFIG_H -I. -I../../../../cgdb/lib/gdbmi/src -I..
> -I../../../../cgdb/lib/gdbmi/src/mi_oc_parser -g -O2 -MT gdbmi_grammar.o -MD
> -MP -MF ".deps/gdbmi_grammar.Tpo" -c -o gdbmi_grammar.o
> ../../../../cgdb/lib/gdbmi/src/gdbmi_grammar.c; \
> then mv -f ".deps/gdbmi_grammar.Tpo" ".deps/gdbmi_grammar.Po"; else
> rm -f ".deps/gdbmi_grammar.Tpo"; exit 1; fi
> ../../../../cgdb/lib/gdbmi/src/gdbmi_grammar.c: In function
> ‘gdbmi_pstate_new’:
> ../../../../cgdb/lib/gdbmi/src/gdbmi_grammar.c:1226: error:
> ‘yypstate_allocated’ undeclared (first use in this function)
> ../../../../cgdb/lib/gdbmi/src/gdbmi_grammar.c:1226: error: (Each
> undeclared identifier is reported only once
> ../../../../cgdb/lib/gdbmi/src/gdbmi_grammar.c:1226: error: for each
> function it appears in.)
> ../../../../cgdb/lib/gdbmi/src/gdbmi_grammar.c: In function
> ‘gdbmi_pstate_delete’:
> ../../../../cgdb/lib/gdbmi/src/gdbmi_grammar.c:1256: error:
> ‘yypstate_allocated’ undeclared (first use in this function)
> make[5]: *** [gdbmi_grammar.o] Error 1
> make[5]: Leaving directory
> `/home/bob/rcs/svn/cgdb/trunk-gdbmi/build/lib/gdbmi/src'
> of course, this happens because of this code in yacc.c,
> }]b4_pure_if([], [[
>
> static char yypstate_allocated = 0;]])[
> so I had to add,
> %define api.pure
>
> Is this what you would expect or is this a regression? I'm pretty sure
> you were pushing for both pure and non pure push parsers.
Thanks. It's a regression. Impure push-only parsers are an odd case
since, without a pull interface, they don't seem very helpful for backward
compatibility. Nevertheless, the case shouldn't be broken.
I committed this, which also fixes a bug I found while exploring your
other email today.
Index: ChangeLog
===================================================================
RCS file: /sources/bison/bison/ChangeLog,v
retrieving revision 1.1772
diff -p -u -r1.1772 ChangeLog
--- ChangeLog 20 Feb 2008 00:50:00 -0000 1.1772
+++ ChangeLog 20 Feb 2008 18:17:01 -0000
@@ -1,3 +1,21 @@
+2008-02-20 Joel E. Denny <address@hidden>
+
+ Fix impure push parser compile error reported by Bob Rossi at
+ <http://lists.gnu.org/archive/html/help-bison/2008-02/msg00023.html>.
+ * data/yacc.c: Clean up whitespace in the output a little.
+ (yypstate_allocated): Define for impure push parsers regardless of
+ whether the pull interface is also requested.
+ * tests/push.at (Push Parsing: Multiple impure instances): Extend to
+ check impure push parsers without the pull interface.
+
+ * data/yacc.c (yypstate_new): Don't try to invoke yyerror since
+ yyerror takes arguments specified by %parse-param while yypstate_new
+ does not.
+ * doc/bison.texinfo (Parser Create Function): Document that
+ yypstate_new returns 0 for multiple impure parser instances.
+ * tests/push.at (Push Parsing: Multiple impure instances): Update
+ expected stderr output.
+
2008-02-19 Joel E. Denny <address@hidden>
* runtime-po/POTFILES.in (push.c): Remove.
Index: data/yacc.c
===================================================================
RCS file: /sources/bison/bison/data/yacc.c,v
retrieving revision 1.172
diff -p -u -r1.172 yacc.c
--- data/yacc.c 17 Feb 2008 19:55:48 -0000 1.172
+++ data/yacc.c 20 Feb 2008 18:17:01 -0000
@@ -1079,26 +1079,25 @@ b4_push_if(
/* Used to determine if this is the first time this instance has
been used. */
int yynew;
- };
+ };]b4_pure_if([], [[
-]b4_pull_if([b4_c_function_def([[yyparse]], [[int]], b4_parse_param)[
+static char yypstate_allocated = 0;]])b4_pull_if([
+
+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 +1119,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;
Index: doc/bison.texinfo
===================================================================
RCS file: /sources/bison/bison/doc/bison.texinfo,v
retrieving revision 1.250
diff -p -u -r1.250 bison.texinfo
--- doc/bison.texinfo 17 Feb 2008 02:47:53 -0000 1.250
+++ doc/bison.texinfo 20 Feb 2008 18:17:05 -0000
@@ -5339,7 +5339,9 @@ This function is available if either the
@deftypefun yypstate *yypstate_new (void)
The fuction will return a valid parser instance if there was memory available
-or NULL if no memory was available.
+or 0 if no memory was available.
+In impure mode, it will also return 0 if a parser instance is currently
+allocated.
@end deftypefun
@node Parser Delete Function
Index: tests/push.at
===================================================================
RCS file: /sources/bison/bison/tests/push.at,v
retrieving revision 1.8
diff -p -u -r1.8 push.at
--- tests/push.at 22 Dec 2007 18:35:03 -0000 1.8
+++ tests/push.at 20 Feb 2008 18:17:05 -0000
@@ -83,6 +83,7 @@ AT_CLEANUP
AT_SETUP([[Push Parsing: Multiple impure instances]])
+m4_pushdef([AT_MULTIPLE_IMPURE_INSTANCES_CHECK], [
AT_DATA_GRAMMAR([[input.y]],
[[
%{
@@ -92,7 +93,7 @@ AT_DATA_GRAMMAR([[input.y]],
int yylex (void);
%}
-%define api.push_pull "both"
+%define api.push_pull "]$1["
%%
@@ -123,11 +124,11 @@ main (void)
ps = yypstate_new ();
assert (ps);
assert (yypstate_new () == NULL);
- assert (yyparse () == 2);
+ ]m4_if([$1], [[both]], [[assert (yyparse () == 2)]])[;
yychar = 0;
assert (yypush_parse (ps) == 0);
assert (yypstate_new () == NULL);
- assert (yyparse () == 2);
+ ]m4_if([$1], [[both]], [[assert (yyparse () == 2)]])[;
yypstate_delete (ps);
}
@@ -137,16 +138,13 @@ main (void)
AT_BISON_CHECK([[-o input.c input.y]])
AT_COMPILE([[input]])
-AT_PARSER_CHECK([[./input]], 0, [],
-[[cannot allocate multiple impure push-parser instances
-cannot allocate multiple impure push-parser instances
-cannot allocate multiple impure push-parser instances
-cannot allocate multiple impure push-parser instances
-cannot allocate multiple impure push-parser instances
-cannot allocate multiple impure push-parser instances
-cannot allocate multiple impure push-parser instances
-cannot allocate multiple impure push-parser instances
-]])
+AT_PARSER_CHECK([[./input]])
+])
+
+AT_MULTIPLE_IMPURE_INSTANCES_CHECK([[both]])
+AT_MULTIPLE_IMPURE_INSTANCES_CHECK([[push]])
+
+m4_popdef([AT_MULTIPLE_IMPURE_INSTANCES_CHECK])
AT_CLEANUP
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: building from CVS,
Joel E. Denny <=