fix extraction of numbers into a 64-bit value on 32-bit platforms
This commit is contained in:
parent
71fb5e0f6a
commit
41cc442779
|
@ -380,7 +380,8 @@ int scheme_bignum_get_long_long_val(const Scheme_Object *o, mzlonglong *v)
|
|||
} else if (SCHEME_BIGLEN(o) == 0) {
|
||||
*v = 0;
|
||||
return 1;
|
||||
} else if (SCHEME_BIGDIG(o)[MAX_BN_SIZE_FOR_LL - 1] == FIRST_BIT_MASK_LL
|
||||
} else if ((SCHEME_BIGLEN(o) == MAX_BN_SIZE_FOR_LL)
|
||||
&& SCHEME_BIGDIG(o)[MAX_BN_SIZE_FOR_LL - 1] == FIRST_BIT_MASK_LL
|
||||
# if !defined(USE_LONG_LONG_FOR_BIGDIG) && !defined(SIXTY_FOUR_BIT_INTEGERS)
|
||||
&& !SCHEME_BIGDIG(o)[0]
|
||||
# endif
|
||||
|
@ -391,7 +392,8 @@ int scheme_bignum_get_long_long_val(const Scheme_Object *o, mzlonglong *v)
|
|||
v2 = ((umzlonglong)v2 << 63);
|
||||
*v = v2;
|
||||
return 1;
|
||||
} else if ((SCHEME_BIGDIG(o)[MAX_BN_SIZE_FOR_LL - 1] & FIRST_BIT_MASK_LL) != 0) { /* Won't fit into a signed long long */
|
||||
} else if ((SCHEME_BIGLEN(o) == MAX_BN_SIZE_FOR_LL)
|
||||
&& ((SCHEME_BIGDIG(o)[MAX_BN_SIZE_FOR_LL - 1] & FIRST_BIT_MASK_LL) != 0)) { /* Won't fit into a signed long long */
|
||||
return 0;
|
||||
} else {
|
||||
mzlonglong v2;
|
||||
|
|
Loading…
Reference in New Issue
Block a user