[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])
- glr2.cc: also run all the calculator tests,
Akim Demaille <=