From ac700aa646de0ea6b4d07af24ff6ca67e529486a Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Thu, 22 Jul 2004 14:40:21 +0000 Subject: [PATCH] (_AT_CHECK_PRINTER_AND_DESTRUCTOR, AT_CHECK_PRINTER_AND_DESTRUCTOR): New argument UNION-FLAG. All callers changed. (_AT_CHECK_PRINTER_AND_DESTRUCTOR): Don't assume %union. Use type char, not unsigned int, when declaring an array of char; this lets us remove a cast. (Printers and Destructors): Add non-%union test cases. --- tests/actions.at | 49 +++++++++++++++++++++++++++---------------------- 1 file changed, 27 insertions(+), 22 deletions(-) diff --git a/tests/actions.at b/tests/actions.at index 6dfb6f1..1e8d62f 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[); ]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 @@ -547,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]) -- 2.7.4