(_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.
This commit is contained in:
Paul Eggert
2004-07-22 14:40:21 +00:00
parent ee42c6166b
commit ac700aa646

View File

@@ -304,13 +304,13 @@ AT_CLEANUP
## Printers and Destructors. ## ## 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_define([_AT_CHECK_PRINTER_AND_DESTRUCTOR],
[m4_if([$1$2$3], $[1]$[2]$[3], [], [m4_if([$1$2$3], $[1]$[2]$[3], [],
[m4_fatal([$0: Invalid arguments: $@])])dnl [m4_fatal([$0: Invalid arguments: $@])])dnl
AT_SETUP([Printers and Destructors: $5]) AT_SETUP([Printers and Destructors $6: $5])
# Make sure complex $n work. # Make sure complex $n work.
@@ -328,18 +328,19 @@ AT_DATA_GRAMMAR([[input.y]],
%debug %debug
%verbose %verbose
%locations %locations
%union ]m4_ifval([$6], [%union
{ {
int ival; 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 int yylex (]AT_LEX_FORMALS[);
]AT_LALR1_CC_IF([], [static void yyerror (const char *msg);]) ]AT_LALR1_CC_IF([], [static void yyerror (const char *msg);])
[%} [%}
%type <ival> 'x' ';' thing line input ]m4_ifval([$6], [%type <ival> 'x' ';' thing line input])[
%printer { fprintf (yyoutput, "%d@%d-%d", $$, RANGE (@$)); } %printer { fprintf (yyoutput, "%d@%d-%d", $$, RANGE (@$)); }
input line thing 'x' input line thing 'x'
@@ -416,7 +417,7 @@ thing:
static int static int
yylex (]AT_LEX_FORMALS[) yylex (]AT_LEX_FORMALS[)
{ {
static const unsigned int input[] = static const char input[] =
{ {
/* Exercise the discarding of stack top and input until `error' /* Exercise the discarding of stack top and input until `error'
can be reduced. */ can be reduced. */
@@ -433,21 +434,21 @@ yylex (]AT_LEX_FORMALS[)
if (counter < (sizeof(input) / sizeof (input[0]))) if (counter < (sizeof(input) / sizeof (input[0])))
{ {
]AT_LALR1_CC_IF( ]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. */ /* 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; yylloc->end.line = yylloc->end.column = yylloc->begin.line + 9;
printf ("sending: '%c' (%d@%d-%d)\n", printf ("sending: '%c' (%d@%d-%d)\n",
input[[counter]], yylval->ival, RANGE (*yylloc)); input[[c]], c, RANGE (*yylloc));
return (int) input[[counter++]]; 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. */ /* 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; yylloc.last_line = yylloc.last_column = yylloc.first_line + 9;
printf ("sending: '%c' (%d@%d-%d)\n", printf ("sending: '%c' (%d@%d-%d)\n",
input[[counter]], yylval.ival, RANGE (yylloc)); input[[c]], c, RANGE (yylloc));
return (int) input[[counter++]]; return input[[c]];
])[ ])[
} }
else 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'. # Produce `calc.y'.
m4_define([AT_CHECK_PRINTER_AND_DESTRUCTOR], 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"])
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])
#AT_CHECK_PRINTER_AND_DESTRUCTOR([%glr-parser], [with union])