# 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 3 of the License, 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, see . 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 #include 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