]> git.saurik.com Git - bison.git/blobdiff - tests/actions.at
(_AT_CHECK_PRINTER_AND_DESTRUCTOR,
[bison.git] / tests / actions.at
index 87126e8893dc5b8cbf17a76ded39ab90998655fb..1e8d62f41cffb7096f7aad0fa23d8258bee1f0b2 100644 (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_if([$1$2$3], $[1]$[2]$[3], [],
        [m4_fatal([$0: Invalid arguments: $@])])dnl
 
 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.
 
 
 # Make sure complex $n work.
 
@@ -328,18 +328,19 @@ AT_DATA_GRAMMAR([[input.y]],
 %debug
 %verbose
 %locations
 %debug
 %verbose
 %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[);
 ]AT_LALR1_CC_IF([], [static void yyerror (const char *msg);])
 [%}
 
 [static int yylex (]AT_LEX_FORMALS[);
 ]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 (@$)); }
    input line thing 'x'
 
 %printer { fprintf (yyoutput, "%d@%d-%d", $$, RANGE (@$)); }
    input line thing 'x'
@@ -416,7 +417,7 @@ thing:
 static int
 yylex (]AT_LEX_FORMALS[)
 {
 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.  */
     {
       /* 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(
   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.  */
        /* 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",
        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.  */
        /* 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",
        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
 ])[
     }
   else
@@ -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)
 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],
 # 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"])
+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])