X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/eb0e86ac80861525ab5d0c0dcb585290e1bd3f03..afcc58c63eaf2444396c7089797db056f6db4b22:/tests/input.at?ds=sidebyside diff --git a/tests/input.at b/tests/input.at index 322bbe87..eb73bf96 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 ]]) @@ -1274,6 +1237,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 +1385,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 +1397,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. ## ## ------------------------ ## @@ -1752,10 +1820,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])