From: Paul Eggert <eggert@cs.ucla.edu>
Date: Mon, 12 Aug 2002 14:19:02 +0000 (+0000)
Subject: (bitset_set, bitset_reset): Do not assume that bitset_word is the same
X-Git-Tag: BISON-1_49b~37
X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/e601ff27f414d357c5f21641f64fc67a6d37fa96

(bitset_set, bitset_reset): Do not assume that bitset_word is the same
width as int.
---

diff --git a/lib/bitset.h b/lib/bitset.h
index 14c14f0b..42cf06f9 100644
--- a/lib/bitset.h
+++ b/lib/bitset.h
@@ -107,7 +107,7 @@ static inline void bitset_set (bset, bitno)
   bitset_windex offset = index - bset->b.cindex;
   
   if (offset < bset->b.csize)
-    bset->b.cdata[offset] |= (1 << (bitno % BITSET_WORD_BITS));
+    bset->b.cdata[offset] |= ((bitset_word) 1 << (bitno % BITSET_WORD_BITS));
   else
     BITSET_SET_ (bset, bitno);
 }
@@ -122,7 +122,7 @@ static inline void bitset_reset (bset, bitno)
   bitset_windex offset = index - bset->b.cindex;
   
   if (offset < bset->b.csize)
-    bset->b.cdata[offset] &= ~(1 << (bitno % BITSET_WORD_BITS));
+    bset->b.cdata[offset] &= ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS));
   else
     BITSET_RESET_ (bset, bitno);
 }
@@ -154,7 +154,8 @@ do   								\
   bitset_windex _offset = _index - (bset)->b.cindex;		\
   								\
   if (_offset < (bset)->b.csize)					\
-    (bset)->b.cdata[_offset] |= (1 << (_bitno % BITSET_WORD_BITS)); 	\
+    (bset)->b.cdata[_offset] |=					\
+      ((bitset_word) 1 << (_bitno % BITSET_WORD_BITS)); 	\
   else  							\
     BITSET_SET_ ((bset), _bitno);				\
 } while (0)
@@ -169,7 +170,8 @@ do   								\
   bitset_windex _offset = _index - (bset)->b.cindex;		\
   								\
   if (_offset < (bset)->b.csize)					\
-    (bset)->b.cdata[_offset] &= ~(1 << (_bitno % BITSET_WORD_BITS)); 	\
+    (bset)->b.cdata[_offset] &=					\
+      ~((bitset_word) 1 << (_bitno % BITSET_WORD_BITS)); 	\
   else  							\
     BITSET_RESET_ ((bset), _bitno);				\
 } while (0)
@@ -178,9 +180,11 @@ do   								\
 /* Test bit BITNO in bitset BSET.  */
 #define bitset_test(bset, bitno) \
 (((((bitno) / BITSET_WORD_BITS) - (bset)->b.cindex) < (bset)->b.csize) \
-  ? ((bset)->b.cdata[(((bitno) / BITSET_WORD_BITS) - (bset)->b.cindex)] \
-     >> ((bitno) % BITSET_WORD_BITS)) & 1 \
-  : (unsigned int) BITSET_TEST_ ((bset), (bitno)))
+  ? (((int)							\
+      ((bset)->b.cdata[(((bitno) / BITSET_WORD_BITS) - (bset)->b.cindex)] \
+       >> ((bitno) % BITSET_WORD_BITS)))			\
+     & 1)							\
+  : BITSET_TEST_ ((bset), (bitno)))
 #endif