From f49598a1e1e957926a363a747b99f55fec3470de Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 12 Jul 2019 08:00:47 +0200 Subject: [PATCH] lalr1.cc: check LAC support * tests/conflicts.at, tests/input.at, tests/regression.at: here. --- tests/conflicts.at | 16 +++++++++++++++- tests/input.at | 11 +++++++++++ tests/regression.at | 2 ++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/tests/conflicts.at b/tests/conflicts.at index 444e2c99..e857bf20 100644 --- a/tests/conflicts.at +++ b/tests/conflicts.at @@ -541,7 +541,7 @@ AT_CONSISTENT_ERRORS_CHECK([[%define lr.type canonical-lr]], [AT_PREVIOUS_STATE_INPUT], [[$end]], [[ab]]) -# Only LAC gets it right. +# Only LAC gets it right. In C. AT_CONSISTENT_ERRORS_CHECK([[%define lr.type canonical-lr %define parse.lac full]], [AT_PREVIOUS_STATE_GRAMMAR], @@ -553,6 +553,20 @@ AT_CONSISTENT_ERRORS_CHECK([[%define lr.type ielr [AT_PREVIOUS_STATE_INPUT], [[$end]], [[b]]) +# Only LAC gets it right. In C++. +AT_CONSISTENT_ERRORS_CHECK([[%language "c++" + %define lr.type canonical-lr + %define parse.lac full]], + [AT_PREVIOUS_STATE_GRAMMAR], + [AT_PREVIOUS_STATE_INPUT], + [[$end]], [[b]]) +AT_CONSISTENT_ERRORS_CHECK([[%language "c++" + %define lr.type ielr + %define parse.lac full]], + [AT_PREVIOUS_STATE_GRAMMAR], + [AT_PREVIOUS_STATE_INPUT], + [[$end]], [[b]]) + m4_popdef([AT_PREVIOUS_STATE_GRAMMAR]) m4_popdef([AT_PREVIOUS_STATE_INPUT]) diff --git a/tests/input.at b/tests/input.at index 0d3a5917..2cc829f5 100644 --- a/tests/input.at +++ b/tests/input.at @@ -2247,6 +2247,7 @@ AT_CLEANUP ## ------------------------- ## AT_SETUP([[LAC: Errors for %define]]) +AT_KEYWORDS([lac]) AT_DATA([[input.y]], [[%% @@ -2263,6 +2264,16 @@ AT_BISON_CHECK([[-Dparse.lac.memory-trace=full input.y]], [[:3: error: %define variable 'parse.lac.memory-trace' is not used ]]) +# parse.lac.* options are useless in C++ even if LAC isn't actually activated. +AT_BISON_CHECK([[-Dparse.lac.es-capacity-initial=1 -L C++ -Dparse.lac input.y]], + [[1]], [], +[[:3: error: %define variable 'parse.lac.es-capacity-initial' is not used +]]) +AT_BISON_CHECK([[-Dparse.lac.memory-trace=full -L C++ -Dparse.lac input.y]], + [[1]], [], +[[:3: error: %define variable 'parse.lac.memory-trace' is not used +]]) + AT_CLEANUP diff --git a/tests/regression.at b/tests/regression.at index b593bae6..507bcbb4 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -1375,6 +1375,8 @@ AT_LAC_CHECK([[%define api.push-pull pull %define api.pure]]) AT_LAC_CHECK([[%define api.push-pull both]]) AT_LAC_CHECK([[%define api.push-pull both %define api.pure]]) +AT_LAC_CHECK([[%skeleton "lalr1.cc"]]) + m4_popdef([AT_LAC_CHECK]) AT_CLEANUP