X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/eb0e86ac80861525ab5d0c0dcb585290e1bd3f03..67411a88a0668401f9583526668e3930762c55f0:/tests/input.at diff --git a/tests/input.at b/tests/input.at index 322bbe87..4ddf955a 100644 --- a/tests/input.at +++ b/tests/input.at @@ -336,104 +336,67 @@ AT_CLEANUP AT_SETUP([Default %printer and %destructor redeclared]) -AT_DATA([[input.y]], -[[%destructor { destroy ($$); } <*> <*> -%printer { print ($$); } <*> <*> - -%destructor { destroy ($$); } <*> -%printer { print ($$); } <*> - -%destructor { destroy ($$); } <> <> -%printer { print ($$); } <> <> +# AT_TEST([*]) +# ------------ +m4_pushdef([AT_TEST], +[AT_DATA([[input.y]], +[[%destructor { destroy ($$); } <$1> <$1> +%printer { print ($$); } <$1> <$1> -%destructor { destroy ($$); } <> -%printer { print ($$); } <> +%destructor { destroy ($$); } <$1> +%printer { print ($$); } <$1> %% start: %empty; -%destructor { destroy ($$); } <*>; -%printer { print ($$); } <*>; - -%destructor { destroy ($$); } <>; -%printer { print ($$); } <>; +%destructor { destroy ($$); } <$1>; +%printer { print ($$); } <$1>; ]]) AT_BISON_CHECK([-fcaret input.y], [1], [], -[[input.y:1.13-29: error: %destructor redeclaration for <*> - %destructor { destroy ($$); } <*> <*> - ^^^^^^^^^^^^^^^^^ -input.y:1.13-29: previous declaration - %destructor { destroy ($$); } <*> <*> - ^^^^^^^^^^^^^^^^^ -input.y:2.10-24: error: %printer redeclaration for <*> - %printer { print ($$); } <*> <*> - ^^^^^^^^^^^^^^^ -input.y:2.10-24: previous declaration - %printer { print ($$); } <*> <*> - ^^^^^^^^^^^^^^^ -input.y:4.13-29: error: %destructor redeclaration for <*> - %destructor { destroy ($$); } <*> - ^^^^^^^^^^^^^^^^^ -input.y:1.13-29: previous declaration - %destructor { destroy ($$); } <*> <*> - ^^^^^^^^^^^^^^^^^ -input.y:5.10-24: error: %printer redeclaration for <*> - %printer { print ($$); } <*> - ^^^^^^^^^^^^^^^ -input.y:2.10-24: previous declaration - %printer { print ($$); } <*> <*> - ^^^^^^^^^^^^^^^ -input.y:7.13-29: error: %destructor redeclaration for <> +[[input.y:1.13-29: error: %destructor redeclaration for <> %destructor { destroy ($$); } <> <> ^^^^^^^^^^^^^^^^^ -input.y:7.13-29: previous declaration +input.y:1.13-29: previous declaration %destructor { destroy ($$); } <> <> ^^^^^^^^^^^^^^^^^ -input.y:8.10-24: error: %printer redeclaration for <> +input.y:2.10-24: error: %printer redeclaration for <> %printer { print ($$); } <> <> ^^^^^^^^^^^^^^^ -input.y:8.10-24: previous declaration +input.y:2.10-24: previous declaration %printer { print ($$); } <> <> ^^^^^^^^^^^^^^^ -input.y:10.13-29: error: %destructor redeclaration for <> +input.y:4.13-29: error: %destructor redeclaration for <> %destructor { destroy ($$); } <> ^^^^^^^^^^^^^^^^^ -input.y:7.13-29: previous declaration +input.y:1.13-29: previous declaration %destructor { destroy ($$); } <> <> ^^^^^^^^^^^^^^^^^ -input.y:11.10-24: error: %printer redeclaration for <> +input.y:5.10-24: error: %printer redeclaration for <> %printer { print ($$); } <> ^^^^^^^^^^^^^^^ -input.y:8.10-24: previous declaration +input.y:2.10-24: previous declaration %printer { print ($$); } <> <> ^^^^^^^^^^^^^^^ -input.y:17.13-29: error: %destructor redeclaration for <*> - %destructor { destroy ($$); } <*>; - ^^^^^^^^^^^^^^^^^ -input.y:4.13-29: previous declaration - %destructor { destroy ($$); } <*> - ^^^^^^^^^^^^^^^^^ -input.y:18.10-24: error: %printer redeclaration for <*> - %printer { print ($$); } <*>; - ^^^^^^^^^^^^^^^ -input.y:5.10-24: previous declaration - %printer { print ($$); } <*> - ^^^^^^^^^^^^^^^ -input.y:20.13-29: error: %destructor redeclaration for <> +input.y:11.13-29: error: %destructor redeclaration for <> %destructor { destroy ($$); } <>; ^^^^^^^^^^^^^^^^^ -input.y:10.13-29: previous declaration - %destructor { destroy ($$); } <> +input.y:1.13-29: previous declaration + %destructor { destroy ($$); } <> <> ^^^^^^^^^^^^^^^^^ -input.y:21.10-24: error: %printer redeclaration for <> +input.y:12.10-24: error: %printer redeclaration for <> %printer { print ($$); } <>; ^^^^^^^^^^^^^^^ -input.y:11.10-24: previous declaration - %printer { print ($$); } <> +input.y:2.10-24: previous declaration + %printer { print ($$); } <> <> ^^^^^^^^^^^^^^^ ]]) +]) + +AT_TEST([], [], []) +AT_TEST([], [*], [*]) +m4_popdef([AT_TEST]) AT_CLEANUP @@ -463,17 +426,17 @@ AT_BISON_CHECK([input.y], [1], [], [[input.y:4.13-29: error: %destructor redeclaration for input.y:1.13-29: previous declaration input.y:4.13-29: error: %destructor redeclaration for -input.y:4.13-29: previous declaration +input.y:1.13-29: previous declaration input.y:5.10-24: error: %printer redeclaration for input.y:2.10-24: previous declaration input.y:5.10-24: error: %printer redeclaration for -input.y:5.10-24: previous declaration +input.y:2.10-24: previous declaration input.y:11.13-29: error: %destructor redeclaration for input.y:1.13-29: previous declaration input.y:11.13-29: error: %destructor redeclaration for -input.y:4.13-29: previous declaration +input.y:1.13-29: previous declaration input.y:12.10-24: error: %printer redeclaration for -input.y:5.10-24: previous declaration +input.y:2.10-24: previous declaration input.y:12.10-24: error: %printer redeclaration for input.y:2.10-24: previous declaration ]]) @@ -993,15 +956,9 @@ without_period: "WITHOUT.PERIOD"; AT_BISON_OPTION_POPDEFS # POSIX Yacc accept periods, but not dashes. -AT_BISON_CHECK([--yacc -Wno-error input.y], [], [], -[[input.y:9.8-16: warning: POSIX Yacc forbids dashes in symbol names: WITH-DASH [-Wyacc] -input.y:20.8-16: warning: POSIX Yacc forbids dashes in symbol names: with-dash [-Wyacc] -]]) - -# So warn about them. -AT_BISON_CHECK([-Wyacc input.y], [], [], -[[input.y:9.8-16: warning: POSIX Yacc forbids dashes in symbol names: WITH-DASH [-Wyacc] -input.y:20.8-16: warning: POSIX Yacc forbids dashes in symbol names: with-dash [-Wyacc] +AT_BISON_CHECK([--yacc input.y], [1], [], +[[input.y:9.8-16: error: POSIX Yacc forbids dashes in symbol names: WITH-DASH [-Werror=yacc] +input.y:20.8-16: error: POSIX Yacc forbids dashes in symbol names: with-dash [-Werror=yacc] ]]) # Dashes are fine for GNU Bison. @@ -1274,6 +1231,45 @@ special-char-@:>@.y:3.7: error: %code qualifier 'q' is not used AT_CLEANUP +## ---------------- ## +## Multiple %code. ## +## ---------------- ## + +AT_SETUP([Multiple %code]) + +# Make sure that repeated arguments to %code are separated by +# end-of-lines. At some point, a missing eol would leave synclines +# appended to the previous value. Here, we use CPP directive to +# introduce dependency on the absence/presence of the eol. +AT_BISON_OPTION_PUSHDEFS + +AT_DATA([input.y], +[[%code {#include } +%code {#define A B} +%code {#define B C} +%code {#define C D} +%code {#define D 42} +%code { + ]AT_YYERROR_DECLARE[ + ]AT_YYLEX_DECLARE[ +} +%% +start: %empty; +%% +]AT_YYERROR_DEFINE[ +]AT_YYLEX_DEFINE[ +int main (void) +{ + assert (A == 42); + return 0; +} +]]) +AT_FULL_COMPILE([input]) +AT_PARSER_CHECK([./input]) + +AT_BISON_OPTION_POPDEFS +AT_CLEANUP() + ## ---------------- ## ## %define errors. ## ## ---------------- ## @@ -1383,8 +1379,8 @@ AT_SETUP([["%define" Boolean variables]]) AT_DATA([Input.y], [[%language "Java" -%define public "maybe" -%define parser_class_name "Input" +%define public maybe +%define parser_class_name {Input} %% start: %empty; ]]) @@ -1395,6 +1391,72 @@ AT_BISON_CHECK([[Input.y]], [1], [], AT_CLEANUP +## ------------------------ ## +## %define code variables. ## +## ------------------------ ## + +AT_SETUP([["%define" code variables]]) + +m4_pushdef([AT_TEST], +[AT_DATA([input.yy], +[[%skeleton "lalr1.cc" %locations +%define api.location.type ]$1[quux]$2[ +%define api.namespace ]$1[quux]$2[ +%define api.prefix ]$1[quux]$2[ +%define api.token.prefix ]$1[quux]$2[ +%token TOK // Otherwise api.token.prefix is unused. +%% +start: TOK; +]]) + +AT_BISON_CHECK([[input.yy]], [0], [], +[[input.yy:2.9-25: warning: %define variable 'api.location.type' requires '{...}' values [-Wdeprecated] +input.yy:4.9-18: warning: %define variable 'api.prefix' requires '{...}' values [-Wdeprecated] +input.yy:5.9-24: warning: %define variable 'api.token.prefix' requires '{...}' values [-Wdeprecated] +input.yy:3.9-21: warning: %define variable 'api.namespace' requires '{...}' values [-Wdeprecated] +]]) +]) + +AT_TEST([], []) +AT_TEST(["], ["]) +m4_popdef([AT_TEST]) + +AT_CLEANUP + + +## --------------------------- ## +## %define keyword variables. ## +## --------------------------- ## + +AT_SETUP([["%define" keyword variables]]) + +m4_pushdef([AT_TEST], +[AT_DATA([input.y], +[[%define api.pure ]$1[true]$2[ +%define api.push-pull ]$1[both]$2[ +%define lr.default-reduction ]$1[most]$2[ +%define lr.keep-unreachable-state ]$1[true]$2[ +%define lr.type ]$1[lalr]$2[ +%% +exp: %empty +]]) + +AT_BISON_CHECK([[input.y]], [0], [], +[[input.y:5.9-15: warning: %define variable 'lr.type' requires keyword values [-Wdeprecated] +input.y:3.9-28: warning: %define variable 'lr.default-reduction' requires keyword values [-Wdeprecated] +input.y:4.9-33: warning: %define variable 'lr.keep-unreachable-state' requires keyword values [-Wdeprecated] +input.y:2.9-21: warning: %define variable 'api.push-pull' requires keyword values [-Wdeprecated] +input.y:1.9-16: warning: %define variable 'api.pure' requires keyword values [-Wdeprecated] +]]) +]) + +AT_TEST(["], ["]) +AT_TEST([{], [}]) +m4_popdef([AT_TEST]) + +AT_CLEANUP + + ## ------------------------ ## ## %define enum variables. ## ## ------------------------ ## @@ -1700,11 +1762,11 @@ AT_BISON_CHECK([[-Dparse.lac.memory-trace=full input.y]], AT_CLEANUP -## --------------------------------------------- ## -## -Werror is not affected by -Wnone and -Wall. ## -## --------------------------------------------- ## +## ---------------------- ## +## -Werror combinations. ## +## ---------------------- ## -AT_SETUP([[-Werror is not affected by -Wnone and -Wall]]) +AT_SETUP([[-Werror combinations]]) AT_DATA([[input.y]], [[%% @@ -1730,6 +1792,18 @@ AT_BISON_CHECK([[-Werror,no-all,other input.y]], [[1]], [[]], [[input.y:2.15: error: stray '$' [-Werror=other] ]]) +# Check that -Wno-error keeps warnings enabled, but non fatal. +AT_BISON_CHECK([[-Werror -Wno-error=other input.y]], [[0]], [[]], +[[input.y:2.15: warning: stray '$' [-Wother] +]]) + +AT_BISON_CHECK([[-Wno-error=other -Werror input.y]], [[0]], [[]], +[[input.y:2.15: warning: stray '$' [-Wother] +]]) + +AT_BISON_CHECK([[-Werror=other -Wno-other input.y]], [[0]], [[]], +[[]]) + AT_CLEANUP @@ -1752,10 +1826,10 @@ AT_BISON_CHECK([[$2 input.y]], [[1]], [[]], ]]) ]) -AT_TEST([%define api.prefix foo %name-prefix "bar"], [], [input.y:1.9-18]) -AT_TEST([], [-Dapi.prefix=foo -p bar], [:2]) -AT_TEST([%name-prefix "bar"], [-Dapi.prefix=foo], [:2]) -AT_TEST([%define api.prefix foo], [-p bar], [input.y:1.9-18]) +AT_TEST([%define api.prefix {foo} %name-prefix "bar"], [], [input.y:1.9-18]) +AT_TEST([], [-Dapi.prefix={foo} -p bar], [:2]) +AT_TEST([%name-prefix "bar"], [-Dapi.prefix={foo}], [:2]) +AT_TEST([%define api.prefix {foo}], [-p bar], [input.y:1.9-18]) m4_popdef([AT_TEST])