OLD | NEW |
(Empty) | |
| 1 # Bison Parser Headers. -*- Autotest -*- |
| 2 # Copyright (C) 2001, 2002, 2006, 2007 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 3 of the License, or |
| 7 # (at your option) 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, see <http://www.gnu.org/licenses/>. |
| 16 |
| 17 AT_BANNER([[Parser Headers.]]) |
| 18 |
| 19 |
| 20 ## ---------------------- ## |
| 21 ## %union and --defines. ## |
| 22 ## ---------------------- ## |
| 23 |
| 24 |
| 25 AT_SETUP([%union and --defines]) |
| 26 |
| 27 AT_DATA([input.y], |
| 28 [%union |
| 29 { |
| 30 int integer; |
| 31 char *string ; |
| 32 } |
| 33 %% |
| 34 exp: {}; |
| 35 ]) |
| 36 |
| 37 AT_BISON_CHECK([--defines input.y]) |
| 38 |
| 39 AT_CLEANUP |
| 40 |
| 41 |
| 42 |
| 43 ## --------------------- ## |
| 44 ## Invalid CPP headers. ## |
| 45 ## --------------------- ## |
| 46 |
| 47 # AT_TEST_CPP_GUARD_H([INPUT-FILE-BASE) |
| 48 # ------------------------------------- |
| 49 m4_define([AT_TEST_CPP_GUARD_H], |
| 50 [AT_SETUP([Invalid CPP guards: $1]) |
| 51 |
| 52 # Possibly create inner directories. |
| 53 dirname=`AS_DIRNAME([$1])` |
| 54 AS_MKDIR_P([$dirname]) |
| 55 |
| 56 AT_DATA_GRAMMAR([$1.y], |
| 57 [%{ |
| 58 #include <$1.h> |
| 59 void yyerror (const char *); |
| 60 int yylex (void); |
| 61 %} |
| 62 %% |
| 63 dummy:; |
| 64 %% |
| 65 #include <$1.h> |
| 66 ]) |
| 67 |
| 68 AT_BISON_CHECK([--defines=$1.h --output=y.tab.c $1.y]) |
| 69 |
| 70 AT_COMPILE([y.tab.o], [-I. -c y.tab.c]) |
| 71 |
| 72 AT_CLEANUP |
| 73 ]) |
| 74 |
| 75 AT_TEST_CPP_GUARD_H([input/input]) |
| 76 AT_TEST_CPP_GUARD_H([9foo]) |
| 77 |
| 78 |
| 79 |
| 80 ## ---------------- ## |
| 81 ## export YYLTYPE. ## |
| 82 ## ---------------- ## |
| 83 |
| 84 |
| 85 AT_SETUP([export YYLTYPE]) |
| 86 |
| 87 AT_DATA_GRAMMAR([input.y], |
| 88 [%locations |
| 89 |
| 90 %name-prefix "my_" |
| 91 %{ |
| 92 #include <stdio.h> |
| 93 #include <stdlib.h> |
| 94 |
| 95 static int |
| 96 my_lex (void) |
| 97 { |
| 98 return EOF; |
| 99 } |
| 100 |
| 101 static void |
| 102 my_error (const char *msg) |
| 103 { |
| 104 fprintf (stderr, "%s\n", msg); |
| 105 } |
| 106 |
| 107 %} |
| 108 %% |
| 109 exp:; |
| 110 ]) |
| 111 |
| 112 AT_BISON_CHECK([--defines -o input.c input.y]) |
| 113 |
| 114 # YYLTYPE should be defined, and MY_LLOC declared. |
| 115 AT_DATA([caller.c], |
| 116 [[#include "input.h" |
| 117 YYLTYPE *my_llocp = &my_lloc; |
| 118 |
| 119 int my_parse (void); |
| 120 |
| 121 int |
| 122 main (void) |
| 123 { |
| 124 return my_parse (); |
| 125 } |
| 126 ]]) |
| 127 |
| 128 # Link and execute, just to make sure everything is fine (and in |
| 129 # particular, that MY_LLOC is indeed defined somewhere). |
| 130 AT_COMPILE([caller.o], [-c caller.c]) |
| 131 AT_COMPILE([input.o], [-c input.c]) |
| 132 AT_COMPILE([caller], [caller.o input.o]) |
| 133 AT_PARSER_CHECK([./caller]) |
| 134 |
| 135 AT_CLEANUP |
OLD | NEW |