diff --git a/scheme/last-revision b/scheme/last-revision index ca91012..ff5a506 100644 --- a/scheme/last-revision +++ b/scheme/last-revision @@ -1 +1 @@ -1768 +1769 diff --git a/src/ikarus-pointers.c b/src/ikarus-pointers.c index 8a6f457..016ff4b 100644 --- a/src/ikarus-pointers.c +++ b/src/ikarus-pointers.c @@ -256,14 +256,15 @@ sll_to_number(signed long long n, ikpcb* pcb) { if (((signed long long)(signed long) n) == n) { return s_to_number(n, pcb); } + int len = sizeof(long long) / sizeof(mp_limb_t); ikptr bn = ik_safe_alloc(pcb, align(sizeof(long long)+disp_bignum_data)); if (n > 0){ - ref(bn, 0) = (ikptr)(bignum_tag | (1 << bignum_length_shift)); + ref(bn, 0) = (ikptr)(bignum_tag | (len << bignum_length_shift)); *((long long*)(bn+disp_bignum_data)) = n; } else { ref(bn, 0) = (ikptr)(bignum_tag | - (1 << bignum_length_shift) | + (len << bignum_length_shift) | (1 << bignum_sign_shift)); *((long long*)(bn+disp_bignum_data)) = -n; }