]> git.saurik.com Git - bison.git/commitdiff
When yydebug, report semantic and location values for reductions.
authorAkim Demaille <akim@epita.fr>
Fri, 11 Nov 2005 10:36:24 +0000 (10:36 +0000)
committerAkim Demaille <akim@epita.fr>
Fri, 11 Nov 2005 10:36:24 +0000 (10:36 +0000)
* data/glr.c (yy_reduce_print): Report the semantic values and the
locations.
(YY_REDUCE_PRINT): Adjust.
(yyglrReduce): Use them.
(b4_rhs_value, b4_rhs_location): Remove m4_eval invocations.
* data/c.m4 (b4_yysymprint_generate): Specify the const arguments.
* tests/calc.at (_AT_CHECK_CALC_ERROR): Remove the reduction
traces.

ChangeLog
data/c.m4
data/glr.c
tests/calc.at

index c7d71a27856190fa0bd04fc9ff8a24ccaf588ae2..56c3e997e7d80d32165e0587c0efd74a2184f1be 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2005-11-11  Akim  <akim@epita.fr>
+
+       When yydebug, report semantic and location values for reductions.
+       * data/glr.c (yy_reduce_print): Report the semantic values and the
+       locations.
+       (YY_REDUCE_PRINT): Adjust.
+       (yyglrReduce): Use them.
+       (b4_rhs_value, b4_rhs_location): Remove m4_eval invocations.
+       * data/c.m4 (b4_yysymprint_generate): Specify the const arguments.
+       * tests/calc.at (_AT_CHECK_CALC_ERROR): Remove the reduction
+       traces.
+
 2005-11-10  Akim Demaille  <akim@epita.fr>
 
        * data/glr.c (yynewGLRStackItem, YY_RESERVE_GLRSTACK): New.
index 8ee6275f7126e81e95a1a556d799d05c1094d17e..b0221e8ed0c7af9475545b6c9ffff44b68e11f01 100644 (file)
--- a/data/c.m4
+++ b/data/c.m4
@@ -413,10 +413,10 @@ m4_define_default([b4_yysymprint_generate],
 
 ]$1([yysymprint],
     [static void],
-    [[FILE *yyoutput],       [yyoutput]],
-    [[int yytype],           [yytype]],
-    [[YYSTYPE *yyvaluep],    [yyvaluep]][]dnl
-b4_location_if(            [, [[YYLTYPE *yylocationp], [yylocationp]]])[]dnl
+               [[FILE *yyoutput],                       [yyoutput]],
+               [[int yytype],                           [yytype]],
+               [[const YYSTYPE * const yyvaluep],       [yyvaluep]][]dnl
+b4_location_if([, [[const YYLTYPE * const yylocationp], [yylocationp]]])[]dnl
 m4_ifset([b4_parse_param], [, b4_parse_param]))[
 {
   YYUSE (yyvaluep);
index 11f112926d0add6d08868aef16976a4f9d655f73..5fdff28ad9e021c4c31d0190e23b9f9842eac901 100644 (file)
@@ -113,7 +113,7 @@ m4_define([b4_lhs_value],
 # Expansion of $<TYPE>NUM, where the current rule has RULE-LENGTH
 # symbols on RHS.
 m4_define([b4_rhs_value],
-[(((yyGLRStackItem const *)yyvsp)@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3]))])
+[(((yyGLRStackItem const *)yyvsp)@{YYFILL ($2 - $1)@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3]))])
 
 
 
@@ -133,7 +133,7 @@ m4_define([b4_lhs_location],
 # Expansion of @NUM, where the current rule has RULE-LENGTH symbols
 # on RHS.
 m4_define([b4_rhs_location],
-[(((yyGLRStackItem const *)yyvsp)@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yyloc)])
+[(((yyGLRStackItem const *)yyvsp)@{YYFILL ($2 - $1)@}.yystate.yyloc)])
 
 # We do want M4 expansion after # for CPP macros.
 m4_changecom()
@@ -956,9 +956,9 @@ yylhsNonterm (yyRuleNum yyrule)
 }
 
 #define yyis_pact_ninf(yystate) \
