X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/779e7ceb9395424c2cf90d43c75302ababc8ee72..1168b32295f6acde7a777d9519723fe276155b6b:/lib/ebitset.c diff --git a/lib/ebitset.c b/lib/ebitset.c index effa2c22..9f35499a 100644 --- a/lib/ebitset.c +++ b/lib/ebitset.c @@ -1,10 +1,12 @@ /* Functions to support expandable bitsets. - Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. + + Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc. + Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). - This program is free software; you can redistribute it and/or modify + 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 of the License, or + the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -13,15 +15,12 @@ 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. -*/ + along with this program. If not, see . */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif +#include #include "ebitset.h" + #include "obstack.h" #include #include @@ -115,11 +114,11 @@ static ebitset_elt *ebitset_free_list; /* Free list of bitset elements. */ ((BSET)->b.cindex = (EINDEX) * EBITSET_ELT_WORDS, \ (BSET)->b.cdata = EBITSET_WORDS (EBITSET_ELTS (BSET) [EINDEX])) - +#undef min +#undef max #define min(a, b) ((a) > (b) ? (b) : (a)) #define max(a, b) ((a) > (b) ? (a) : (b)) - static bitset_bindex ebitset_resize (bitset src, bitset_bindex n_bits) { @@ -136,7 +135,7 @@ ebitset_resize (bitset src, bitset_bindex n_bits) { bitset_windex size; - /* The bitset needs to grow. If we already have enough memory + /* The bitset needs to grow. If we already have enough memory allocated, then just zero what we need. */ if (newsize > EBITSET_ASIZE (src)) { @@ -149,13 +148,13 @@ ebitset_resize (bitset src, bitset_bindex n_bits) size = newsize; else size = newsize + newsize / 4; - + EBITSET_ELTS (src) = realloc (EBITSET_ELTS (src), size * sizeof (ebitset_elt *)); EBITSET_ASIZE (src) = size; } - memset (EBITSET_ELTS (src) + oldsize, 0, + memset (EBITSET_ELTS (src) + oldsize, 0, (newsize - oldsize) * sizeof (ebitset_elt *)); } else @@ -210,15 +209,13 @@ ebitset_elt_alloc (void) #define OBSTACK_CHUNK_FREE free #endif -#if !defined(__GNUC__) || (__GNUC__ < 2) +#if ! defined __GNUC__ || __GNUC__ < 2 #define __alignof__(type) 0 #endif obstack_specify_allocation (&ebitset_obstack, OBSTACK_CHUNK_SIZE, __alignof__ (ebitset_elt), - (void *(*)PARAMS ((long int))) OBSTACK_CHUNK_ALLOC, - (void (*)PARAMS ((void *))) OBSTACK_CHUNK_FREE); } @@ -324,6 +321,9 @@ ebitset_elt_find (bitset bset, bitset_bindex bindex, switch (mode) { + default: + abort (); + case EBITSET_FIND: return 0; @@ -339,9 +339,6 @@ ebitset_elt_find (bitset bset, bitset_bindex bindex, case EBITSET_SUBST: return &ebitset_zero_elts[0]; - - default: - abort (); } } @@ -840,10 +837,10 @@ ebitset_unused_clear (bitset dst) { unsigned int last_bit; bitset_bindex n_bits; - + n_bits = BITSET_NBITS_ (dst); last_bit = n_bits % EBITSET_ELT_BITS; - + if (last_bit) { bitset_windex eindex; @@ -851,20 +848,20 @@ ebitset_unused_clear (bitset dst) ebitset_elt *elt; elts = EBITSET_ELTS (dst); - + eindex = n_bits / EBITSET_ELT_BITS; - + elt = elts[eindex]; if (elt) { bitset_windex windex; bitset_windex woffset; bitset_word *srcp = EBITSET_WORDS (elt); - + windex = n_bits / BITSET_WORD_BITS; woffset = eindex * EBITSET_ELT_WORDS; - - srcp[windex - woffset] &= ((bitset_word) 1 << last_bit) - 1; + + srcp[windex - woffset] &= ((bitset_word) 1 << last_bit) - 1; windex++; for (; (windex - woffset) < EBITSET_ELT_WORDS; windex++) srcp[windex - woffset] = 0; @@ -1092,6 +1089,9 @@ ebitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op) dstp = EBITSET_WORDS (delt); switch (op) { + default: + abort (); + case BITSET_OP_OR: for (i = 0; i < EBITSET_ELT_WORDS; i++, dstp++) { @@ -1143,9 +1143,6 @@ ebitset_op3_cmp (bitset dst, bitset src1, bitset src2, enum bitset_ops op) } } break; - - default: - abort (); } if (!ebitset_elt_zero_p (delt)) @@ -1338,17 +1335,12 @@ ebitset_bytes (bitset_bindex n_bits ATTRIBUTE_UNUSED) bitset ebitset_init (bitset bset, bitset_bindex n_bits) { - bitset_windex size; - bset->b.vtable = &ebitset_vtable; bset->b.csize = EBITSET_ELT_WORDS; EBITSET_ZERO_SET (bset); - size = n_bits ? (n_bits + EBITSET_ELT_BITS - 1) / EBITSET_ELT_BITS - : EBITSET_INITIAL_SIZE; - EBITSET_ASIZE (bset) = 0; EBITSET_ELTS (bset) = 0; ebitset_resize (bset, n_bits);