X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/1f916a78e6af829d8c2a8ec982f45aa7a30a9af5..ac700aa646de0ea6b4d07af24ff6ca67e529486a:/tests/actions.at diff --git a/tests/actions.at b/tests/actions.at index 20a8c28d..1e8d62f4 100644 --- a/tests/actions.at +++ b/tests/actions.at @@ -304,13 +304,13 @@ AT_CLEANUP ## Printers and Destructors. ## ## -------------------------- ## -# _AT_CHECK_PRINTER_AND_DESTRUCTOR($1, $2, $3, $4, BISON-DIRECTIVE) -# ----------------------------------------------------------------- +# _AT_CHECK_PRINTER_AND_DESTRUCTOR($1, $2, $3, $4, BISON-DIRECTIVE, UNION-FLAG) +# ----------------------------------------------------------------------------- m4_define([_AT_CHECK_PRINTER_AND_DESTRUCTOR], [m4_if([$1$2$3], $[1]$[2]$[3], [], [m4_fatal([$0: Invalid arguments: $@])])dnl -AT_SETUP([Printers and Destructors: $5]) +AT_SETUP([Printers and Destructors $6: $5]) # Make sure complex $n work. @@ -328,18 +328,19 @@ AT_DATA_GRAMMAR([[input.y]], %debug %verbose %locations -%union +]m4_ifval([$6], [%union { int ival; -} - +}]) +[ %{ -]AT_LALR1_CC_IF([typedef yy::Location YYLTYPE;]) +]AT_LALR1_CC_IF([typedef yy::Location YYLTYPE; +m4_ifval([$6], , [#define YYSTYPE int])]) [static int yylex (]AT_LEX_FORMALS[); -static void yyerror (const char *msg); -%} +]AT_LALR1_CC_IF([], [static void yyerror (const char *msg);]) +[%} -%type 'x' ';' thing line input +]m4_ifval([$6], [%type 'x' ';' thing line input])[ %printer { fprintf (yyoutput, "%d@%d-%d", $$, RANGE (@$)); } input line thing 'x' @@ -416,7 +417,7 @@ thing: static int yylex (]AT_LEX_FORMALS[) { - static const unsigned int input[] = + static const char input[] = { /* Exercise the discarding of stack top and input until `error' can be reduced. */ @@ -433,21 +434,21 @@ yylex (]AT_LEX_FORMALS[) if (counter < (sizeof(input) / sizeof (input[0]))) { ]AT_LALR1_CC_IF( -[ yylval->ival = counter; +[ int c = m4_ifval([$6], [yylval->ival], [*yylval]) = counter++; /* As in BASIC, line numbers go from 10 to 10. */ - yylloc->begin.line = yylloc->begin.column = 10 * counter; + yylloc->begin.line = yylloc->begin.column = 10 * c; yylloc->end.line = yylloc->end.column = yylloc->begin.line + 9; printf ("sending: '%c' (%d@%d-%d)\n", - input[[counter]], yylval->ival, RANGE (*yylloc)); - return (int) input[[counter++]]; + input[[c]], c, RANGE (*yylloc)); + return input[[c]]; ], -[ yylval.ival = counter; +[ int c = m4_ifval([$6], [yylval.ival], [yylval]) = counter++; /* As in BASIC, line numbers go from 10 to 10. */ - yylloc.first_line = yylloc.first_column = 10 * counter; + yylloc.first_line = yylloc.first_column = 10 * c; yylloc.last_line = yylloc.last_column = yylloc.first_line + 9; printf ("sending: '%c' (%d@%d-%d)\n", - input[[counter]], yylval.ival, RANGE (yylloc)); - return (int) input[[counter++]]; + input[[c]], c, RANGE (yylloc)); + return input[[c]]; ])[ } else @@ -476,7 +477,7 @@ static bool yydebug; int yyparse () { - yy::Parser parser (yydebug, yy::Location::Location ()); + yy::Parser parser (yydebug, yy::Location ()); return parser.parse (); } ], @@ -500,9 +501,11 @@ main (void) } ]]) -AT_CHECK([bison -o input.c input.y]) -AT_LALR1_CC_IF([AT_COMPILE_CXX([input])], - [AT_COMPILE([input])]) +AT_LALR1_CC_IF( + [AT_CHECK([bison -o input.cc input.y]) + AT_COMPILE_CXX([input])], + [AT_CHECK([bison -o input.c input.y]) + AT_COMPILE([input])]) AT_PARSER_CHECK([./input], 1, [[sending: 'x' (0@0-9) thing (0@0-9): 'x' (0@0-9) @@ -545,16 +548,20 @@ AT_CLEANUP ]) -# AT_CHECK_PRINTER_AND_DESTRUCTOR([BISON-OPTIONS]) -# ------------------------------------------------ +# AT_CHECK_PRINTER_AND_DESTRUCTOR([BISON-OPTIONS], [UNION-FLAG]) +# -------------------------------------------------------------- # Produce `calc.y'. m4_define([AT_CHECK_PRINTER_AND_DESTRUCTOR], -[_AT_CHECK_PRINTER_AND_DESTRUCTOR($[1], $[2], $[3], $[4], [$1]) +[_AT_CHECK_PRINTER_AND_DESTRUCTOR($[1], $[2], $[3], $[4], [$1], [$2]) ]) -AT_CHECK_PRINTER_AND_DESTRUCTOR() +AT_CHECK_PRINTER_AND_DESTRUCTOR([]) +AT_CHECK_PRINTER_AND_DESTRUCTOR([], [with union]) AT_CHECK_PRINTER_AND_DESTRUCTOR([%locations %defines %skeleton "lalr1.cc"]) +AT_CHECK_PRINTER_AND_DESTRUCTOR([%locations %defines %skeleton "lalr1.cc"], + [with union]) -# FIXME. This test case fails. +# FIXME. These test cases fail. #AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser]) +#AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser], [with union])