diff options
author | Jeff Law <law@gcc.gnu.org> | 1997-08-11 09:56:58 -0600 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1997-08-11 09:56:58 -0600 |
commit | 861bb6c1b0958236ad93717f98d347aa6152bd09 (patch) | |
tree | b2e1ea43e0bdba8cca9bb02ed01f5e3da5a955a6 /gcc/obstack.c | |
parent | 737cee66f221eb8de21f0e41affc4b13cb7c0feb (diff) | |
download | gcc-861bb6c1b0958236ad93717f98d347aa6152bd09.zip gcc-861bb6c1b0958236ad93717f98d347aa6152bd09.tar.gz gcc-861bb6c1b0958236ad93717f98d347aa6152bd09.tar.bz2 |
Initial revisionmisc/cutover-egcs-1
From-SVN: r14764
Diffstat (limited to 'gcc/obstack.c')
-rw-r--r-- | gcc/obstack.c | 151 |
1 files changed, 27 insertions, 124 deletions
diff --git a/gcc/obstack.c b/gcc/obstack.c index 4f9a184..59b2eee 100644 --- a/gcc/obstack.c +++ b/gcc/obstack.c @@ -1,29 +1,19 @@ /* obstack.c - subroutines used implicitly by object stack macros - Copyright (C) 1988,89,90,91,92,93,94,96,97 Free Software Foundation, Inc. + Copyright (C) 1988, 89, 90, 91, 92, 93, 94 Free Software Foundation, Inc. - the C library, however. The master source lives in /gd/gnu/lib. +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. - NOTE: The canonical source of this file is maintained with the GNU C Library. - Bugs can be reported to bug-glibc@prep.ai.mit.edu. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. - This program is free software; you can redistribute it and/or modify it - under the terms of the GNU General Public License as published by the - Free Software Foundation; either version 2, or (at your option) any - later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, - USA. */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "obstack.h" @@ -77,28 +67,6 @@ union fooround {long x; double d;}; #define COPYING_UNIT int #endif - -/* The functions allocating more room by calling `obstack_chunk_alloc' - jump to the handler pointed to by `obstack_alloc_failed_handler'. - This variable by default points to the internal function - `print_and_abort'. */ -#if defined (__STDC__) && __STDC__ -static void print_and_abort (void); -void (*obstack_alloc_failed_handler) (void) = print_and_abort; -#else -static void print_and_abort (); -void (*obstack_alloc_failed_handler) () = print_and_abort; -#endif - -/* Exit value used when `print_and_abort' is used. */ -#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H -#include <stdlib.h> -#endif -#ifndef EXIT_FAILURE -#define EXIT_FAILURE 1 -#endif -int obstack_exit_failure = EXIT_FAILURE; - /* The non-GNU-C macros copy the obstack into this global variable to avoid multiple evaluation. */ @@ -110,20 +78,6 @@ struct obstack *_obstack; For free, do not use ?:, since some compilers, like the MIPS compilers, do not allow (expr) ? void : void. */ -#if defined (__STDC__) && __STDC__ -#define CALL_CHUNKFUN(h, size) \ - (((h) -> use_extra_arg) \ - ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ - : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size))) - -#define CALL_FREEFUN(h, old_chunk) \ - do { \ - if ((h) -> use_extra_arg) \ - (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \ - else \ - (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \ - } while (0) -#else #define CALL_CHUNKFUN(h, size) \ (((h) -> use_extra_arg) \ ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \ @@ -136,7 +90,6 @@ struct obstack *_obstack; else \ (*(void (*) ()) (h)->freefun) ((old_chunk)); \ } while (0) -#endif /* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). @@ -153,13 +106,8 @@ _obstack_begin (h, size, alignment, chunkfun, freefun) struct obstack *h; int size; int alignment; -#if defined (__STDC__) && __STDC__ - POINTER (*chunkfun) (long); - void (*freefun) (void *); -#else POINTER (*chunkfun) (); void (*freefun) (); -#endif { register struct _obstack_chunk *chunk; /* points to new chunk */ @@ -182,27 +130,25 @@ _obstack_begin (h, size, alignment, chunkfun, freefun) size = 4096 - extra; } -#if defined (__STDC__) && __STDC__ - h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun; - h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; -#else h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; h->freefun = freefun; -#endif h->chunk_size = size; h->alignment_mask = alignment - 1; h->use_extra_arg = 0; chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); if (!chunk) - (*obstack_alloc_failed_handler) (); + { + h->alloc_failed = 1; + return 0; + } + h->alloc_failed = 0; h->next_free = h->object_base = chunk->contents; h->chunk_limit = chunk->limit = (char *) chunk + h->chunk_size; chunk->prev = 0; /* The initial chunk now contains no empty object. */ h->maybe_empty_object = 0; - h->alloc_failed = 0; return 1; } @@ -211,13 +157,8 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg) struct obstack *h; int size; int alignment; -#if defined (__STDC__) && __STDC__ - POINTER (*chunkfun) (POINTER, long); - void (*freefun) (POINTER, POINTER); -#else POINTER (*chunkfun) (); void (*freefun) (); -#endif POINTER arg; { register struct _obstack_chunk *chunk; /* points to new chunk */ @@ -241,13 +182,8 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg) size = 4096 - extra; } -#if defined(__STDC__) && __STDC__ - h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun; - h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun; -#else h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun; h->freefun = freefun; -#endif h->chunk_size = size; h->alignment_mask = alignment - 1; h->extra_arg = arg; @@ -255,14 +191,17 @@ _obstack_begin_1 (h, size, alignment, chunkfun, freefun, arg) chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size); if (!chunk) - (*obstack_alloc_failed_handler) (); + { + h->alloc_failed = 1; + return 0; + } + h->alloc_failed = 0; h->next_free = h->object_base = chunk->contents; h->chunk_limit = chunk->limit = (char *) chunk + h->chunk_size; chunk->prev = 0; /* The initial chunk now contains no empty object. */ h->maybe_empty_object = 0; - h->alloc_failed = 0; return 1; } @@ -292,7 +231,11 @@ _obstack_newchunk (h, length) /* Allocate and initialize the new chunk. */ new_chunk = CALL_CHUNKFUN (h, new_size); if (!new_chunk) - (*obstack_alloc_failed_handler) (); + { + h->alloc_failed = 1; + return; + } + h->alloc_failed = 0; h->chunk = new_chunk; new_chunk->prev = old_chunk; new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size; @@ -436,39 +379,6 @@ obstack_free (h, obj) abort (); } -int -_obstack_memory_used (h) - struct obstack *h; -{ - register struct _obstack_chunk* lp; - register int nbytes = 0; - - for (lp = h->chunk; lp != 0; lp = lp->prev) - { - nbytes += lp->limit - (char *) lp; - } - return nbytes; -} - -/* Define the error handler. */ -#ifndef _ -# ifdef HAVE_LIBINTL_H -# include <libintl.h> -# ifndef _ -# define _(Str) gettext (Str) -# endif -# else -# define _(Str) (Str) -# endif -#endif - -static void -print_and_abort () -{ - fputs (_("memory exhausted\n"), stderr); - exit (obstack_exit_failure); -} - #if 0 /* These are now turned off because the applications do not use it and it uses bcopy via obstack_grow, which causes trouble on sysV. */ @@ -507,13 +417,6 @@ int (obstack_room) (obstack) return obstack_room (obstack); } -int (obstack_make_room) (obstack, length) - struct obstack *obstack; - int length; -{ - return obstack_make_room (obstack, length); -} - void (obstack_grow) (obstack, pointer, length) struct obstack *obstack; POINTER pointer; |