X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/c6b1772473d0a26faa22464df98718d0d0ae2e2e..f6df83b4e80b2a53c08b5dc654e247076a3b9b03:/tests/local.at diff --git a/tests/local.at b/tests/local.at index e24c0acb..b7d75afc 100644 --- a/tests/local.at +++ b/tests/local.at @@ -29,6 +29,20 @@ m4_define([m4_null_if], [], [$2], [$3])]) +# AT_SETUP_STRIP(TITLE) +# --------------------- +# Abbreviate the TITLE to be passed to AT_SETUP. +m4_define([AT_SETUP_STRIP], +[m4_bpatsubsts([$1], + [%\(language\|skeleton\) "?\([^\" ]*\)"?], + [\2], + [%define "?\([-A-Za-z0-9_.]+\)"? \("\([^\" ]+\)"\|\([-A-Za-z0-9_.]+\)\)], + [\1=\3\4], + [%define "?\([-A-Za-z0-9_.]+\)"?], + [\1])dnl +]) + + ## ------------- ## ## Basic tests. ## ## ------------- ## @@ -152,10 +166,6 @@ m4_pushdef([AT_PURE_IF], [m4_bmatch([$3], [%define *api\.pure\|%pure-parser], [m4_bmatch([$3], [%define *api\.pure *"?false"?], [$2], [$1])], [$2])]) -m4_pushdef([AT_PURE_AND_LOC_IF], -[m4_bmatch([$3], [%locations], [AT_PURE_IF($@)], [$2])]) -m4_pushdef([AT_GLR_OR_PARAM_IF], -[m4_bmatch([$3], [%glr-parser\|%parse-param], [$1], [$2])]) m4_pushdef([AT_NAME_PREFIX], [m4_bmatch([$3], [\(%define api\.prefix\|%name-prefix\) ".*"], [m4_bregexp([$3], [\(%define api\.prefix\|%name-prefix\) "\([^""]*\)"], [\2])], @@ -171,14 +181,26 @@ m4_pushdef([AT_API_prefix], [yy])]) m4_pushdef([AT_API_PREFIX], [m4_toupper(AT_API_prefix)]) -# yyerror receives the location if %location & %pure & (%glr or %parse-param). +# yyerror receives the location if %location, and if the parser is pure. For +# historical reasons, with the "yacc.c" skeleton, the location is not passed +# unless an additional "%parse-param" is present, or if the purity is defined +# as "full". m4_pushdef([AT_YYERROR_ARG_LOC_IF], -[AT_GLR_OR_PARAM_IF([AT_PURE_AND_LOC_IF([$1], [$2])], +[AT_LOCATION_IF([AT_PURE_IF([m4_bmatch([$3], + m4_quote(m4_join([\|], + [%define api.pure "?full"?], + [%glr-parser], + [%parse-param], + [%skeleton "?glr.c"?])), + [$1], [$2])], + [$2])], [$2])]) -# yyerror always sees the locations (when activated), except if -# (yacc & pure & !param). FIXME: This is wrong. See the manual. + +# yyerror always sees the locations (when activated) if the parser is impure. +# When the parser is pure, yyerror sees the location if it is received as an +# argument. m4_pushdef([AT_YYERROR_SEES_LOC_IF], -[AT_LOCATION_IF([AT_YACC_IF([AT_PURE_IF([AT_PARAM_IF([$1], [$2])], +[AT_LOCATION_IF([AT_YACC_IF([AT_PURE_IF([AT_YYERROR_ARG_LOC_IF([$1], [$2])], [$1])], [$1])], [$2])]) @@ -254,8 +276,6 @@ m4_popdef([AT_API_prefix]) m4_popdef([AT_TOKEN_PREFIX]) m4_popdef([AT_TOKEN_CTOR_IF]) m4_popdef([AT_NAME_PREFIX]) -m4_popdef([AT_GLR_OR_PARAM_IF]) -m4_popdef([AT_PURE_AND_LOC_IF]) m4_popdef([AT_LOCATION_TYPE_IF]) m4_popdef([AT_LOCATION_IF]) m4_popdef([AT_PARSE_PARAMS]) @@ -360,6 +380,7 @@ static }]dnl ]) +# AT_YYERROR_FORMALS # AT_YYERROR_PROTOTYPE # AT_YYERROR_DECLARE_EXTERN # AT_YYERROR_DECLARE @@ -368,7 +389,7 @@ static # Must be called inside a AT_BISON_OPTION_PUSHDEFS/POPDEFS pair. m4_define([AT_YYERROR_FORMALS], [m4_case(AT_LANG, -[c], [AT_YYERROR_ARG_LOC_IF([AT_YYLTYPE *llocp, ])AT_PARSE_PARAMS [const char *msg]])[]dnl +[c], [AT_YYERROR_ARG_LOC_IF([AT_YYLTYPE const * const llocp, ])AT_PARSE_PARAMS [const char *msg]])[]dnl ]) m4_define([AT_YYERROR_PROTOTYPE], @@ -457,7 +478,7 @@ AT_BISON_CHECK_NO_XML($@)]) # -------------------------------------------------- # Low-level macro to run bison once. m4_define([AT_BISON_CHECK_], -[AT_CHECK(AT_QUELL_VALGRIND[[ bison ]]$@)]) +[AT_CHECK(AT_QUELL_VALGRIND[[ bison -fno-caret ]]$@)]) # AT_BISON_CHECK_WARNINGS(BISON_ARGS, [OTHER_AT_CHECK_ARGS]) @@ -508,7 +529,7 @@ fi]dnl # when a tortured grammar's XML is known to be too large for xsltproc to # handle. m4_define([AT_BISON_CHECK_NO_XML], -[AT_CHECK(m4_null_if([$2], [], [AT_QUELL_VALGRIND ])[[bison ]]$@) +[AT_CHECK(m4_null_if([$2], [], [AT_QUELL_VALGRIND ])[[bison -fno-caret ]]$@) AT_BISON_CHECK_WARNINGS($@)]) # AT_BISON_CHECK_XML(BISON_ARGS, [OTHER_AT_CHECK_ARGS]) @@ -574,9 +595,7 @@ m4_define([AT_QUELL_VALGRIND], # otherwise pass "-c"; this is a hack. The default SOURCES is OUTPUT # with trailing .o removed, and ".c" appended. m4_define([AT_COMPILE], -[AT_CHECK([case $POSIXLY_CORRECT_IS_EXPORTED:$C_COMPILER_POSIXLY_CORRECT in - true:false) echo 'cannot compile properly with POSIXLY_CORRECT' && exit 77;; -esac]) +[AT_CHECK([$BISON_C_WORKS], 0, ignore, ignore) AT_CHECK(m4_join([ ], [$CC $CFLAGS $CPPFLAGS], [m4_bmatch([$1], [[.]], [-c], [$LDFLAGS])], @@ -882,12 +901,20 @@ m4_popdef([AT_COND_CASE])]) + ## ----------------------- ## ## Launch the test suite. ## ## ----------------------- ## AT_INIT +# AT_SETUP([TITLE]) +# ----------------- +# Redefine AT_SETUP to be more concise. Must be done after AT_INIT. +m4_copy_force([AT_SETUP], [B4_SETUP]) +m4_define([AT_SETUP], +[B4_SETUP(m4_expand([AT_SETUP_STRIP([[$1]])]))]) + # Cannot assign CC and CFLAGS here, since atlocal is loaded after # options are processed, so we don't know the value of CXX and # CXXFLAGS yet.