bison-patches
[Top][All Lists]
Advanced

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

29-fyi-export-yylloc.patch


From: Akim Demaille
Subject: 29-fyi-export-yylloc.patch
Date: Sat, 29 Dec 2001 15:15:38 +0100

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        * src/output.c (header_output): Don't forget to export YYLTYPE and
        yylloc.
        * tests/headers.at (export YYLTYPE): New, make sure it does.
        * tests/regression.at (%union and --defines, Invalid CPP headers):
        Move to...
        * tests/headers.at: here.
        
        
Index: src/output.c
--- src/output.c Fri, 28 Dec 2001 18:45:26 +0100 akim
+++ src/output.c Sat, 29 Dec 2001 09:48:18 +0100 akim
@@ -1128,6 +1128,26 @@
   if (!pure_parser)
     fprintf (out, "\nextern YYSTYPE %slval;\n",
             spec_name_prefix);
+
+  if (locations_flag)
+    {
+      fputs ("\n\n", out);
+      fprintf (out, "\
+#ifndef YYLTYPE\n\
+typedef struct yyltype\n\
+{\n\
+  int first_line;\n\
+  int first_column;\n\
+  int last_line;\n\
+  int last_column;\n\
+} yyltype;\n\
+# define YYLTYPE yyltype\n\
+#endif\n");
+      if (!pure_parser)
+       fprintf (out, "\nextern YYLTYPE %slloc;\n",
+                spec_name_prefix);
+    }
+
   if (semantic_parser)
     {
       int i;
Index: tests/Makefile.am
--- tests/Makefile.am Fri, 28 Dec 2001 17:49:11 +0100 akim
+++ tests/Makefile.am Sat, 29 Dec 2001 09:40:30 +0100 akim
@@ -25,7 +25,8 @@
 
 TESTSUITE_AT = \
        testsuite.at \
-       output.at sets.at reduce.at actions.at calc.at \
+       output.at sets.at reduce.at \
+       headers.at actions.at calc.at \
         torture.at regression.at \
         semantic.at
 
Index: tests/regression.at
--- tests/regression.at Fri, 28 Dec 2001 15:59:49 +0100 akim
+++ tests/regression.at Sat, 29 Dec 2001 09:30:25 +0100 akim
@@ -478,28 +478,6 @@ exp: ;
 
 
 
-## ---------------------- ##
-## %union and --defines.  ##
-## ---------------------- ##
-
-
-AT_SETUP([%union and --defines])
-
-AT_DATA([input.y],
-[%union
-{
-  int   integer;
-  char *string ;
-}
-%%
-exp: {};
-])
-
-AT_CHECK([bison --defines input.y])
-
-AT_CLEANUP
-
-
 ## ----------------- ##
 ## Invalid input 1.  ##
 ## ----------------- ##
@@ -558,37 +536,6 @@ input.y:2: fatal error: no input grammar
 ]])
 
 AT_CLEANUP
-
-
-
-## --------------------- ##
-## Invalid CPP headers.  ##
-## --------------------- ##
-
-# AT_TEST_CPP_GUARD_H([INPUT-FILE-BASE)
-# -------------------------------------
-m4_define([AT_TEST_CPP_GUARD_H],
-[AT_SETUP([Invalid CPP guards: $1])
-
-# Possibly create inner directories.
-dirname=`AS_DIRNAME([$1])`
-AS_MKDIR_P([$dirname])
-
-AT_DATA([$1.y],
-[%%
-dummy:
-])
-
-AT_CHECK([bison --defines=$1.h $1.y])
-
-# CPP should be happy with it.
-AT_CHECK([$CC -E $1.h], 0, [ignore])
-
-AT_CLEANUP
-])
-
-AT_TEST_CPP_GUARD_H([input/input])
-AT_TEST_CPP_GUARD_H([9foo])
 
 
 
Index: tests/testsuite.at
--- tests/testsuite.at Fri, 28 Dec 2001 17:49:11 +0100 akim
+++ tests/testsuite.at Sat, 29 Dec 2001 09:30:07 +0100 akim
@@ -28,6 +28,7 @@
 m4_include([output.at])
 m4_include([sets.at])
 m4_include([reduce.at])
+m4_include([headers.at])
 m4_include([actions.at])
 m4_include([calc.at])
 m4_include([torture.at])
Index: tests/headers.at
--- tests/headers.at Sat, 29 Dec 2001 10:06:24 +0100 akim
+++ tests/headers.at Sat, 29 Dec 2001 10:06:02 +0100 akim
@@ -0,0 +1,127 @@
+# Bison Parser Headers.                               -*- Autotest -*-
+# Copyright 2001 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([[Parser Headers.]])
+
+
+## ---------------------- ##
+## %union and --defines.  ##
+## ---------------------- ##
+
+
+AT_SETUP([%union and --defines])
+
+AT_DATA([input.y],
+[%union
+{
+  int   integer;
+  char *string ;
+}
+%%
+exp: {};
+])
+
+AT_CHECK([bison --defines input.y])
+
+AT_CLEANUP
+
+
+
+## --------------------- ##
+## Invalid CPP headers.  ##
+## --------------------- ##
+
+# AT_TEST_CPP_GUARD_H([INPUT-FILE-BASE)
+# -------------------------------------
+m4_define([AT_TEST_CPP_GUARD_H],
+[AT_SETUP([Invalid CPP guards: $1])
+
+# Possibly create inner directories.
+dirname=`AS_DIRNAME([$1])`
+AS_MKDIR_P([$dirname])
+
+AT_DATA([$1.y],
+[%%
+dummy:
+])
+
+AT_CHECK([bison --defines=$1.h $1.y])
+
+# CPP should be happy with it.
+AT_CHECK([$CC -E $1.h], 0, [ignore])
+
+AT_CLEANUP
+])
+
+AT_TEST_CPP_GUARD_H([input/input])
+AT_TEST_CPP_GUARD_H([9foo])
+
+
+
+## ---------------- ##
+## export YYLTYPE.  ##
+## ---------------- ##
+
+
+AT_SETUP([export YYLTYPE])
+
+AT_DATA([input.y],
+[%locations
+%{
+#include <stdio.h>
+#include <stdlib.h>
+
+static int
+yylex (void)
+{
+  return EOF;
+}
+
+static void
+yyerror (const char *msg)
+{
+  fprintf (stderr, "%s\n", msg);
+}
+
+%}
+%%
+exp:;
+])
+
+AT_CHECK([bison --defines input.y -o input.c])
+
+# YYLTYPE should be defined, and YYLLOC declared.
+AT_DATA([caller.c],
+[[#include "input.h"
+YYLTYPE *yyllocp = &yylloc;
+
+int yyparse (void);
+
+int
+main (void)
+{
+  return yyparse ();
+}
+]])
+
+# Link and execute, just to make sure everything is fine (and in
+# particular, that YYLLOC is indeed defined somewhere).
+AT_CHECK([$CC $CFLAGS $CPPFLAGS caller.c input.c -o caller], 0, [], [ignore])
+AT_CHECK([caller])
+
+AT_CLEANUP



reply via email to

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