[Top][All Lists]
[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])
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- FYI: Both: Bad @n,
Akim Demaille <=