]> git.saurik.com Git - bison.git/blobdiff - tests/input.at
2006-10-16 Paolo Bonzini <bonzini@gnu.org>
[bison.git] / tests / input.at
index ce1c777ad60d5db8ede0ca3bfd9316f8d3d43e0e..dedd65636641113ed81ca9f41780c07767976155 100644 (file)
@@ -175,22 +175,26 @@ AT_CLEANUP
 AT_SETUP([Default %printer and %destructor redeclared])
 
 AT_DATA([[input.y]],
-[[%destructor { destroy ($$); }
-%printer { destroy ($$); }
+[[%destructor { destroy ($$); } %symbol-default %symbol-default
+%printer { destroy ($$); } %symbol-default %symbol-default
 
-%destructor { destroy ($$); }
-%printer { destroy ($$); }
+%destructor { destroy ($$); } %symbol-default
+%printer { destroy ($$); } %symbol-default
 
 %%
 
 start: ;
 
-%destructor { destroy ($$); };
-%printer { destroy ($$); };
+%destructor { destroy ($$); } %symbol-default;
+%printer { destroy ($$); } %symbol-default;
 ]])
 
 AT_CHECK([bison input.y], [1], [],
-[[input.y:4.13-29: redeclaration for default %destructor
+[[input.y:1.13-29: redeclaration for default %destructor
+input.y:1.13-29: previous declaration
+input.y:2.10-26: redeclaration for default %printer
+input.y:2.10-26: previous declaration
+input.y:4.13-29: redeclaration for default %destructor
 input.y:1.13-29: previous declaration
 input.y:5.10-26: redeclaration for default %printer
 input.y:2.10-26: previous declaration
@@ -203,6 +207,49 @@ input.y:5.10-26: previous declaration
 AT_CLEANUP
 
 
+## ---------------------------------------------- ##
+## Per-type %printer and %destructor redeclared.  ##
+## ---------------------------------------------- ##
+
+AT_SETUP([Per-type %printer and %destructor redeclared])
+
+AT_DATA([[input.y]],
+[[%destructor { destroy ($$); } <field1> <field2>
+%printer { destroy ($$); } <field1> <field2>
+
+%destructor { destroy ($$); } <field1> <field1>
+%printer { destroy ($$); } <field2> <field2>
+
+%%
+
+start: ;
+
+%destructor { destroy ($$); } <field2> <field1>;
+%printer { destroy ($$); } <field2> <field1>;
+]])
+
+AT_CHECK([bison input.y], [1], [],
+[[input.y:4.13-29: %destructor redeclaration for <field1>
+input.y:1.13-29: previous declaration
+input.y:4.13-29: %destructor redeclaration for <field1>
+input.y:4.13-29: previous declaration
+input.y:5.10-26: %printer redeclaration for <field2>
+input.y:2.10-26: previous declaration
+input.y:5.10-26: %printer redeclaration for <field2>
+input.y:5.10-26: previous declaration
+input.y:11.13-29: %destructor redeclaration for <field1>
+input.y:4.13-29: previous declaration
+input.y:11.13-29: %destructor redeclaration for <field2>
+input.y:1.13-29: previous declaration
+input.y:12.10-26: %printer redeclaration for <field1>
+input.y:2.10-26: previous declaration
+input.y:12.10-26: %printer redeclaration for <field2>
+input.y:5.10-26: previous declaration
+]])
+
+AT_CLEANUP
+
+
 ## ---------------------------------------- ##
 ## Unused values with default %destructor.  ##
 ## ---------------------------------------- ##
@@ -210,7 +257,7 @@ AT_CLEANUP
 AT_SETUP([Unused values with default %destructor])
 
 AT_DATA([[input.y]],
-[[%destructor { destroy ($$); }
+[[%destructor { destroy ($$); } %symbol-default
 
 %%
 
@@ -227,6 +274,31 @@ input.y:6.6-8: warning: unset value: $$
 AT_CLEANUP
 
 
+## ----------------------------------------- ##
+## Unused values with per-type %destructor.  ##
+## ----------------------------------------- ##
+
+AT_SETUP([Unused values with per-type %destructor])
+
+AT_DATA([[input.y]],
+[[%destructor { destroy ($$); } <field1>
+%type <field1> start end
+
+%%
+
+start: end end { $1; } ;
+end: { }  ;
+]])
+
+AT_CHECK([bison input.y], [0], [],
+[[input.y:6.8-22: warning: unset value: $$
+input.y:6.8-22: warning: unused value: $2
+input.y:7.6-8: warning: unset value: $$
+]])
+
+AT_CLEANUP
+
+
 ## ---------------------- ##
 ## Incompatible Aliases.  ##
 ## ---------------------- ##
@@ -324,6 +396,7 @@ char apostrophe = '\'';
 #endif
 
 #include <stdio.h>
+#include <stdlib.h>
 %}
 /* %{ and %} can be here too. */
 
@@ -387,11 +460,14 @@ value_as_yystype (value val)
 static int
 yylex (void)
 {
-  static const char *input = "@<:@\1\2$@{@oline@__@&t@oline__\
+  static char const input[] = "@<:@\1\2$@{@oline@__@&t@oline__\
 #output "; /* "
   */
-  yylval = value_as_yystype (*input);
-  return *input++;
+  static size_t toknum;
+  if (! (toknum < sizeof input))
+    abort ();
+  yylval = value_as_yystype (input[toknum]);
+  return input[toknum++];
 }
 
 static void
@@ -533,7 +609,7 @@ input.y:4.10-5.0: missing `'' at end of line
 input.y:14.11-15.0: missing `'' at end of line
 input.y:16.11-17.0: missing `"' at end of line
 input.y:19.13-20.0: missing `}' at end of file
-input.y:20.1: syntax error, unexpected end of file, expecting ;
+input.y:20.1: syntax error, unexpected end of file
 ]])
 
 AT_CLEANUP