]>
git.saurik.com Git - bison.git/blob - src/system.h
   1 /* System-dependent definitions for Bison. 
   3    Copyright (C) 2000-2007, 2009-2012 Free Software Foundation, Inc. 
   5    This program is free software: you can redistribute it and/or modify 
   6    it under the terms of the GNU General Public License as published by 
   7    the Free Software Foundation, either version 3 of the License, or 
   8    (at your option) any later version. 
  10    This program is distributed in the hope that it will be useful, 
  11    but WITHOUT ANY WARRANTY; without even the implied warranty of 
  12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  13    GNU General Public License for more details. 
  15    You should have received a copy of the GNU General Public License 
  16    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */ 
  18 #ifndef BISON_SYSTEM_H 
  19 #define BISON_SYSTEM_H 
  21 /* flex 2.5.31 gratutiously defines macros like INT8_MIN.  But this 
  22    runs afoul of pre-C99 compilers that have <inttypes.h> or 
  23    <stdint.h>, which are included below if available.  It also runs 
  24    afoul of pre-C99 compilers that define these macros in <limits.h>.  */ 
  25 #if ! defined __STDC_VERSION__ || __STDC_VERSION__ < 199901 
  43 # include <sys/types.h> 
  50 /* This isn't perfect, but it's good enough for Bison, which needs 
  51    only to hash pointers.  */ 
  52 typedef size_t uintptr_t; 
  60 #include <unlocked-io.h> 
  69 /* Use PACIFY_CC to indicate that Code is unimportant to the logic of Bison 
  70    but that it is necessary for suppressing compiler warnings.  For example, 
  71    Code might be a variable initializer that's always overwritten before the 
  74    PACIFY_CC is intended to be useful only as a comment as it does not alter 
  75    Code.  It is tempting to redefine PACIFY_CC so that it will suppress Code 
  76    when configuring without --enable-gcc-warnings.  However, that would mean 
  77    that, for maintainers, Bison would compile with potentially less warnings 
  78    and safer logic than it would for users.  Due to the overhead of M4, 
  79    suppressing Code is unlikely to offer any significant improvement in 
  80    Bison's performance anyway.  */ 
  81 #define PACIFY_CC(Code) Code 
  84 /* This feature is available in gcc versions 2.5 and later.  */ 
  85 # if (! defined __GNUC__ || __GNUC__ < 2 \ 
  86       || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__) 
  87 #  define __attribute__(Spec) /* empty */ 
  91 /* The __-protected variants of `format' and `printf' attributes 
  92    are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */ 
  93 #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) 
  94 # define __format__ format 
  95 # define __printf__ printf 
  98 #ifndef ATTRIBUTE_NORETURN 
  99 # define ATTRIBUTE_NORETURN __attribute__ ((__noreturn__)) 
 102 #ifndef ATTRIBUTE_UNUSED 
 103 # define ATTRIBUTE_UNUSED __attribute__ ((__unused__)) 
 106 #define FUNCTION_PRINT() fprintf (stderr, "%s: ", __func__) 
 115 #define _(Msgid)  gettext (Msgid) 
 116 #define N_(Msgid) (Msgid) 
 131 /* In the past, Bison defined aver to simply invoke abort in the case of 
 132    a failed assertion.  The rationale was that <assert.h>'s assertions 
 133    were too heavyweight and could be disabled too easily.  See 
 135    <http://lists.gnu.org/archive/html/bison-patches/2006-01/msg00080.html> 
 136    <http://lists.gnu.org/archive/html/bison-patches/2006-09/msg00111.html>. 
 138    However, normal assert output can be helpful during development and 
 139    in bug reports from users.  Moreover, it's not clear now that 
 140    <assert.h>'s assertions are significantly heavyweight.  Finally, if 
 141    users want to experiment with disabling assertions, it's debatable 
 142    whether it's our responsibility to stop them.  See discussion 
 144    <http://lists.gnu.org/archive/html/bison-patches/2009-09/msg00013.html>. 
 146    For now, we use assert but we call it aver throughout Bison in case 
 147    we later wish to try another scheme. 
 157 #define obstack_chunk_alloc xmalloc 
 158 #define obstack_chunk_free  free 
 161 #define obstack_sgrow(Obs, Str) \ 
 162   obstack_grow (Obs, Str, strlen (Str)) 
 164 #define obstack_fgrow1(Obs, Format, Arg1)       \ 
 167   sprintf (buf, Format, Arg1);                  \ 
 168   obstack_grow (Obs, buf, strlen (buf));        \ 
 171 #define obstack_fgrow2(Obs, Format, Arg1, Arg2) \ 
 174   sprintf (buf, Format, Arg1, Arg2);            \ 
 175   obstack_grow (Obs, buf, strlen (buf));        \ 
 178 #define obstack_fgrow3(Obs, Format, Arg1, Arg2, Arg3)   \ 
 181   sprintf (buf, Format, Arg1, Arg2, Arg3);              \ 
 182   obstack_grow (Obs, buf, strlen (buf));                \ 
 185 #define obstack_fgrow4(Obs, Format, Arg1, Arg2, Arg3, Arg4)     \ 
 188   sprintf (buf, Format, Arg1, Arg2, Arg3, Arg4);                \ 
 189   obstack_grow (Obs, buf, strlen (buf));                        \ 
 194 /*-----------------------------------------. 
 195 | Extensions to use for the output files.  | 
 196 `-----------------------------------------*/ 
 199 # define OUTPUT_EXT ".output" 
 203 # define TAB_EXT ".tab" 
 206 #ifndef DEFAULT_TMPDIR 
 207 # define DEFAULT_TMPDIR "/tmp" 
 212 /*---------------------. 
 213 | Free a linked list.  | 
 214 `---------------------*/ 
 216 #define LIST_FREE(Type, List)                   \ 
 218   Type *_node, *_next;                          \ 
 219   for (_node = List; _node; _node = _next)      \ 
 221       _next = _node->next;                      \ 
 227 /*---------------------------------------------. 
 228 | Debugging memory allocation (must be last).  | 
 229 `---------------------------------------------*/ 
 232 #  define DMALLOC_FUNC_CHECK 
 233 #  include <dmalloc.h> 
 234 # endif /* WITH_DMALLOC */ 
 236 #endif  /* ! BISON_SYSTEM_H */