From: Akim Demaille Date: Mon, 21 Jan 2013 14:38:49 +0000 (+0100) Subject: tests: improve factoring of the main function X-Git-Tag: v2.7.90~164 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/f42c012fcf0c4eb4d07b59caca90de5442f988c3 tests: improve factoring of the main function * tests/local.at (AT_MAIN_DEFINE): If %debug is used, check if -d/--debug is passed to the generated parser, and enable the traces. Return exactly the result of yyparse, so that we can check exit code 2 too. * tests/actions.at, tests/glr-regression.at, tests/regression.at: Use AT_MAIN_DEFINE, helping AT_BISON_OPTION_PUSHDEFS where needed, preferably to option -t. --- diff --git a/tests/actions.at b/tests/actions.at index 804d7d37..b9337acd 100644 --- a/tests/actions.at +++ b/tests/actions.at @@ -755,7 +755,7 @@ AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser], [with union]) # called for $end, and that $$ and @$ work correctly. AT_SETUP([Default tagless %printer and %destructor]) -AT_BISON_OPTION_PUSHDEFS([%locations]) +AT_BISON_OPTION_PUSHDEFS([%locations %debug]) AT_DATA_GRAMMAR([[input.y]], [[%define parse.error verbose %debug @@ -798,13 +798,7 @@ start: 'a' 'b' 'c' 'd' 'e' { $$ = 'S'; USE(($1, $2, $3, $4, $5)); } ; %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE(["abcd"], [[yylval = res]])[ - -int -main (void) -{ - yydebug = 1; - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_CHECK([-o input.c input.y], [], [], @@ -812,7 +806,7 @@ AT_BISON_CHECK([-o input.c input.y], [], [], input.y:23.3-5: warning: useless %printer for type <*> [-Wother] ]]) AT_COMPILE([input]) -AT_PARSER_CHECK([./input], 1, +AT_PARSER_CHECK([./input --debug], 1, [[<> destructor for 'd' @ 4. 'b'/'c' destructor for 'c' @ 3. 'b'/'c' destructor for 'b' @ 2. @@ -856,7 +850,7 @@ AT_CLEANUP ## ------------------------------------------------------ ## AT_SETUP([Default tagged and per-type %printer and %destructor]) -AT_BISON_OPTION_PUSHDEFS +AT_BISON_OPTION_PUSHDEFS([%debug]) AT_DATA_GRAMMAR([[input.y]], [[%define parse.error verbose %debug @@ -913,13 +907,7 @@ start: %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE(["abcdef"])[ - -int -main (void) -{ - yydebug = 1; - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_CHECK([-o input.c input.y], [], [], @@ -927,7 +915,7 @@ AT_BISON_CHECK([-o input.c input.y], [], [], input.y:22.3-4: warning: useless %printer for type <> [-Wother] ]]) AT_COMPILE([input]) -AT_PARSER_CHECK([./input], 1, +AT_PARSER_CHECK([./input --debug], 1, [[<*>//e destructor. <*>//e destructor. 'd' destructor. @@ -991,7 +979,7 @@ m4_pushdef([AT_TEST], [m4_pushdef([kind], []) m4_pushdef([not_kind], [*])], [m4_pushdef([kind], [*]) m4_pushdef([not_kind], [])]) -AT_BISON_OPTION_PUSHDEFS([%locations]) +AT_BISON_OPTION_PUSHDEFS([%locations %debug]) AT_DATA_GRAMMAR([[input]]$1[[.y]], [[%define parse.error verbose %debug @@ -1044,13 +1032,7 @@ yylex (void) return 0; } ]AT_YYERROR_DEFINE[ - -int -main (void) -{ - yydebug = 1; - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_OPTION_POPDEFS @@ -1065,7 +1047,7 @@ input1.y:23.3-4: warning: useless %printer for type <> [-Wother] AT_COMPILE([input$1]) -AT_PARSER_CHECK([./input$1], 0, +AT_PARSER_CHECK([./input$1 --debug], 0, [[<]]kind[[> for 'E' @ 1. <]]kind[[> for 'S' @ 1. ]], @@ -1110,7 +1092,7 @@ AT_SETUP([Default %printer and %destructor are not for error or $undefined]) # semantic value, which would be initialized from the lookahead, which # would be destroyed separately. # - For $undefined, who knows what the semantic value would be. -AT_BISON_OPTION_PUSHDEFS +AT_BISON_OPTION_PUSHDEFS([%debug]) AT_DATA_GRAMMAR([[input.y]], [[%debug @@ -1141,12 +1123,7 @@ start: %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE(["abd"], [yylval = res])[ -int -main (void) -{ - yydebug = 1; - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_OPTION_POPDEFS @@ -1155,7 +1132,7 @@ AT_BISON_CHECK([-o input.c input.y], [], [], input.y:21.6-8: warning: useless %printer for type <*> [-Wother] ]]) AT_COMPILE([input]) -AT_PARSER_CHECK([./input], [1], [], +AT_PARSER_CHECK([./input --debug], [1], [], [[Starting parse Entering state 0 Reading a token: Next token is token 'a' ('a') @@ -1213,7 +1190,7 @@ AT_SETUP([Default %printer and %destructor are not for $accept]) # true for $undefined and the error token, so there are three warnings for # %printer and three for %destructor.) -AT_BISON_OPTION_PUSHDEFS +AT_BISON_OPTION_PUSHDEFS([%debug]) AT_DATA_GRAMMAR([[input.y]], [[%debug /* So that %printer is actually compiled. */ @@ -1264,7 +1241,7 @@ AT_CLEANUP AT_SETUP([Default %printer and %destructor for mid-rule values]) -AT_BISON_OPTION_PUSHDEFS +AT_BISON_OPTION_PUSHDEFS([%debug]) AT_DATA_GRAMMAR([[input.y]], [[%debug /* So that %printer is actually compiled. */ @@ -1298,12 +1275,7 @@ start: %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE[ -int -main (void) -{ - yydebug = 1; - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_OPTION_POPDEFS @@ -1330,7 +1302,7 @@ input.y:32.3-23: warning: unused value: $3 [-Wother] ]]) AT_COMPILE([input]) -AT_PARSER_CHECK([./input], 1,, +AT_PARSER_CHECK([./input --debug], 1,, [[Starting parse Entering state 0 Reducing stack by rule 1 (line 30): @@ -1379,7 +1351,7 @@ AT_CLEANUP # ------------------------------------------- m4_define([AT_CHECK_ACTION_LOCATIONS], [AT_SETUP([[@$ in ]$1[ implies %locations]]) -AT_BISON_OPTION_PUSHDEFS +AT_BISON_OPTION_PUSHDEFS([%debug]) AT_DATA_GRAMMAR([[input.y]], [[%code { #include @@ -1438,7 +1410,7 @@ AT_CHECK_ACTION_LOCATIONS([[%printer]]) m4_pushdef([AT_TEST], [AT_SETUP([[Qualified $$ in actions: $1]]) -AT_BISON_OPTION_PUSHDEFS([%skeleton "$1"]) +AT_BISON_OPTION_PUSHDEFS([%skeleton "$1" %debug]) AT_DATA_GRAMMAR([[input.y]], [[%skeleton "$1" @@ -1502,19 +1474,11 @@ float: UNTYPED INT EOF}]], [[{UNTYPED, INT, EOF}]]), [AT_VAL.ival = toknum * 10; AT_VAL.fval = toknum / 10.0;])[ -int -main (void) -{]AT_SKEL_CC_IF([[ - yy::parser p; - p.set_debug_level(1); - return p.parse ();]], [[ - yydebug = 1; - return yyparse ();]])[ -} +]AT_MAIN_DEFINE[ ]]) AT_FULL_COMPILE([[input]]) -AT_PARSER_CHECK([./input], 0, [], [stderr]) +AT_PARSER_CHECK([./input --debug], 0, [], [stderr]) # Don't be too picky on the traces, GLR is not exactly the same. Keep # only the lines from the printer. AT_CHECK([[sed -ne '/ival:/p' stderr]], 0, @@ -1710,7 +1674,7 @@ AT_CLEANUP AT_SETUP([[YYBACKUP]]) -AT_BISON_OPTION_PUSHDEFS([%pure-parser]) +AT_BISON_OPTION_PUSHDEFS([%pure-parser %debug]) AT_DATA_GRAMMAR([input.y], [[ diff --git a/tests/glr-regression.at b/tests/glr-regression.at index e5e758cd..96e215cf 100644 --- a/tests/glr-regression.at +++ b/tests/glr-regression.at @@ -1658,7 +1658,7 @@ AT_CLEANUP AT_SETUP([Ambiguity reports]) -AT_BISON_OPTION_PUSHDEFS +AT_BISON_OPTION_PUSHDEFS([%debug]) AT_DATA_GRAMMAR([input.y], [[ %{ @@ -1681,12 +1681,7 @@ d: /* nada. */; %% ]AT_YYLEX_DEFINE(["abc"])[ ]AT_YYERROR_DEFINE[ -int -main (void) -{ - yydebug = 1; - return !!yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_OPTION_POPDEFS @@ -1695,7 +1690,7 @@ AT_BISON_CHECK([[-o input.c input.y]], 0, [], ]]) AT_COMPILE([input]) -AT_PARSER_CHECK([[./input]], 1, [], +AT_PARSER_CHECK([[./input --debug]], 1, [], [Starting parse Entering state 0 Reading a token: Next token is token 'a' () diff --git a/tests/local.at b/tests/local.at index d4e425d8..a0e911fe 100644 --- a/tests/local.at +++ b/tests/local.at @@ -452,20 +452,32 @@ m4_define([AT_MAIN_DEFINE], [m4_case(AT_LANG, [c], [[#include /* getenv. */ +#include /* strcmp. */ int -main (void) -{]AT_DEBUG_IF([ - yydebug = !!getenv("YYDEBUG");])[ - return !!yyparse (); +main (int argc, char const* argv[]) +{]AT_DEBUG_IF([[ + if (getenv("YYDEBUG") + || (argc == 2 + && (!strcmp (argv[1], "-d") || !strcmp (argv[1], "--debug")))) + yydebug |= 1;]], [[ + (void) argc; + (void) argv;]])[ + return yyparse (); }]], [c++], [[#include // getenv. +#include // strcmp. int -main (void) +main (int argc, char const* argv[]) { - yy::parser p;]AT_DEBUG_IF([ - p.set_debug_level (!!getenv("YYDEBUG"));])[ - return !!p.parse (); + yy::parser p;]AT_DEBUG_IF([[ + if (getenv("YYDEBUG") + || (argc == 2 + && (!strcmp (argv[1], "-d") || !strcmp (argv[1], "--debug")))) + p.set_debug_level (true);]], [[ + (void) argc; + (void) argv;]])[ + return p.parse (); }]], [java], [[class input diff --git a/tests/regression.at b/tests/regression.at index 398b9498..4222b408 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -883,17 +883,6 @@ member: STRING %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE([":"])[ -]AT_LALR1_CC_IF( -[int -yyparse () -{ - yy::parser parser; -#if YYDEBUG - parser.set_debug_level (YYDEBUG); -#endif - return parser.parse (); -} -])[ ]AT_MAIN_DEFINE[ ]]) ])# _AT_DATA_DANCER_Y @@ -1007,14 +996,14 @@ AT_SETUP([Braced code in declaration in rules section]) # Bison once mistook braced code in a declaration in the rules section to be a # rule action. -AT_BISON_OPTION_PUSHDEFS +AT_BISON_OPTION_PUSHDEFS([%debug]) AT_DATA_GRAMMAR([input.y], [[%{ #include ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ %} - +%debug %error-verbose %% @@ -1032,19 +1021,13 @@ start: %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE(["a"])[ - -int -main (void) -{ - yydebug = 1; - return !yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_OPTION_POPDEFS -AT_BISON_CHECK([-t -o input.c input.y]) +AT_BISON_CHECK([-o input.c input.y]) AT_COMPILE([input]) -AT_PARSER_CHECK([./input], 0, +AT_PARSER_CHECK([./input --debug], 1, [[Bison would once convert this action to a midrule because of the subsequent braced code. ]], [[Starting parse @@ -1083,7 +1066,7 @@ start: 'a' "A" 'b'; %token 'a' "A"; ]]) -AT_BISON_CHECK([-t -o input.c input.y]) +AT_BISON_CHECK([-o input.c input.y]) AT_CLEANUP @@ -1399,7 +1382,7 @@ AT_SETUP([[LAC: Exploratory stack]]) m4_pushdef([AT_LAC_CHECK], [ -AT_BISON_OPTION_PUSHDEFS([$1]) +AT_BISON_OPTION_PUSHDEFS([%debug $1]) AT_DATA_GRAMMAR([input.y], [[%code { @@ -1407,7 +1390,7 @@ AT_DATA_GRAMMAR([input.y], ]AT_YYERROR_DECLARE[ int yylex (]AT_PURE_IF([[YYSTYPE *]], [[void]])[); } - +%debug ]$1[ %define parse.error verbose %token 'c' @@ -1434,21 +1417,16 @@ yylex (]AT_PURE_IF([[YYSTYPE *v]], [[void]])[) return *input++; } -int -main (void) -{ - yydebug = 1; - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_CHECK([[-Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \ -Dparse.lac.memory-trace=full \ - -t -o input.c input.y]], [[0]], [], + -o input.c input.y]], [[0]], [], [[input.y: warning: 21 shift/reduce conflicts [-Wconflicts-sr] ]]) AT_COMPILE([[input]]) -AT_PARSER_CHECK([[./input > stdout.txt 2> stderr.txt]], [[1]]) +AT_PARSER_CHECK([[./input --debug > stdout.txt 2> stderr.txt]], [[1]]) # Make sure syntax error doesn't forget that 'a' is expected. It would # be forgotten without lookahead correction. @@ -1492,7 +1470,7 @@ AT_CLEANUP AT_SETUP([[LAC: Memory exhaustion]]) m4_pushdef([AT_LAC_CHECK], -[AT_BISON_OPTION_PUSHDEFS +[AT_BISON_OPTION_PUSHDEFS([%debug]) AT_DATA_GRAMMAR([input.y], [[%code { #include @@ -1500,7 +1478,7 @@ AT_DATA_GRAMMAR([input.y], ]AT_YYLEX_DECLARE[ #define YYMAXDEPTH 8 } - +%debug %error-verbose %% @@ -1511,16 +1489,11 @@ A: /*empty*/ | 'a' ; %% ]AT_YYERROR_DEFINE[ ]AT_YYLEX_DEFINE(["$1"])[ -int -main (void) -{ - yydebug = 1; - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) AT_BISON_CHECK([[-Dparse.lac=full -Dparse.lac.es-capacity-initial=1 \ - -t -o input.c input.y]], [[0]], [], + -o input.c input.y]], [[0]], [], [[input.y: warning: 8 shift/reduce conflicts [-Wconflicts-sr] ]]) AT_COMPILE([[input]]) @@ -1529,7 +1502,7 @@ AT_BISON_OPTION_POPDEFS # Check for memory exhaustion during parsing. AT_LAC_CHECK([]) -AT_PARSER_CHECK([[./input]], [[2]], [], +AT_PARSER_CHECK([[./input --debug]], [[2]], [], [[Starting parse Entering state 0 Reading a token: Now at end of input. @@ -1543,7 +1516,7 @@ Stack now 0 # Induce an immediate syntax error with an undefined token, and check # for memory exhaustion while building syntax error message. AT_LAC_CHECK([z], [[0]]) -AT_PARSER_CHECK([[./input]], [[2]], [], +AT_PARSER_CHECK([[./input --debug]], [[2]], [], [[Starting parse Entering state 0 Reading a token: Next token is token $undefined ()