]>
git.saurik.com Git - bison.git/blob - src/system.h
63157904fb69f6f4aedea4f3094f3e8f41c0c161
   1 /* System-dependent definitions for Bison. 
   3    Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free 
   4    Software Foundation, Inc. 
   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) 
  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. 
  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.  */ 
  20 #ifndef BISON_SYSTEM_H 
  21 #define BISON_SYSTEM_H 
  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 
  44 #include "unlocked-io.h" 
  47 # include <sys/types.h> 
  55 # include <inttypes.h> 
  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; 
  71 /*---------------------. 
  72 | Missing prototypes.  | 
  73 `---------------------*/ 
  77 /* From lib/basename.c. */ 
  78 char *base_name (char const *name
); 
  85 /* Use this to suppress gcc's `...may be used before initialized' 
  88 # define IF_LINT(Code) Code 
  90 # define IF_LINT(Code) /* empty */ 
  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 */ 
 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 
 108 #ifndef ATTRIBUTE_NORETURN 
 109 # define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) 
 112 #ifndef ATTRIBUTE_UNUSED 
 113 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) 
 123 #define _(Msgid)  gettext (Msgid) 
 124 #define N_(Msgid) (Msgid) 
 127 /*-------------------------------. 
 128 | Fix broken compilation flags.  | 
 129 `-------------------------------*/ 
 132 # define LOCALEDIR "/usr/local/share/locale" 
 147 #define obstack_chunk_alloc xmalloc 
 148 #define obstack_chunk_free  free 
 151 #define obstack_sgrow(Obs, Str) \ 
 152   obstack_grow (Obs, Str, strlen (Str)) 
 154 #define obstack_fgrow1(Obs, Format, Arg1)       \ 
 157   sprintf (buf, Format, Arg1);                  \ 
 158   obstack_grow (Obs, buf, strlen (buf));        \ 
 161 #define obstack_fgrow2(Obs, Format, Arg1, Arg2) \ 
 164   sprintf (buf, Format, Arg1, Arg2);            \ 
 165   obstack_grow (Obs, buf, strlen (buf));        \ 
 168 #define obstack_fgrow3(Obs, Format, Arg1, Arg2, Arg3)   \ 
 171   sprintf (buf, Format, Arg1, Arg2, Arg3);              \ 
 172   obstack_grow (Obs, buf, strlen (buf));                \ 
 175 #define obstack_fgrow4(Obs, Format, Arg1, Arg2, Arg3, Arg4)     \ 
 178   sprintf (buf, Format, Arg1, Arg2, Arg3, Arg4);                \ 
 179   obstack_grow (Obs, buf, strlen (buf));                        \ 
 184 /*-----------------------------------------. 
 185 | Extensions to use for the output files.  | 
 186 `-----------------------------------------*/ 
 189 # define OUTPUT_EXT ".output" 
 193 # define TAB_EXT ".tab" 
 196 #ifndef DEFAULT_TMPDIR 
 197 # define DEFAULT_TMPDIR "/tmp" 
 202 /*---------------------. 
 203 | Free a linked list.  | 
 204 `---------------------*/ 
 206 #define LIST_FREE(Type, List)                   \ 
 208   Type *_node, *_next;                          \ 
 209   for (_node = List; _node; _node = _next)      \ 
 211       _next = _node->next;                      \ 
 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))) 
 222 /*---------------------------------------------. 
 223 | Debugging memory allocation (must be last).  | 
 224 `---------------------------------------------*/ 
 227 #  define DMALLOC_FUNC_CHECK 
 228 #  include <dmalloc.h> 
 229 # endif /* WITH_DMALLOC */ 
 231 #endif  /* ! BISON_SYSTEM_H */