-  ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), 1,
-        0,
-        ((yystate) == YYPACT_NINF))[
+  ]m4_if(m4_eval(b4_pact_ninf < b4_pact_min), [1],
+        [0],
+        [((yystate) == YYPACT_NINF)])[
 
 /** True iff LR state STATE has only a default reduction (regardless
  *  of token). */
@@ -976,9 +976,9 @@ yydefaultAction (yyStateNum yystate)
 }
 
 #define yyis_table_ninf(yytable_value) \
-  ]m4_if(m4_eval(b4_table_ninf < b4_table_min), 1,
-        0,
-        ((yytable_value) == YYTABLE_NINF))[
+  ]m4_if(m4_eval(b4_table_ninf < b4_table_min), [1],
+        [0],
+        [((yytable_value) == YYTABLE_NINF)])[
 
 /** Set *YYACTION to the action to take in YYSTATE on seeing YYTOKEN.
  *  Result R means
@@ -1328,12 +1328,12 @@ yydoAction (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule,
 }
 
 #if !YYDEBUG
-# define YY_REDUCE_PRINT(K, Rule)
+# define YY_REDUCE_PRINT(Args)
 #else
-# define YY_REDUCE_PRINT(K, Rule)      \
+# define YY_REDUCE_PRINT(Args)         \
 do {                                   \
   if (yydebug)                         \
-    yy_reduce_print (K, Rule);         \
+    yy_reduce_print Args;              \
 } while (/*CONSTCOND*/ 0)
 
 /*----------------------------------------------------------.
@@ -1341,16 +1341,29 @@ do {                                    \
 `----------------------------------------------------------*/
 
 static inline void
-yy_reduce_print (size_t yyk, yyRuleNum yyrule)
+yy_reduce_print (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule,
+                YYSTYPE* yyvalp, YYLTYPE* yylocp]b4_user_formals[)
 {
+  int yynrhs = yyrhsLength (yyrule);
+  yybool yynormal __attribute__ ((__unused__)) =
+    (yystack->yysplitPoint == NULL);
+  yyGLRStackItem* yyvsp = (yyGLRStackItem*) yystack->yytops.yystates[yyk];
+  int yylow = 1;
   int yyi;
-  YYFPRINTF (stderr, "Reducing stack %lu by rule %d (line %lu)",
+  YYFPRINTF (stderr, "Reducing stack %lu by rule %d (line %lu):\n",
             (unsigned long int) yyk, yyrule - 1,
             (unsigned long int) yyrline[yyrule]);
   /* Print the symbols being reduced, and their result.  */
-  for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
-    YYFPRINTF (stderr, "%s ", yytokenName (yyrhs[yyi]));
-  YYFPRINTF (stderr, "-> %s\n", yytokenName (yyr1[yyrule]));
+  //for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi);
+      yysymprint (stderr, yyrhs[yyprhs[yyrule] + yyi],
+                  &]b4_rhs_value(yynrhs, yyi)[
+                  ]b4_location_if([, &]b4_rhs_location(yynrhs, yyi))[]dnl
+                 b4_user_args[);
+      fprintf (stderr, "\n");
+    }
 }
 #endif
 
@@ -1376,8 +1389,9 @@ yyglrReduce (yyGLRStack* yystack, size_t yyk, yyRuleNum yyrule,
       YYSTYPE yysval;
       YYLTYPE yyloc;
 
-      YY_REDUCE_PRINT (yyk, yyrule);
+      YY_REDUCE_PRINT ((yystack, yyk, yyrule, &yysval, &yyloc]b4_user_args[));
       YYCHK (yydoAction (yystack, yyk, yyrule, &yysval, &yyloc]b4_user_args[));
+      YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyrule], &yysval, &yyloc);
       yyglrShift (yystack, yyk,
                  yyLRgotoState (yystack->yytops.yystates[yyk]->yylrState,
                                 yylhsNonterm (yyrule)),
index 57a2a9c46d51a0c1b1c26e3622f39df9ddddaa2b..ca7cc95d1962d40e32fefe4b40523a625a9a30fe 100644 (file)
@@ -409,6 +409,7 @@ sed '/^Starting/d
 /^Error:/d
 /^Next/d
 /^Discarding/d
+/ \$[[0-9$]]* = /d
 /^yydestructor:/d' stderr >at-stderr
 mv at-stderr stderr
 # 2. Create the reference error message.