]> git.saurik.com Git - bison.git/commitdiff
%printer: support both yyo and yyoutput.
authorAkim Demaille <akim@lrde.epita.fr>
Mon, 16 Apr 2012 15:03:19 +0000 (17:03 +0200)
committerAkim Demaille <akim@lrde.epita.fr>
Mon, 16 Apr 2012 15:04:14 +0000 (17:04 +0200)
lalr1.cc used to support yyo, but not yyoutput.  Support both,
but document only yyoutput (at least until there is some consensus
on this).

* data/c.m4 (yy_symbol_value_print): Also support yyo.
* data/glr.cc  (yy_symbol_value_print_): Support both yyo and yyoutput.
* data/lalr1.cc: Also support yyoutput.
* doc/bison.texinfo: Explicitly use yyoutput in the examples.
* examples/mfcalc/mfcalc.test: Test the -p option.

data/c.m4
data/glr.cc
data/lalr1.cc
doc/bison.texinfo
examples/mfcalc/mfcalc.test

index 14db807b2b72e84463d742e5610f9ea9f757fdf1..e140ade85b340baf834ae9b5f8bcc5b220d461e1 100644 (file)
--- a/data/c.m4
+++ b/data/c.m4
@@ -495,7 +495,8 @@ m4_define_default([b4_yy_symbol_print_generate],
 b4_locations_if([, [[YYLTYPE const * const yylocationp], [yylocationp]]])[]dnl
 m4_ifset([b4_parse_param], [, b4_parse_param]))[
 {
-]b4_parse_param_use([yyoutput], [yylocationp])dnl
+  FILE *yyo = yyoutput;
+]b4_parse_param_use([yyo], [yylocationp])dnl
 [  if (!yyvaluep)
     return;]
 dnl glr.c does not feature yytoknum.
index 67258eea1cc983885e451188f67c944ef4b4e997..59533a25bb975774b44a2480f3826bedcc8a85c0 100644 (file)
@@ -148,9 +148,11 @@ m4_pushdef([b4_parse_param], m4_defn([b4_parse_param_orig]))dnl
   ]b4_parser_class_name[::yy_symbol_value_print_ (int yytype,
                            const semantic_type* yyvaluep, const location_type* yylocationp)
   {
-    /* Pacify ``unused variable'' warnings.  */
-    YYUSE (yyvaluep);
     YYUSE (yylocationp);
+    YYUSE (yyvaluep);
+    std::ostream& yyoutput = debug_stream ();
+    std::ostream& yyo = yyoutput;
+    YYUSE (yyo);
     switch (yytype)
       {
 ]b4_symbol_foreach([b4_symbol_printer])dnl
index 99b8e9e8bb6ca1a23fbf09fa4c890dc0fd35541e..ef5e1cee4a871030d8ef7e933bad51559b247e4b 100644 (file)
@@ -549,11 +549,11 @@ b4_percent_code_get[]dnl
   ]b4_parser_class_name[::yy_destroy_ (const char* yymsg,
                                        symbol_base_type<Exact>& yysym) const
   {
-    int yytype = yysym.type_get ();
     if (yymsg)
       YY_SYMBOL_PRINT (yymsg, yysym);
 
     // User destructor.
+    int yytype = yysym.type_get ();
     switch (yytype)
       {
 ]b4_symbol_foreach([b4_symbol_destructor])dnl
@@ -571,6 +571,8 @@ b4_percent_code_get[]dnl
   ]b4_parser_class_name[::yy_print_ (std::ostream& yyo,
                                      const symbol_base_type<Exact>& yysym) const
   {
+    std::ostream& yyoutput = yyo;
+    YYUSE (yyoutput);
     int yytype = yysym.type_get ();
     yyo << (yytype < yyntokens_ ? "token" : "nterm")
         << ' ' << yytname_[yytype] << " ("]b4_locations_if([
index b0236af51d0c5642530b8e93d5de3783b92a2cf9..434b6e67096a33bf5aa68f809d2ba7d8aa64a5a9 100644 (file)
@@ -3155,14 +3155,14 @@ type:
 %code requires @{ #include "type1.h" @}
 %union @{ type1 field1; @}
 %destructor @{ type1_free ($$); @} <field1>
-%printer @{ type1_print ($$); @} <field1>
+%printer @{ type1_print (yyoutput, $$); @} <field1>
 @end group
 
 @group
 %code requires @{ #include "type2.h" @}
 %union @{ type2 field2; @}
 %destructor @{ type2_free ($$); @} <field2>
-%printer @{ type2_print ($$); @} <field2>
+%printer @{ type2_print (yyoutput, $$); @} <field2>
 @end group
 @end example
 
@@ -10244,7 +10244,7 @@ regular destructors.  All the values are printed using their
 @c FIXME: Document %printer, and mention that it takes a braced-code operand.
 @comment file: calc++-parser.yy
 @example
-%printer @{ debug_stream () << $$; @} <*>;
+%printer @{ yyoutput << $$; @} <*>;
 @end example
 
 @noindent
index f728f01d345bc5f6173789134cf61772312b7608..24c4b89c98c28a75b655740c11877659ca9e0a4e 100755 (executable)
@@ -24,3 +24,4 @@ cat >input <<EOF
 (1+2) * 3
 EOF
 run 0 9
+run 0 9 -p