]>
git.saurik.com Git - bison.git/blob - src/system.h
   1 /* System-dependent definitions for Bison. 
   2    Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. 
   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) 
   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. 
  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 Foundation, 
  16    Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */ 
  18 #ifndef BISON_SYSTEM_H 
  19 #define BISON_SYSTEM_H 
  25 /* AIX requires this to be the first thing in the file.  */ 
  27 # define alloca(Size) __builtin_alloca (Size) 
  35 #   ifndef alloca /* predefined by HP cc +Olibcalls */ 
  44 /* Verify a requirement at compile-time (unlike assert, which is runtime).  */ 
  45 #define verify(name, assertion) struct name {char name[(assertion) ? 1 : -1];} 
  48 # include <sys/types.h> 
  55 /* The following test is to work around the gross typo in 
  56    systems like Sony NEWS-OS Release 4.0C, whereby EXIT_FAILURE 
  57    is defined to 0, not 1.  */ 
  60 # define EXIT_FAILURE 1 
  64 # define EXIT_SUCCESS 0 
  71 #if defined(STDC_HEADERS) || defined(HAVE_STRING_H) 
  73 /* An ANSI string.h and pre-ANSI memory.h might conflict.  */ 
  74 # if !defined(STDC_HEADERS) && defined(HAVE_MEMORY_H) 
  76 # endif /* not STDC_HEADERS and HAVE_MEMORY_H */ 
  77 #else /* not STDC_HEADERS and not HAVE_STRING_H */ 
  79 /* memory.h and strings.h conflict on some systems.  */ 
  80 #endif /* not STDC_HEADERS and not HAVE_STRING_H */ 
  87 /* From xstrndup.c.  */ 
  88 char *xstrndup (const char *s
, size_t n
); 
  96 extern int time_report
; 
  99 /*---------------------. 
 100 | Missing prototypes.  | 
 101 `---------------------*/ 
 103 #if defined HAVE_DECL_STPCPY && !HAVE_DECL_STPCPY 
 104 char *stpcpy (char *dest
, const char *src
); 
 107 #if defined HAVE_DECL_STRCHR && !HAVE_DECL_STRCHR 
 108 char *strchr (const char *s
, int c
); 
 111 #if defined HAVE_DECL_STRSPN && !HAVE_DECL_STRSPN 
 112 size_t strspn (const char *s
, const char *accept
); 
 115 #if defined HAVE_DECL_STRNLEN && !HAVE_DECL_STRNLEN 
 116 size_t strnlen (const char *s
, size_t maxlen
); 
 119 #if defined HAVE_DECL_MEMCHR && !HAVE_DECL_MEMCHR 
 120 void *memchr (const void *s
, int c
, size_t n
); 
 123 #if defined HAVE_DECL_MEMRCHR && !HAVE_DECL_MEMRCHR 
 124 void *memrchr (const void *s
, int c
, size_t n
); 
 133 /* Use this to suppress gcc's `...may be used before initialized' 
 136 # define IF_LINT(Code) Code 
 138 # define IF_LINT(Code) /* empty */ 
 141 #ifndef __attribute__ 
 142 /* This feature is available in gcc versions 2.5 and later.  */ 
 143 # if !defined (__GNUC__) || __GNUC__ < 2 || \ 
 144 (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__ 
 145 #  define __attribute__(Spec) /* empty */ 
 149 /* The __-protected variants of `format' and `printf' attributes 
 150    are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */ 
 151 #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) 
 152 # define __format__ format 
 153 # define __printf__ printf 
 156 #ifndef ATTRIBUTE_NORETURN 
 157 # define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) 
 160 #ifndef ATTRIBUTE_UNUSED 
 161 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) 
 172 # define setlocale(Category, Locale) 
 176 #define _(Msgid)  gettext (Msgid) 
 177 #define N_(Msgid) (Msgid) 
 180 /*-------------------------------. 
 181 | Fix broken compilation flags.  | 
 182 `-------------------------------*/ 
 185 # define LOCALEDIR "/usr/local/share/locale" 
 194 # include <stdbool.h> 
 196 typedef enum {false = 0, true = 1} bool; 
 204 # define obstack_chunk_alloc xmalloc 
 205 # define obstack_chunk_free  free 
 206 # include "obstack.h" 
 208 #define obstack_sgrow(Obs, Str) \ 
 209   obstack_grow (Obs, Str, strlen (Str)) 
 211 #define obstack_fgrow1(Obs, Format, Arg1)       \ 
 214   sprintf (buf, Format, Arg1);                  \ 
 215   obstack_grow (Obs, buf, strlen (buf));        \ 
 218 #define obstack_fgrow2(Obs, Format, Arg1, Arg2) \ 
 221   sprintf (buf, Format, Arg1, Arg2);            \ 
 222   obstack_grow (Obs, buf, strlen (buf));        \ 
 225 #define obstack_fgrow3(Obs, Format, Arg1, Arg2, Arg3)   \ 
 228   sprintf (buf, Format, Arg1, Arg2, Arg3);              \ 
 229   obstack_grow (Obs, buf, strlen (buf));                \ 
 232 #define obstack_fgrow4(Obs, Format, Arg1, Arg2, Arg3, Arg4)     \ 
 235   sprintf (buf, Format, Arg1, Arg2, Arg3, Arg4);                \ 
 236   obstack_grow (Obs, buf, strlen (buf));                        \ 
 241 /*-----------------------------------------. 
 242 | Extensions to use for the output files.  | 
 243 `-----------------------------------------*/ 
 247 # define EXT_TAB        "_tab" 
 248 # define EXT_OUTPUT     ".output" 
 252 #  define EXT_TAB       "_tab" 
 253 #  define EXT_OUTPUT    ".out" 
 256 #  define EXT_TAB       ".tab" 
 257 #  define EXT_OUTPUT    ".output" 
 258 # endif /* ! MSDOS */ 
 261 #ifndef DEFAULT_TMPDIR 
 262 # define DEFAULT_TMPDIR "/tmp" 
 267 /*---------------------. 
 268 | Free a linked list.  | 
 269 `---------------------*/ 
 271 #define LIST_FREE(Type, List)                   \ 
 273   Type *_node, *_next;                          \ 
 274   for (_node = List; _node; _node = _next)      \ 
 276       _next = _node->next;                      \ 
 282 /*---------------------------------------------. 
 283 | Debugging memory allocation (must be last).  | 
 284 `---------------------------------------------*/ 
 287 #  define DMALLOC_FUNC_CHECK 
 288 #  include <dmalloc.h> 
 289 # endif /* WITH_DMALLOC */ 
 291 #endif  /* ! BISON_SYSTEM_H */