]> git.saurik.com Git - bison.git/commitdiff
Test and fix the #line outputs.
authorAkim Demaille <akim@epita.fr>
Tue, 19 Mar 2002 08:16:25 +0000 (08:16 +0000)
committerAkim Demaille <akim@epita.fr>
Tue, 19 Mar 2002 08:16:25 +0000 (08:16 +0000)
* tests/atlocal.at (GCC): New.
* tests/synclines.at (AT_TEST_SYNCLINE): New macro.
(Prologue synch line, ,%union synch line, Postprologue synch line)
(Action synch line, Epilogue synch line): New tests.
* src/reader.c (parse_union_decl): Define the muscle stype_line.
* data/bison.simple, data/bison.c++: Use it.

ChangeLog
data/bison.c++
data/bison.simple
src/reader.c
tests/Makefile.am
tests/atlocal.in
tests/synclines.at [new file with mode: 0644]
tests/testsuite.at

index 28b21652633ce39e86e2945dcc85b7333b1174c3..3b522ae973fa9f3170907c6aa1a262ea72fd3548 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2002-03-19  Akim Demaille  <akim@epita.fr>
+
+       Test and fix the #line outputs.
+
+       * tests/atlocal.at (GCC): New.
+       * tests/synclines.at (AT_TEST_SYNCLINE): New macro.
+       (Prologue synch line, ,%union synch line, Postprologue synch line)
+       (Action synch line, Epilogue synch line): New tests.
+       * src/reader.c (parse_union_decl): Define the muscle stype_line.
+       * data/bison.simple, data/bison.c++: Use it.
+
+       
 2002-03-19  Akim Demaille  <akim@epita.fr>
 
        * tests/regression.at (%nonassoc and eof, Unresolved SR Conflicts)
index d081ee01040d921cdbf74d65888405b3e1197d49..87303be90c2c1d8986725a78192e8179226d907d 100644 (file)
@@ -109,6 +109,9 @@ b4_token_defines
 #endif
 
 #ifndef YYSTYPE
+m4_ifdef([b4_stype_line],
+[#line b4_stype_line "b4_filename"
+])dnl
 typedef b4_stype
 yystype;
 # define YYSTYPE yystype
index 87f4188dfbb4cb6a6edc6e65b1ee7de155d02abf..1648e0916062b24a2137282d5eca87d7bfd57439 100644 (file)
@@ -110,6 +110,9 @@ b4_prologue
 #endif
 
 #ifndef YYSTYPE
+m4_ifdef([b4_stype_line],
+[#line b4_stype_line "b4_filename"
+])dnl
 typedef b4_stype yystype;
 # define YYSTYPE yystype
 #endif
@@ -1161,6 +1164,9 @@ m4_if(b4_defines_flag, 0, [],
 b4_token_defines(b4_tokens)
 
 #ifndef YYSTYPE
+m4_ifdef([b4_stype_line],
+[#line b4_stype_line "b4_filename"
+])dnl
 typedef b4_stype
 yystype;
 # define YYSTYPE yystype
index 54f32f56e2d5d4843483a85a71e3da0dc35670e4..5af4df15ce4869e0e7f39ce2841c1354386dc5fe 100644 (file)
@@ -759,6 +759,7 @@ parse_union_decl (void)
 
   typed = 1;
 
+  MUSCLE_INSERT_INT ("stype_line", lineno);
   obstack_init (&union_obstack);
   obstack_sgrow (&union_obstack, "union");
 
index e7cf96982da7f2529f86697923460843d55759fd..e7f48e26c84861e768bb80874686f355ca3b3f15 100644 (file)
@@ -47,7 +47,8 @@ TESTSUITE_AT = \
        testsuite.at \
        input.at \
        output.at sets.at reduce.at \
-       headers.at actions.at conflicts.at calc.at \
+       synclines.at headers.at actions.at conflicts.at \
+       calc.at \
         torture.at regression.at \
         semantic.at
 
index a189b2d631ec5295287a32f2accdecf53636ab07..31cc12cfd889906e70672ae1d0b8e72599a7e254 100644 (file)
@@ -8,3 +8,6 @@ CFLAGS='@CFLAGS@ @WARNING_CFLAGS@ @WERROR_CFLAGS@'
 
 # We need `config.h'.
 CPPFLAGS="-I$abs_top_builddir @CPPFLAGS@"
+
+# Is the compiler GCC?
+GCC='@GCC@'
diff --git a/tests/synclines.at b/tests/synclines.at
new file mode 100644 (file)
index 0000000..c7501fd
--- /dev/null
@@ -0,0 +1,120 @@
+# Executing Actions.                               -*- 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([[User Actions.]])
+
+# AT_TEST_SYNCLINE(TITLE, INPUT, ERROR-MSG)
+# -----------------------------------------
+# Check that compiling the parser produced from INPUT cause GCC
+# to issue ERROR-MSG.
+m4_define([AT_TEST_SYNCLINE],
+[AT_SETUP([$1])
+
+# I'm not sure I can find a generic scheme to check the location
+# of an error, so we keep this for GCC only.
+AT_CHECK([test "$GCC" = yes || exit 77])
+
+AT_DATA([[input.y]],
+[$2])
+
+AT_CHECK([bison input.y -o input.c])
+AT_CHECK([$CC $CFLAGS $CPPFLAGS input.c -o input], 1, [], [$3])
+AT_CLEANUP
+])
+
+
+## --------------------- ##
+## Prologue synch line.  ##
+## --------------------- ##
+
+
+AT_TEST_SYNCLINE([Prologue synch line],
+[[%{
+#error "2"
+%}
+%%
+exp: '0';
+]],
+[input.y:2: #error "2"
+])
+
+
+## ------------------- ##
+## %union synch line.  ##
+## ------------------- ##
+
+AT_TEST_SYNCLINE([%union synch line],
+[[%union {
+#error "2"
+}
+%%
+exp: '0';
+]],
+[input.y:2: #error "2"
+])
+
+
+## ------------------------- ##
+## Postprologue synch line.  ##
+## ------------------------- ##
+
+AT_TEST_SYNCLINE([Postprologue synch line],
+[[%{
+/* Nothing here. */
+%}
+%union
+{
+  int ival;
+}
+%{
+#error "9"
+%}
+%%
+exp: '0';
+]],
+[input.y:9: #error "9"
+])
+
+
+## ------------------- ##
+## Action synch line.  ##
+## ------------------- ##
+
+AT_TEST_SYNCLINE([Action synch line],
+[[%%
+exp:
+{
+#error "4"
+};
+]],
+[input.y:4: #error "4"
+])
+
+
+## --------------------- ##
+## Epilogue synch line.  ##
+## --------------------- ##
+
+AT_TEST_SYNCLINE([Epilogue synch line],
+[[%%
+exp: '0';
+%%
+#error "4"
+]],
+[input.y:4: #error "4"
+])
index dd83d23bb55575ab54a21c380c1e685101744405..6c43369b87f9c9d80a49c2f29f1c9913bfd3cf26 100644 (file)
@@ -37,6 +37,9 @@ m4_include([sets.at])
 # Testing grammar reduction.
 m4_include([reduce.at])
 
+# Testing that #lines are correct.
+m4_include([synclines.at])
+
 # Testing that headers are sane.
 m4_include([headers.at])