diff options
author | Andy Wingo <wingo@pobox.com> | 2010-11-19 11:29:26 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2010-11-19 15:22:43 +0100 |
commit | e25f37271acde5b9e3c34420ad9d0faa62b7503d (patch) | |
tree | ab77d62427c4c4fa717f3c62aa79765c7633d88e /libguile/random.c | |
parent | d2aed81f7cb8b703b000962a1b9dddc8de91212e (diff) |
fix a number of assuptions that a long could hold an inum
* libguile/bytevectors.c:
* libguile/goops.c:
* libguile/instructions.c:
* libguile/numbers.c:
* libguile/random.c:
* libguile/read.c:
* libguile/vm-i-scheme.c: Fix a number of assumptions that a long could
hold an inum. This is not the case on platforms whose void* is larger
than their long.
* libguile/numbers.c (scm_i_inum2big): New helper, only implemented for
sizeof(void*) == sizeof(long); produces a compile error on other
platforms. Basically gmp doesn't have a nice interface for converting
between mpz values and intmax_t.
Diffstat (limited to 'libguile/random.c')
-rw-r--r-- | libguile/random.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/libguile/random.c b/libguile/random.c index c0a3e046b..f487eb8d9 100644 --- a/libguile/random.c +++ b/libguile/random.c @@ -392,16 +392,16 @@ SCM_DEFINE (scm_random, "random", 1, 1, 0, SCM_VALIDATE_RSTATE (2, state); if (SCM_I_INUMP (n)) { - unsigned long m = (unsigned long) SCM_I_INUM (n); + scm_t_bits m = (scm_t_bits) SCM_I_INUM (n); SCM_ASSERT_RANGE (1, n, SCM_I_INUM (n) > 0); -#if SCM_SIZEOF_UNSIGNED_LONG <= 4 +#if SCM_SIZEOF_UINTPTR_T <= 4 return scm_from_uint32 (scm_c_random (SCM_RSTATE (state), (scm_t_uint32) m)); -#elif SCM_SIZEOF_UNSIGNED_LONG <= 8 +#elif SCM_SIZEOF_UINTPTR_T <= 8 return scm_from_uint64 (scm_c_random64 (SCM_RSTATE (state), (scm_t_uint64) m)); #else -#error "Cannot deal with this platform's unsigned long size" +#error "Cannot deal with this platform's scm_t_bits size" #endif } SCM_VALIDATE_NIM (1, n); |