bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: Both: Bad @n


From: Akim Demaille
Subject: FYI: Both: Bad @n
Date: 07 Feb 2002 18:14:28 +0100
User-agent: Gnus/5.0808 (Gnus v5.8.8) XEmacs/21.4 (Common Lisp)

Index: ChangeLog
from  Akim Demaille  <address@hidden>

        * tests/input.at: New.

Index: src/reader.c
===================================================================
RCS file: /cvsroot/bison/bison/src/reader.c,v
retrieving revision 1.72.2.26
diff -u -u -r1.72.2.26 reader.c
--- src/reader.c 7 Jan 2002 08:40:29 -0000 1.72.2.26
+++ src/reader.c 7 Feb 2002 17:13:11 -0000
@@ -304,13 +304,15 @@
 /*-----------------------------------------------------------------.
 | 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 address@hidden' with   |
 | 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);
@@ -321,11 +323,25 @@
     }
   else if (isdigit (c) || c == '-')
     {
-      int n;
+      int n, i;
 
       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;
     }
@@ -1103,7 +1119,7 @@
 
            case '@':
              copy_at (finput, &action_obstack,
-                      stack_offset);
+                      rule, stack_offset);
              break;
 
            case EOF:
@@ -1203,7 +1219,7 @@
          break;
 
        case '@':
-         copy_at (finput, &guard_obstack, stack_offset);
+         copy_at (finput, &guard_obstack, rule, stack_offset);
          break;
 
        case EOF:
Index: tests/Makefile.am
===================================================================
RCS file: /cvsroot/bison/bison/tests/Makefile.am,v
retrieving revision 1.5.2.13
diff -u -u -r1.5.2.13 Makefile.am
--- tests/Makefile.am 6 Jan 2002 20:57:20 -0000 1.5.2.13
+++ tests/Makefile.am 7 Feb 2002 17:13:11 -0000
@@ -45,7 +45,7 @@
 
 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
Index: tests/Makefile.in
===================================================================
RCS file: /cvsroot/bison/bison/tests/Attic/Makefile.in,v
retrieving revision 1.3.2.23
diff -u -u -r1.3.2.23 Makefile.in
--- tests/Makefile.in 25 Jan 2002 11:29:31 -0000 1.3.2.23
+++ tests/Makefile.in 7 Feb 2002 17:13:11 -0000
@@ -110,7 +110,7 @@
 
 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
 
Index: tests/input.at
===================================================================
RCS file: tests/input.at
diff -N tests/input.at
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ tests/input.at 7 Feb 2002 17:13:11 -0000
@@ -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: tests/testsuite.at
===================================================================
RCS file: /cvsroot/bison/bison/tests/testsuite.at,v
retrieving revision 1.1.2.7
diff -u -u -r1.1.2.7 testsuite.at
--- tests/testsuite.at 13 Dec 2001 10:59:37 -0000 1.1.2.7
+++ tests/testsuite.at 7 Feb 2002 17:13:11 -0000
@@ -25,6 +25,7 @@
 
 AT_TESTED([bison])
 
+m4_include([input.at])
 m4_include([output.at])
 m4_include([sets.at])
 m4_include([reduce.at])



reply via email to

[Prev in Thread] Current Thread [Next in Thread]