mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-20 14:19:18 +02:00
Fixing unsigned integer bug in bit-set?.
This commit is contained in:
parent
befe63d6ba
commit
fa0c699a6c
1 changed files with 3 additions and 3 deletions
|
@ -281,14 +281,14 @@ static sexp sexp_bit_set_p (sexp ctx, sexp self, sexp_sint_t n, sexp i, sexp x)
|
||||||
if (! sexp_fixnump(i))
|
if (! sexp_fixnump(i))
|
||||||
return sexp_type_exception(ctx, self, SEXP_FIXNUM, i);
|
return sexp_type_exception(ctx, self, SEXP_FIXNUM, i);
|
||||||
if (sexp_fixnump(x)) {
|
if (sexp_fixnump(x)) {
|
||||||
return sexp_make_boolean(sexp_unbox_fixnum(x) & (1<<sexp_unbox_fixnum(i)));
|
return sexp_make_boolean(sexp_unbox_fixnum(x) & (1UL<<sexp_unbox_fixnum(i)));
|
||||||
#if SEXP_USE_BIGNUMS
|
#if SEXP_USE_BIGNUMS
|
||||||
} else if (sexp_bignump(x)) {
|
} else if (sexp_bignump(x)) {
|
||||||
pos = sexp_unbox_fixnum(i) / (sizeof(sexp_uint_t)*CHAR_BIT);
|
pos = sexp_unbox_fixnum(i) / (sizeof(sexp_uint_t)*CHAR_BIT);
|
||||||
return sexp_make_boolean((pos < sexp_bignum_length(x))
|
return sexp_make_boolean((pos < sexp_bignum_length(x))
|
||||||
&& (sexp_bignum_data(x)[pos]
|
&& (sexp_bignum_data(x)[pos]
|
||||||
& (1<<(sexp_unbox_fixnum(i)
|
& (1UL<<(sexp_unbox_fixnum(i)
|
||||||
- pos*sizeof(sexp_uint_t)*CHAR_BIT))));
|
- pos*sizeof(sexp_uint_t)*CHAR_BIT))));
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
return sexp_type_exception(ctx, self, SEXP_FIXNUM, x);
|
return sexp_type_exception(ctx, self, SEXP_FIXNUM, x);
|
||||||
|
|
Loading…
Add table
Reference in a new issue