1 /* System-dependent definitions for Bison. 2 3 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free 4 Software Foundation, Inc. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software Foundation, 18 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ 19 20 #ifndef BISON_SYSTEM_H 21 #define BISON_SYSTEM_H 22 23 /* flex 2.5.31 gratutiously defines macros like INT8_MIN. But this 24 runs afoul of pre-C99 compilers that have <inttypes.h> or 25 <stdint.h>, which are included below if available. It also runs 26 afoul of pre-C99 compilers that define these macros in <limits.h>. */ 27 #if ! defined __STDC_VERSION__ || __STDC_VERSION__ < 199901 28 # undef INT8_MIN 29 # undef INT16_MIN 30 # undef INT32_MIN 31 # undef INT8_MAX 32 # undef INT16_MAX 33 # undef UINT8_MAX 34 # undef INT32_MAX 35 # undef UINT16_MAX 36 # undef UINT32_MAX 37 #endif 38 39 #include <limits.h> 40 #include <stddef.h> 41 #include <stdlib.h> 42 #include <string.h> 43 44 #include "unlocked-io.h" 45 46 #if HAVE_SYS_TYPES_H 47 # include <sys/types.h> 48 #endif 49 50 #if HAVE_UNISTD_H 51 # include <unistd.h> 52 #endif 53 54 #if HAVE_INTTYPES_H 55 # include <inttypes.h> 56 #endif 57 #if HAVE_STDINT_H 58 # include <stdint.h> 59 #endif 60 61 #if ! HAVE_UINTPTR_T 62 /* This isn't perfect, but it's good enough for Bison, which needs 63 only to hash pointers. */ 64 typedef size_t uintptr_t; 65 #endif 66 67 #include <verify.h> 68 #include <xalloc.h> 69 70 71 /*---------------------. 72 | Missing prototypes. | 73 `---------------------*/ 74 75 #include <stpcpy.h> 76 77 /* From lib/basename.c. */ 78 char *base_name (char const *name); 79 80 81 /*-----------------. 82 | GCC extensions. | 83 `-----------------*/ 84 85 /* Use this to suppress gcc's `...may be used before initialized' 86 warnings. */ 87 #ifdef lint 88 # define IF_LINT(Code) Code 89 #else 90 # define IF_LINT(Code) /* empty */ 91 #endif 92 93 #ifndef __attribute__ 94 /* This feature is available in gcc versions 2.5 and later. */ 95 # if (! defined __GNUC__ || __GNUC__ < 2 \ 96 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__) 97 # define __attribute__(Spec) /* empty */ 98 # endif 99 #endif 100 101 /* The __-protected variants of `format' and `printf' attributes 102 are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ 103 #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) 104 # define __format__ format 105 # define __printf__ printf 106 #endif 107 108 #ifndef ATTRIBUTE_NORETURN 109 # define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) 110 #endif 111 112 #ifndef ATTRIBUTE_UNUSED 113 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) 114 #endif 115 116 /*------. 117 | NLS. | 118 `------*/ 119 120 #include <locale.h> 121 122 #include <gettext.h> 123 #define _(Msgid) gettext (Msgid) 124 #define N_(Msgid) (Msgid) 125 126 127 /*-------------------------------. 128 | Fix broken compilation flags. | 129 `-------------------------------*/ 130 131 #ifndef LOCALEDIR 132 # define LOCALEDIR "/usr/local/share/locale" 133 #endif 134 135 136 /*-----------. 137 | Booleans. | 138 `-----------*/ 139 140 #include <stdbool.h> 141 142 143 /*-----------. 144 | Obstacks. | 145 `-----------*/ 146 147 #define obstack_chunk_alloc xmalloc 148 #define obstack_chunk_free free 149 #include <obstack.h> 150 151 #define obstack_sgrow(Obs, Str) \ 152 obstack_grow (Obs, Str, strlen (Str)) 153 154 #define obstack_fgrow1(Obs, Format, Arg1) \ 155 do { \ 156 char buf[4096]; \ 157 sprintf (buf, Format, Arg1); \ 158 obstack_grow (Obs, buf, strlen (buf)); \ 159 } while (0) 160 161 #define obstack_fgrow2(Obs, Format, Arg1, Arg2) \ 162 do { \ 163 char buf[4096]; \ 164 sprintf (buf, Format, Arg1, Arg2); \ 165 obstack_grow (Obs, buf, strlen (buf)); \ 166 } while (0) 167 168 #define obstack_fgrow3(Obs, Format, Arg1, Arg2, Arg3) \ 169 do { \ 170 char buf[4096]; \ 171 sprintf (buf, Format, Arg1, Arg2, Arg3); \ 172 obstack_grow (Obs, buf, strlen (buf)); \ 173 } while (0) 174 175 #define obstack_fgrow4(Obs, Format, Arg1, Arg2, Arg3, Arg4) \ 176 do { \ 177 char buf[4096]; \ 178 sprintf (buf, Format, Arg1, Arg2, Arg3, Arg4); \ 179 obstack_grow (Obs, buf, strlen (buf)); \ 180 } while (0) 181 182 183 184 /*-----------------------------------------. 185 | Extensions to use for the output files. | 186 `-----------------------------------------*/ 187 188 #ifndef OUTPUT_EXT 189 # define OUTPUT_EXT ".output" 190 #endif 191 192 #ifndef TAB_EXT 193 # define TAB_EXT ".tab" 194 #endif 195 196 #ifndef DEFAULT_TMPDIR 197 # define DEFAULT_TMPDIR "/tmp" 198 #endif 199 200 201 202 /*---------------------. 203 | Free a linked list. | 204 `---------------------*/ 205 206 #define LIST_FREE(Type, List) \ 207 do { \ 208 Type *_node, *_next; \ 209 for (_node = List; _node; _node = _next) \ 210 { \ 211 _next = _node->next; \ 212 free (_node); \ 213 } \ 214 } while (0) 215 216 217 /* Assertions. <assert.h>'s assertions are too heavyweight, and can 218 be disabled too easily, so implement it separately here. */ 219 #define assert(x) ((void) ((x) || (abort (), 0))) 220 221 222 /*---------------------------------------------. 223 | Debugging memory allocation (must be last). | 224 `---------------------------------------------*/ 225 226 # if WITH_DMALLOC 227 # define DMALLOC_FUNC_CHECK 228 # include <dmalloc.h> 229 # endif /* WITH_DMALLOC */ 230 231 #endif /* ! BISON_SYSTEM_H */ 232