]> git.saurik.com Git - bison.git/blobdiff - tests/input.at
djgpp/config.sed: Adjust config.sed for the use of autoconf 2.60.
[bison.git] / tests / input.at
index 5ddd3b993cd2337bb05cf7386bc4046aa86e447f..dedd65636641113ed81ca9f41780c07767976155 100644 (file)
@@ -175,8 +175,8 @@ AT_CLEANUP
 AT_SETUP([Default %printer and %destructor redeclared])
 
 AT_DATA([[input.y]],
-[[%destructor { destroy ($$); } %symbol-default
-%printer { destroy ($$); } %symbol-default
+[[%destructor { destroy ($$); } %symbol-default %symbol-default
+%printer { destroy ($$); } %symbol-default %symbol-default
 
 %destructor { destroy ($$); } %symbol-default
 %printer { destroy ($$); } %symbol-default
@@ -190,7 +190,11 @@ start: ;
 ]])
 
 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.  ##
 ## ---------------------------------------- ##
@@ -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