]> git.saurik.com Git - bison.git/commitdiff
* tests/input.at: New.
authorAkim Demaille <akim@epita.fr>
Thu, 7 Feb 2002 17:13:46 +0000 (17:13 +0000)
committerAkim Demaille <akim@epita.fr>
Thu, 7 Feb 2002 17:13:46 +0000 (17:13 +0000)
ChangeLog
src/reader.c
tests/Makefile.am
tests/Makefile.in
tests/input.at [new file with mode: 0644]
tests/testsuite.at

index a6b495214eb0a29b2ec2888902a4fdd2b4edf258..a51dfb2821d22d81ea7c1ecfe417ed7af577db4f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2002-02-07  Akim Demaille  <akim@epita.fr>
+
+       * tests/input.at: New.
+
 2002-01-29  Paul Eggert  <eggert@twinsun.com>
 
        * src/bison.simple (YYSIZE_T): Do not define merely because
 2002-01-29  Paul Eggert  <eggert@twinsun.com>
 
        * src/bison.simple (YYSIZE_T): Do not define merely because
index 33f8e13014cef751c35993ecdbec598a20fc8c67..529cebe99efa8849280a59473610b1d824fbe523 100644 (file)
@@ -304,13 +304,15 @@ copy_comment (FILE *fin, struct obstack *oout)
 /*-----------------------------------------------------------------.
 | FIN is pointing to a location (i.e., a `@').  Output to OOUT a   |
 | reference to this location. STACK_OFFSET is the number of values |
 /*-----------------------------------------------------------------.
 | FIN is pointing to a location (i.e., a `@').  Output to OOUT a   |
 | reference to this location. STACK_OFFSET is the number of values |
-| in the current rule so far, which says where to find `$0' with   |
+| in the current rule so far, which says where to find `@0' with   |
 | respect to the top of the stack.                                 |
 `-----------------------------------------------------------------*/
 
 static inline void
 | respect to the top of the stack.                                 |
 `-----------------------------------------------------------------*/
 
 static inline void
-copy_at (FILE *fin, struct obstack *oout, int stack_offset)
+copy_at (FILE *fin, struct obstack *oout,
+        struct symbol_list *rule, int stack_offset)
 {
 {
+  symbol_list *rp;
   int c;
 
   c = getc (fin);
   int c;
 
   c = getc (fin);
@@ -321,11 +323,25 @@ copy_at (FILE *fin, struct obstack *oout, int stack_offset)
     }
   else if (isdigit (c) || c == '-')
     {
     }
   else if (isdigit (c) || c == '-')
     {
-      int n;
+      int n, i;
 
       ungetc (c, fin);
       n = read_signed_integer (fin);
 
 
       ungetc (c, fin);
       n = read_signed_integer (fin);
 
+      rp = rule;
+      i = 0;
+
+      while (i < n)
+       {
+         rp = rp->next;
+         if (rp == NULL)
+           {
+             complain (_("invalid @ value"));
+             return;
+           }
+         i++;
+       }
+
       obstack_fgrow1 (oout, "yylsp[%d]", n - stack_offset);
       locations_flag = 1;
     }
       obstack_fgrow1 (oout, "yylsp[%d]", n - stack_offset);
       locations_flag = 1;
     }
@@ -1103,7 +1119,7 @@ copy_action (symbol_list *rule, int stack_offset)
 
            case '@':
              copy_at (finput, &action_obstack,
 
            case '@':
              copy_at (finput, &action_obstack,
-                      stack_offset);
+                      rule, stack_offset);
              break;
 
            case EOF:
              break;
 
            case EOF:
@@ -1203,7 +1219,7 @@ copy_guard (symbol_list *rule, int stack_offset)
          break;
 
        case '@':
          break;
 
        case '@':
-         copy_at (finput, &guard_obstack, stack_offset);
+         copy_at (finput, &guard_obstack, rule, stack_offset);
          break;
 
        case EOF:
          break;
 
        case EOF:
index 3fff5ea805bc39a989ec243415e87da66c83eea1..6c6f455dc79e14ef607afd184293aa00e92d97ff 100644 (file)
@@ -45,7 +45,7 @@ EXTRA_DIST += package.m4
 
 TESTSUITE_AT = \
        testsuite.at \
 
 TESTSUITE_AT = \
        testsuite.at \
-       output.at sets.at reduce.at calc.at torture.at regression.at
+       input.at output.at sets.at reduce.at calc.at torture.at regression.at
 TESTSUITE = $(srcdir)/testsuite
 
 AUTOTEST = $(AUTOM4TE) --language=autotest
 TESTSUITE = $(srcdir)/testsuite
 
 AUTOTEST = $(AUTOM4TE) --language=autotest
index ee996a286fac1a5314d904c0326f7578651b6d53..34dc04577d4e9e9eefb821fdc317edd48ec3fb61 100644 (file)
@@ -110,7 +110,7 @@ MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE)
 
 TESTSUITE_AT = \
        testsuite.at \
 
 TESTSUITE_AT = \
        testsuite.at \
-       output.at sets.at reduce.at calc.at torture.at regression.at
+       input.at output.at sets.at reduce.at calc.at torture.at regression.at
 
 TESTSUITE = $(srcdir)/testsuite
 
 
 TESTSUITE = $(srcdir)/testsuite
 
diff --git a/tests/input.at b/tests/input.at
new file mode 100644 (file)
index 0000000..117af98
--- /dev/null
@@ -0,0 +1,58 @@
+# Checking the output filenames.                    -*- Autotest -*-
+# Copyright 2002 Free Software Foundation, Inc.
+
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2, or (at your option)
+# any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+AT_BANNER([[Input Processing.]])
+
+# Mostly test that we are robust to mistakes.
+
+## ------------ ##
+## Invalid $n.  ##
+## ------------ ##
+
+
+AT_SETUP([Invalid $n])
+
+AT_DATA([input.y],
+[[%%
+exp: { $$ = $1 ; }
+]])
+
+AT_CHECK([bison input.y], [1], [],
+[[input.y:2: invalid $ value
+]])
+
+AT_CLEANUP
+
+
+## ------------ ##
+## Invalid @n.  ##
+## ------------ ##
+
+
+AT_SETUP([Invalid @n])
+
+AT_DATA([input.y],
+[[%%
+exp: { @$ = @1 ; }
+]])
+
+AT_CHECK([bison input.y], [1], [],
+[[input.y:2: invalid @ value
+]])
+
+AT_CLEANUP
index be0d08d4673442ea8743fe28bb67cf9b98483157..f205d1aaa5df0d6b43e8fff34b4576623d31107c 100644 (file)
@@ -25,6 +25,7 @@ AT_INIT
 
 AT_TESTED([bison])
 
 
 AT_TESTED([bison])
 
+m4_include([input.at])
 m4_include([output.at])
 m4_include([sets.at])
 m4_include([reduce.at])
 m4_include([output.at])
 m4_include([sets.at])
 m4_include([reduce.at])