From 5aac759ad1abee11d72cf5508baeeef897fc8efe Mon Sep 17 00:00:00 2001 From: Juan Jose Garcia Ripoll Date: Tue, 1 Dec 2009 21:43:05 +0100 Subject: [PATCH] random_integer() did not work when the input was a fixnum (src/c/num_rand.d). --- src/CHANGELOG | 7 +++++++ src/c/num_rand.d | 5 ++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/CHANGELOG b/src/CHANGELOG index 6853a4daf..0d0aebd7a 100755 --- a/src/CHANGELOG +++ b/src/CHANGELOG @@ -1,3 +1,10 @@ +ECL 9.12.2: +=========== + +* Bugs fixed: + + - RANDOM broken on 64-bits architectures. + ECL 9.12.1: =========== diff --git a/src/c/num_rand.d b/src/c/num_rand.d index f6aa28291..9fc06c297 100644 --- a/src/c/num_rand.d +++ b/src/c/num_rand.d @@ -155,7 +155,10 @@ random_integer(cl_object limit, cl_object state) { #ifdef WITH_GMP cl_index bit_length = fix(cl_integer_length(limit)); - cl_object buffer = ecl_ash(MAKE_FIXNUM(1), bit_length); + cl_object buffer; + if (bit_length <= FIXNUM_BITS) + bit_length = FIXNUM_BITS; + buffer = ecl_ash(MAKE_FIXNUM(1), bit_length); for (bit_length = buffer->big.big_size; bit_length--; ) { buffer->big.big_limbs[bit_length] = generate_limb(state);