bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

glr2.cc: also run all the calculator tests


From: Akim Demaille
Subject: glr2.cc: also run all the calculator tests
Date: Sun, 20 Sep 2020 17:52:57 +0200

Having looked at calc.at for Adela's report, I noticed that glr2.cc
does not run all the calc tests.  They uncovered a few issues.  The
good news is: fixing them simplifies the skeleton even further.

Cheers!

commit d58de95569cdde9cb677494ca087eb653c55b176
Author: Akim Demaille <akim.demaille@gmail.com>
Date:   Sun Sep 20 17:20:50 2020 +0200

    glr2.cc: also run all the calculator tests
    
    This revealed issues with yy_symbol_print and yy_reduce_print.
    
    * tests/calc.at (AT_CHECK_CALC_GLR_CC): Also check glr2.cc.
    * data/skeletons/glr2.cc: Don't pass the user arguments to
    yy_symbol_print and yy_reduce_print, since they have it in the parser
    object.

diff --git a/data/skeletons/glr2.cc b/data/skeletons/glr2.cc
index 01576fa6..2a7d2d6c 100644
--- a/data/skeletons/glr2.cc
+++ b/data/skeletons/glr2.cc
@@ -715,7 +715,7 @@ enum YYRESULTTAG { yyok, yyaccept, yyabort, yyerr };
     if (yydebug)                                                        \
       {                                                                 \
         std::cerr << Title << ' ';                                      \
-        yyparser.yy_symbol_print_ (Type, Value]b4_locuser_args([Location])[);\
+        yyparser.yy_symbol_print_ (Type, Value]b4_locations_if([, 
Location])[); \
         std::cerr << '\n';                                              \
       }                                                                 \
   } while (0)
@@ -1634,7 +1634,7 @@ class state_stack {
 
   inline void
   yy_reduce_print (bool yynormal, glr_stack_item* yyvsp, state_set_index yyk,
-                   rule_num yyrule, ]b4_namespace_ref[::]b4_parser_class[& 
yyparser]b4_user_formals[)
+                   rule_num yyrule, ]b4_namespace_ref[::]b4_parser_class[& 
yyparser)
   {
     int yynrhs = yyrhsLength (yyrule);]b4_locations_if([
     int yylow = 1;])[
@@ -1648,9 +1648,8 @@ class state_stack {
         std::cerr << "   $" << yyi + 1 << " = ";
         yyparser.yy_symbol_print_
           (static_cast<yysymbol_kind_t>(yystos[yyvsp[yyi - yynrhs + 
1].getState().yylrState]),
-           &yyvsp[yyi - yynrhs + 1].getState().semanticVal()]b4_locations_if([,
-           &]b4_rhs_location(yynrhs, yyi + 1))[]dnl
-           b4_user_args[);
+           &yyvsp[yyi - yynrhs + 
1].getState().semanticVal()]b4_locations_if([[,
+           &]b4_rhs_location(yynrhs, yyi + 1)])[);
         if (!yyvsp[yyi - yynrhs + 1].getState().yyresolved)
           std::cerr <<  " (unresolved)";
         std::cerr <<  '\n';
@@ -1816,13 +1815,12 @@ class glr_stack
 {
 public:
 
-  glr_stack(size_t yysize, ]b4_namespace_ref[::]b4_parser_class[& 
yyparser_yyarg]m4_ifset([b4_parse_param], [, b4_parse_param_decl])[)
-    : yyerrState(0)
-    , yystateStack(yysize)
-    , yyerrcnt(0)
-    , yyrawchar(0)
-    , yyparser(yyparser_yyarg)]m4_ifset([b4_parse_param], [
-    , b4_parse_param_cons])[
+  glr_stack (size_t yysize, ]b4_namespace_ref[::]b4_parser_class[& 
yyparser_yyarg]m4_ifset([b4_parse_param], [, b4_parse_param_decl])[)
+    : yyerrState (0)
+    , yystateStack (yysize)
+    , yyerrcnt (0)
+    , yyrawchar (0)
+    , yyparser (yyparser_yyarg)]m4_ifset([b4_parse_param], 
[,b4_parse_param_cons])[
   {}
 
   ~glr_stack ()
@@ -2274,7 +2272,7 @@ public:
         /* Standard special case: single stack.  */
         YYASSERT (yyk.get() == 0);
         glr_stack_item* yyrhs = yystateStack.firstTop()->asItem();
-        YY_REDUCE_PRINT ((true, yyrhs, yyk, yyrule, yyparser]b4_user_args[));
+        YY_REDUCE_PRINT ((true, yyrhs, yyk, yyrule, yyparser));
         YYRESULTTAG res =  yyuserAction (yyrule, yynrhs, yyrhs,
                              yyvalp]b4_locations_if([, yylocp])[);
         yystateStack.pop_back(static_cast<size_t>(yynrhs));
@@ -2296,7 +2294,7 @@ public:
           }
         yystateStack.yyupdateSplit (*yys);
         yystateStack.setTopAt(yyk, yys);
-        YY_REDUCE_PRINT ((false, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1, yyk, 
yyrule, yyparser]b4_user_args[));
+        YY_REDUCE_PRINT ((false, yyrhsVals + YYMAXRHS + YYMAXLEFT - 1, yyk, 
yyrule, yyparser));
         return yyuserAction (yyrule, yynrhs, yyrhsVals + YYMAXRHS + YYMAXLEFT 
- 1,
                              yyvalp]b4_locations_if([, yylocp])[);
       }
diff --git a/tests/calc.at b/tests/calc.at
index 7da61af4..f1033517 100644
--- a/tests/calc.at
+++ b/tests/calc.at
@@ -1239,7 +1239,9 @@ AT_CHECK_CALC([%skeleton "glr.cc"])
 AT_CHECK_CALC([%skeleton "glr2.cc"])
 
 m4_define([AT_CHECK_CALC_GLR_CC],
-[AT_CHECK_CALC([%language "C++" %glr-parser] $@)])
+[AT_CHECK_CALC([%language "C++" %glr-parser] $@) # glr.cc
+AT_CHECK_CALC([%skeleton "glr2.cc"] $@)
+])
 
 AT_CHECK_CALC_GLR_CC([])
 AT_CHECK_CALC_GLR_CC([%locations])




reply via email to

[Prev in Thread] Current Thread [Next in Thread]