X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/12e3584054c16ab255672c07af0ffc7bb220e8bc..7172e23e8ffb95b8cafee24c4f36c46ca709507f:/tests/input.at diff --git a/tests/input.at b/tests/input.at index dec1cbe6..12d620c8 100644 --- a/tests/input.at +++ b/tests/input.at @@ -25,7 +25,7 @@ AT_BANNER([[Input Processing.]]) ## Invalid $n. ## ## ------------ ## -AT_SETUP([Invalid \$n and @n]) +AT_SETUP([Invalid $n and @n]) AT_DATA([input.y], [[%% @@ -80,13 +80,15 @@ m4_define([_AT_UNUSED_VALUES_DECLARATIONS], %destructor { destroy ($$); } INT a b c d e f g h i j k l;]]]) -# AT_CHECK_UNUSED_VALUES(DECLARATIONS_AFTER) -# -------------------------------------------- +# AT_CHECK_UNUSED_VALUES(DECLARATIONS_AFTER, CHECK_MIDRULE_VALUES) +# ------------------------------------------------------------------ # Generate a grammar to test unused values, # compile it, run it. If DECLARATIONS_AFTER # is set, then the token, type, and destructor # declarations are generated after the rules -# rather than before. +# rather than before. If CHECK_MIDRULE_VALUES +# is set, then --warnings=midrule-values is +# set. m4_define([AT_CHECK_UNUSED_VALUES], [AT_DATA([input.y], @@ -116,19 +118,19 @@ l: INT | INT { $$ = $1; } INT { $$ = $2 + $< _AT_UNUSED_VALUES_DECLARATIONS]) ) -AT_CHECK([bison input.y], [0], [], +AT_CHECK([bison]m4_ifval($2, [ --warnings=midrule-values ])[ input.y], [0], [], [[input.y:11.10-32: warning: unset value: $]$[ input.y:11.10-32: warning: unused value: $]1[ input.y:11.10-32: warning: unused value: $]3[ input.y:11.10-32: warning: unused value: $]5[ input.y:12.9: warning: empty rule for typed nonterminal, and no action -input.y:13.14-19: warning: unset value: $$ +]]m4_ifval($2, [[[input.y:13.14-19: warning: unset value: $$ input.y:13.25-39: warning: unset value: $$ -input.y:13.10-59: warning: unset value: $]$[ +]]])[[input.y:13.10-59: warning: unset value: $]$[ input.y:13.10-59: warning: unused value: $]3[ input.y:13.10-59: warning: unused value: $]5[ -input.y:14.14-16: warning: unset value: $$ -input.y:14.10-47: warning: unset value: $]$[ +]]m4_ifval($2, [[[input.y:14.14-16: warning: unset value: $$ +]]])[[input.y:14.10-47: warning: unset value: $]$[ input.y:14.10-47: warning: unused value: $]3[ input.y:14.10-47: warning: unused value: $]5[ input.y:15.10-36: warning: unset value: $]$[ @@ -136,21 +138,21 @@ input.y:15.10-36: warning: unused value: $]3[ input.y:15.10-36: warning: unused value: $]5[ input.y:17.10-58: warning: unset value: $]$[ input.y:17.10-58: warning: unused value: $]1[ -input.y:17.10-58: warning: unused value: $]2[ -input.y:17.10-58: warning: unused value: $]3[ -input.y:17.10-58: warning: unused value: $]4[ -input.y:17.10-58: warning: unused value: $]5[ +]]m4_ifval($2, [[[input.y:17.10-58: warning: unused value: $]2[ +]]])[[input.y:17.10-58: warning: unused value: $]3[ +]]m4_ifval($2, [[[input.y:17.10-58: warning: unused value: $]4[ +]]])[[input.y:17.10-58: warning: unused value: $]5[ input.y:18.10-72: warning: unset value: $]$[ input.y:18.10-72: warning: unused value: $]1[ input.y:18.10-72: warning: unused value: $]3[ -input.y:18.10-72: warning: unused value: $]4[ -input.y:18.10-72: warning: unused value: $]5[ -input.y:20.10-55: warning: unused value: $]3[ -input.y:21.10-68: warning: unset value: $]$[ +]]m4_ifval($2, [[[input.y:18.10-72: warning: unused value: $]4[ +]]])[[input.y:18.10-72: warning: unused value: $]5[ +]]m4_ifval($2, [[[input.y:20.10-55: warning: unused value: $]3[ +]]])[[input.y:21.10-68: warning: unset value: $]$[ input.y:21.10-68: warning: unused value: $]1[ input.y:21.10-68: warning: unused value: $]2[ -input.y:21.10-68: warning: unused value: $]4[ -]])]) +]]m4_ifval($2, [[[input.y:21.10-68: warning: unused value: $]4[ +]]]))]) ## --------------- ## @@ -159,6 +161,7 @@ input.y:21.10-68: warning: unused value: $]4[ AT_SETUP([Unused values]) AT_CHECK_UNUSED_VALUES +AT_CHECK_UNUSED_VALUES(, [1]) AT_CLEANUP @@ -168,6 +171,7 @@ AT_CLEANUP AT_SETUP([Unused values before symbol declarations]) AT_CHECK_UNUSED_VALUES([1]) +AT_CHECK_UNUSED_VALUES([1], [1]) AT_CLEANUP @@ -184,11 +188,11 @@ AT_DATA([[input.y]], %destructor { destroy ($$); } <*> %printer { destroy ($$); } <*> -%destructor { destroy ($$); } -%printer { destroy ($$); } +%destructor { destroy ($$); } <> <> +%printer { destroy ($$); } <> <> -%destructor { destroy ($$); } -%printer { destroy ($$); } +%destructor { destroy ($$); } <> +%printer { destroy ($$); } <> %% @@ -197,8 +201,8 @@ start: ; %destructor { destroy ($$); } <*>; %printer { destroy ($$); } <*>; -%destructor { destroy ($$); } ; -%printer { destroy ($$); } ; +%destructor { destroy ($$); } <>; +%printer { destroy ($$); } <>; ]]) AT_CHECK([bison input.y], [1], [], @@ -281,7 +285,7 @@ AT_CLEANUP AT_SETUP([Unused values with default %destructor]) AT_DATA([[input.y]], -[[%destructor { destroy ($$); } +[[%destructor { destroy ($$); } <> %type tagged %% @@ -525,7 +529,9 @@ AT_DATA([main.c], [[typedef int value; #include "input.h" +#ifndef YYPUSH_DECLS int yyparse (void); +#endif int main (void) @@ -676,3 +682,24 @@ start: false_start ; AT_CHECK([bison -o input.c input.y]) AT_CLEANUP + + +## --------------------- ## +## %prec takes a token. ## +## --------------------- ## + +AT_SETUP([%prec takes a token]) + +# Bison once allowed %prec sym where sym was a nonterminal. + +AT_DATA([input.y], +[[%% +start: PREC %prec PREC ; +PREC: ; +]]) + +AT_CHECK([bison input.y], [1], [], +[[input.y:3.1-4: rule given for PREC, which is a token +]]) + +AT_CLEANUP