From b9cecb91a08fa4baa73a5e12a83611b41507a022 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sat, 29 Dec 2001 14:26:49 +0000 Subject: [PATCH] * 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. --- ChangeLog | 10 ++++ src/output.c | 20 +++++++ tests/Makefile.am | 3 +- tests/headers.at | 127 ++++++++++++++++++++++++++++++++++++++++++++ tests/regression.at | 53 ------------------ tests/testsuite.at | 1 + 6 files changed, 160 insertions(+), 54 deletions(-) create mode 100644 tests/headers.at diff --git a/ChangeLog b/ChangeLog index 50a9cc6c..5a9f6f99 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2001-12-29 Akim Demaille + + * 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. + + 2001-12-29 Akim Demaille * src/gram.h (rule_s): Member `assoc' is of type `associativity'. diff --git a/src/output.c b/src/output.c index 60b79790..4b1f999e 100644 --- a/src/output.c +++ b/src/output.c @@ -1128,6 +1128,26 @@ yystype;\n\ 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; diff --git a/tests/Makefile.am b/tests/Makefile.am index c20501cf..caf1d9b3 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -25,7 +25,8 @@ MAINTAINERCLEANFILES = Makefile.in $(TESTSUITE) 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 diff --git a/tests/headers.at b/tests/headers.at new file mode 100644 index 00000000..5e2facb4 --- /dev/null +++ b/tests/headers.at @@ -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 +#include + +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 diff --git a/tests/regression.at b/tests/regression.at index 9d55cf64..76170124 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -478,28 +478,6 @@ AT_CLEANUP -## ---------------------- ## -## %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. ## ## ----------------- ## @@ -561,37 +539,6 @@ 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]) - - - ## -------------- ## ## Web2c Report. ## ## -------------- ## diff --git a/tests/testsuite.at b/tests/testsuite.at index 7005519f..eaaddbbf 100644 --- a/tests/testsuite.at +++ b/tests/testsuite.at @@ -28,6 +28,7 @@ AT_TESTED([bison]) 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]) -- 2.47.2