1 # Bison Parser Headers. -*- Autotest -*- 2 # Copyright (C) 2001, 2002, 2006 Free Software Foundation, Inc. 3 4 # This program is free software; you can redistribute it and/or modify 5 # it under the terms of the GNU General Public License as published by 6 # the Free Software Foundation; either version 2, or (at your option) 7 # any later version. 8 9 # This program is distributed in the hope that it will be useful, 10 # but WITHOUT ANY WARRANTY; without even the implied warranty of 11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 # GNU General Public License for more details. 13 14 # You should have received a copy of the GNU General Public License 15 # along with this program; if not, write to the Free Software 16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 17 # 02110-1301, USA. 18 19 AT_BANNER([[Parser Headers.]]) 20 21 22 ## ---------------------- ## 23 ## %union and --defines. ## 24 ## ---------------------- ## 25 26 27 AT_SETUP([%union and --defines]) 28 29 AT_DATA([input.y], 30 [%union 31 { 32 int integer; 33 char *string ; 34 } 35 %% 36 exp: {}; 37 ]) 38 39 AT_CHECK([bison --defines input.y]) 40 41 AT_CLEANUP 42 43 44 45 ## --------------------- ## 46 ## Invalid CPP headers. ## 47 ## --------------------- ## 48 49 # AT_TEST_CPP_GUARD_H([INPUT-FILE-BASE) 50 # ------------------------------------- 51 m4_define([AT_TEST_CPP_GUARD_H], 52 [AT_SETUP([Invalid CPP guards: $1]) 53 54 # Possibly create inner directories. 55 dirname=`AS_DIRNAME([$1])` 56 AS_MKDIR_P([$dirname]) 57 58 AT_DATA_GRAMMAR([$1.y], 59 [%{ 60 #include <$1.h> 61 void yyerror (const char *); 62 int yylex (void); 63 %} 64 %% 65 dummy:; 66 %% 67 #include <$1.h> 68 ]) 69 70 AT_CHECK([bison --defines=$1.h --output=y.tab.c $1.y]) 71 72 AT_COMPILE([y.tab.o], [-I. -c y.tab.c]) 73 74 AT_CLEANUP 75 ]) 76 77 AT_TEST_CPP_GUARD_H([input/input]) 78 AT_TEST_CPP_GUARD_H([9foo]) 79 80 81 82 ## ---------------- ## 83 ## export YYLTYPE. ## 84 ## ---------------- ## 85 86 87 AT_SETUP([export YYLTYPE]) 88 89 AT_DATA_GRAMMAR([input.y], 90 [%locations 91 92 %name-prefix="my_" 93 %{ 94 #include <stdio.h> 95 #include <stdlib.h> 96 97 static int 98 my_lex (void) 99 { 100 return EOF; 101 } 102 103 static void 104 my_error (const char *msg) 105 { 106 fprintf (stderr, "%s\n", msg); 107 } 108 109 %} 110 %% 111 exp:; 112 ]) 113 114 AT_CHECK([bison --defines -o input.c input.y]) 115 116 # YYLTYPE should be defined, and MY_LLOC declared. 117 AT_DATA([caller.c], 118 [[#include "input.h" 119 YYLTYPE *my_llocp = &my_lloc; 120 121 int my_parse (void); 122 123 int 124 main (void) 125 { 126 return my_parse (); 127 } 128 ]]) 129 130 # Link and execute, just to make sure everything is fine (and in 131 # particular, that MY_LLOC is indeed defined somewhere). 132 AT_COMPILE([caller.o], [-c caller.c]) 133 AT_COMPILE([input.o], [-c input.c]) 134 AT_COMPILE([caller], [caller.o input.o]) 135 AT_PARSER_CHECK([./caller]) 136 137 AT_CLEANUP 138