From 8bc45673d52980ff679ce01c3d557adad31a596b Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Thu, 31 Dec 2020 07:52:43 +0100 Subject: [PATCH] %merge: test support for api.value.type=union * tests/glr-regression.at: here. --- tests/README.md | 26 ++++++++++++++++++++++++++ tests/glr-regression.at | 36 +++++++++++++++++++++++------------- tests/local.mk | 4 +++- 3 files changed, 52 insertions(+), 14 deletions(-) create mode 100644 tests/README.md diff --git a/tests/README.md b/tests/README.md new file mode 100644 index 00000000..314dc606 --- /dev/null +++ b/tests/README.md @@ -0,0 +1,26 @@ +# AT_BISON_OPTION_PUSHDEFS/AT_BISON_OPTION_POPDEFS + +These two macros must be given the (main) directives so that they +define a number of other macros to: +- what the language is (so what compiler tool chain to use, what + definition of yylex/yyerror, etc.) +- what skeleton is used + +# Keywords +- action +- api.value.type +- c++ +- cex: counterexamples. +- d: d language +- deprec: deprecated features. +- diagnostics +- glr +- graph +- java +- lac +- %merge +- multistart +- push +- report +- %union +- variant diff --git a/tests/glr-regression.at b/tests/glr-regression.at index 49451daf..50fd2f9a 100644 --- a/tests/glr-regression.at +++ b/tests/glr-regression.at @@ -46,6 +46,7 @@ m4_pushdef([AT_TEST], [AT_SETUP([Badly Collapsed GLR States: $1]) AT_BISON_OPTION_PUSHDEFS([%glr-parser $1]) +AT_KEYWORDS([%merge]) AT_DATA_GRAMMAR([glr-regr1.y], [[/* Regression Test: Improper state compression */ @@ -291,6 +292,7 @@ m4_popdef([AT_TEST]) m4_pushdef([AT_TEST], [AT_SETUP([Improper merging of GLR delayed action sets: $1]) +AT_KEYWORDS([%merge]) AT_BISON_OPTION_PUSHDEFS([%glr-parser $1]) @@ -425,6 +427,7 @@ m4_popdef([AT_TEST]) m4_pushdef([AT_TEST], [AT_SETUP([Duplicate representation of merged trees: $1]) +AT_KEYWORDS([%merge]) AT_BISON_OPTION_PUSHDEFS([%glr-parser $1]) @@ -432,8 +435,7 @@ AT_DATA_GRAMMAR([glr-regr4.y], [[ %define parse.assert %define parse.trace -%union { char *ptr; } -%type S A A1 A2 B +%type <]AT_VALUE_UNION_IF([char*], [ptr])[> S A A1 A2 B %glr-parser %expect-rr 2 ]$1[ @@ -452,13 +454,11 @@ AT_DATA_GRAMMAR([glr-regr4.y], tree: S { printf ("%s\n", $][1); } ; -S: - A %merge { $$ = make_value ("S", $][1); } +S : A %merge { $$ = make_value ("S", $][1); } | B %merge { $$ = make_value ("S", $][1); } ; -A: - A1 %merge { $$ = make_value ("A", $][1); } +A : A1 %merge { $$ = make_value ("A", $][1); } | A2 %merge { $$ = make_value ("A", $][1); } ; @@ -496,11 +496,14 @@ make_value (char const *parent, char const *child) static char * merge (]AT_YYSTYPE[ s1, ]AT_YYSTYPE[ s2) { - char const format[] = "merge{ %s and %s }"; - char *value = *ptrs_next++ = + char const format[] = "merge{ %s and %s }";]AT_VALUE_UNION_IF([[ + char *res = *ptrs_next++ = + YY_CAST (char *, malloc (strlen (s1.S) + strlen (s2.S) + sizeof format)); + sprintf (res, format, s1.S, s2.S);]], [[ + char *res = *ptrs_next++ = YY_CAST (char *, malloc (strlen (s1.ptr) + strlen (s2.ptr) + sizeof format)); - sprintf (value, format, s1.ptr, s2.ptr); - return value; + sprintf (res, format, s1.ptr, s2.ptr);]])[ + return res; } ]]) @@ -514,9 +517,13 @@ AT_BISON_OPTION_POPDEFS AT_CLEANUP ]) -AT_TEST([%skeleton "glr.c"]) -AT_TEST([%skeleton "glr.cc"]) -AT_TEST([%skeleton "glr2.cc"]) +AT_TEST([%union { char *ptr; } %skeleton "glr.c"]) +AT_TEST([%union { char *ptr; } %skeleton "glr.cc"]) +AT_TEST([%union { char *ptr; } %skeleton "glr2.cc"]) + +AT_TEST([%define api.value.type union %skeleton "glr.c"]) +AT_TEST([%define api.value.type union %skeleton "glr.cc"]) +AT_TEST([%define api.value.type union %skeleton "glr2.cc"]) m4_popdef([AT_TEST]) @@ -1106,6 +1113,7 @@ m4_popdef([AT_TEST]) m4_pushdef([AT_TEST], [AT_SETUP([Leaked semantic values if user action cuts parse: $1]) +AT_KEYWORDS([%merge]) AT_BISON_OPTION_PUSHDEFS([%glr-parser $1]) AT_DATA_GRAMMAR([glr-regr12.y], @@ -1386,6 +1394,7 @@ m4_popdef([AT_TEST]) m4_pushdef([AT_TEST], [AT_SETUP([Incorrect lookahead during nondeterministic GLR: $1]) +AT_KEYWORDS([%merge]) AT_BISON_OPTION_PUSHDEFS([%glr-parser %locations $1]) @@ -1907,6 +1916,7 @@ m4_popdef([AT_TEST]) m4_pushdef([AT_TEST], [AT_SETUP([Missed %merge type warnings when LHS type is declared later: $1]) +AT_KEYWORDS([%merge]) AT_BISON_OPTION_PUSHDEFS([%glr-parser $1]) AT_DATA_GRAMMAR([glr-regr18.y], diff --git a/tests/local.mk b/tests/local.mk index 72328832..df3bbcad 100644 --- a/tests/local.mk +++ b/tests/local.mk @@ -15,7 +15,9 @@ ## You should have received a copy of the GNU General Public License ## along with this program. If not, see . -EXTRA_DIST += %D%/linear $(TESTSUITE_AT) %D%/testsuite %D%/testsuite.h +EXTRA_DIST += \ + %D%/README.md %D%/linear \ + $(TESTSUITE_AT) %D%/testsuite %D%/testsuite.h DISTCLEANFILES += %D%/atconfig $(check_SCRIPTS) MAINTAINERCLEANFILES += $(TESTSUITE)