mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-21 10:13:03 +00:00
(ebitset_set, ebitset_reset): Do not assume that bitset_word is the
same width as int. (ebitset_op1): Use -1, not ~0, as memset arg (for portability to one's complement hosts!).
This commit is contained in:
@@ -578,7 +578,8 @@ ebitset_set (dst, bitno)
|
|||||||
|
|
||||||
ebitset_elt_find (dst, windex, EBITSET_CREATE);
|
ebitset_elt_find (dst, windex, EBITSET_CREATE);
|
||||||
|
|
||||||
dst->b.cdata[windex - dst->b.cindex] |= (1 << (bitno % BITSET_WORD_BITS));
|
dst->b.cdata[windex - dst->b.cindex] |=
|
||||||
|
(bitset_word) 1 << (bitno % BITSET_WORD_BITS);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -593,7 +594,8 @@ ebitset_reset (dst, bitno)
|
|||||||
if (!ebitset_elt_find (dst, windex, EBITSET_FIND))
|
if (!ebitset_elt_find (dst, windex, EBITSET_FIND))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dst->b.cdata[windex - dst->b.cindex] &= ~(1 << (bitno % BITSET_WORD_BITS));
|
dst->b.cdata[windex - dst->b.cindex] &=
|
||||||
|
~((bitset_word) 1 << (bitno % BITSET_WORD_BITS));
|
||||||
|
|
||||||
/* If all the data is zero, perhaps we should remove it now...
|
/* If all the data is zero, perhaps we should remove it now...
|
||||||
However, there is a good chance that the element will be needed
|
However, there is a good chance that the element will be needed
|
||||||
@@ -646,7 +648,6 @@ ebitset_reverse_list (bset, list, num, next)
|
|||||||
bitset_windex woffset;
|
bitset_windex woffset;
|
||||||
bitset_bindex count;
|
bitset_bindex count;
|
||||||
bitset_windex size;
|
bitset_windex size;
|
||||||
bitset_word word;
|
|
||||||
ebitset_elts *elts;
|
ebitset_elts *elts;
|
||||||
|
|
||||||
if (EBITSET_OP_ZERO_P (bset))
|
if (EBITSET_OP_ZERO_P (bset))
|
||||||
@@ -674,40 +675,48 @@ ebitset_reverse_list (bset, list, num, next)
|
|||||||
bcount = bitno % BITSET_WORD_BITS;
|
bcount = bitno % BITSET_WORD_BITS;
|
||||||
boffset = windex * BITSET_WORD_BITS;
|
boffset = windex * BITSET_WORD_BITS;
|
||||||
|
|
||||||
for (; eindex != ~0U;
|
do
|
||||||
boffset = eindex * EBITSET_ELT_BITS - BITSET_WORD_BITS, eindex--)
|
|
||||||
{
|
{
|
||||||
ebitset_elt *elt;
|
ebitset_elt *elt;
|
||||||
bitset_word *srcp;
|
|
||||||
|
|
||||||
elt = elts[eindex];
|
elt = elts[eindex];
|
||||||
if (!elt)
|
if (elt)
|
||||||
continue;
|
|
||||||
|
|
||||||
srcp = EBITSET_WORDS (elt);
|
|
||||||
|
|
||||||
for (; woffset != ~0U; woffset--, boffset -= BITSET_WORD_BITS,
|
|
||||||
bcount = BITSET_WORD_BITS - 1)
|
|
||||||
{
|
{
|
||||||
word = srcp[woffset] << (BITSET_WORD_BITS - 1 - bcount);
|
bitset_word *srcp;
|
||||||
|
|
||||||
for (; word; bcount--)
|
srcp = EBITSET_WORDS (elt);
|
||||||
|
|
||||||
|
do
|
||||||
{
|
{
|
||||||
if (word & BITSET_MSB)
|
bitset_word word;
|
||||||
|
|
||||||
|
word = srcp[woffset] << (BITSET_WORD_BITS - 1 - bcount);
|
||||||
|
|
||||||
|
for (; word; bcount--)
|
||||||
{
|
{
|
||||||
list[count++] = boffset + bcount;
|
if (word & BITSET_MSB)
|
||||||
if (count >= num)
|
|
||||||
{
|
{
|
||||||
*next = n_bits - (boffset + bcount);
|
list[count++] = boffset + bcount;
|
||||||
return count;
|
if (count >= num)
|
||||||
|
{
|
||||||
|
*next = n_bits - (boffset + bcount);
|
||||||
|
return count;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
word <<= 1;
|
||||||
}
|
}
|
||||||
word <<= 1;
|
|
||||||
|
boffset -= BITSET_WORD_BITS;
|
||||||
|
bcount = BITSET_WORD_BITS - 1;
|
||||||
}
|
}
|
||||||
|
while (woffset--);
|
||||||
|
|
||||||
|
woffset = EBITSET_ELT_WORDS;
|
||||||
}
|
}
|
||||||
|
|
||||||
woffset = EBITSET_ELT_WORDS;
|
boffset = eindex * EBITSET_ELT_BITS - BITSET_WORD_BITS;
|
||||||
}
|
}
|
||||||
|
while (eindex--);
|
||||||
|
|
||||||
*next = n_bits - (boffset + 1);
|
*next = n_bits - (boffset + 1);
|
||||||
return count;
|
return count;
|
||||||
@@ -878,7 +887,7 @@ ebitset_op1 (dst, op)
|
|||||||
we should just add pointers to a ones element. */
|
we should just add pointers to a ones element. */
|
||||||
elt =
|
elt =
|
||||||
ebitset_elt_find (dst, j * EBITSET_ELT_WORDS, EBITSET_CREATE);
|
ebitset_elt_find (dst, j * EBITSET_ELT_WORDS, EBITSET_CREATE);
|
||||||
memset (EBITSET_WORDS (elt), ~0, sizeof (EBITSET_WORDS (elt)));
|
memset (EBITSET_WORDS (elt), -1, sizeof (EBITSET_WORDS (elt)));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user