| # Bison Parser Headers. -*- Autotest -*- |
| # Copyright (C) 2001, 2002, 2006 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., 51 Franklin Street, Fifth Floor, Boston, MA |
| # 02110-1301, 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_GRAMMAR([$1.y], |
| [%{ |
| #include <$1.h> |
| void yyerror (const char *); |
| int yylex (void); |
| %} |
| %% |
| dummy:; |
| %% |
| #include <$1.h> |
| ]) |
| |
| AT_CHECK([bison --defines=$1.h --output=y.tab.c $1.y]) |
| |
| AT_COMPILE([y.tab.o], [-I. -c y.tab.c]) |
| |
| AT_CLEANUP |
| ]) |
| |
| AT_TEST_CPP_GUARD_H([input/input]) |
| AT_TEST_CPP_GUARD_H([9foo]) |
| |
| |
| |
| ## ---------------- ## |
| ## export YYLTYPE. ## |
| ## ---------------- ## |
| |
| |
| AT_SETUP([export YYLTYPE]) |
| |
| AT_DATA_GRAMMAR([input.y], |
| [%locations |
| |
| %name-prefix="my_" |
| %{ |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| static int |
| my_lex (void) |
| { |
| return EOF; |
| } |
| |
| static void |
| my_error (const char *msg) |
| { |
| fprintf (stderr, "%s\n", msg); |
| } |
| |
| %} |
| %% |
| exp:; |
| ]) |
| |
| AT_CHECK([bison --defines -o input.c input.y]) |
| |
| # YYLTYPE should be defined, and MY_LLOC declared. |
| AT_DATA([caller.c], |
| [[#include "input.h" |
| YYLTYPE *my_llocp = &my_lloc; |
| |
| int my_parse (void); |
| |
| int |
| main (void) |
| { |
| return my_parse (); |
| } |
| ]]) |
| |
| # Link and execute, just to make sure everything is fine (and in |
| # particular, that MY_LLOC is indeed defined somewhere). |
| AT_COMPILE([caller.o], [-c caller.c]) |
| AT_COMPILE([input.o], [-c input.c]) |
| AT_COMPILE([caller], [caller.o input.o]) |
| AT_PARSER_CHECK([./caller]) |
| |
| AT_CLEANUP |