From ab2e5a3593214541f359e075cf6479b55a7bb42d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Kochma=C5=84ski?= Date: Wed, 10 Aug 2016 13:52:10 +0200 Subject: [PATCH] random-state: make-random-state accepts arrays Type of the array is checked. The code has been moved from the `#$' reader-macro simplifying its implementation. --- src/c/num_rand.d | 14 ++++++++++++++ src/c/read.d | 21 +-------------------- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/src/c/num_rand.d b/src/c/num_rand.d index 44958b658..89c483bcd 100644 --- a/src/c/num_rand.d +++ b/src/c/num_rand.d @@ -300,6 +300,20 @@ ecl_make_random_state(cl_object rs) case t_fixnum: z->random.value = init_genrand(ecl_fixnum(rs)); break; + case t_vector: /* intentionaly undocumented (only for internal use) */ +#if ECL_FIXNUM_BITS > 32 + if (rs->vector.dim == 313 && rs->vector.elttype == ecl_aet_b64) { + z = ecl_alloc_object(t_random); + z->random.value = cl_copy_seq(rs); + break; + } +#else /* 32 bit version */ + if (rs->vector.dim == 625 && rs->vector.elttype == ecl_aet_b32) { + z = ecl_alloc_object(t_random); + z->random.value = cl_copy_seq(rs); + break; + } +#endif default: FEwrong_type_only_arg(@[make-random-state], rs, ecl_read_from_cstring(type)); diff --git a/src/c/read.d b/src/c/read.d index c5f5388f1..ba92e522c 100644 --- a/src/c/read.d +++ b/src/c/read.d @@ -1383,26 +1383,7 @@ sharp_dollar_reader(cl_object in, cl_object c, cl_object d) if (d != ECL_NIL && !read_suppress) extra_argument('$', in, d); c = ecl_read_object(in); - - switch (ecl_t_of(c)) { - case t_vector: -#if ECL_FIXNUM_BITS > 32 - if (c->vector.dim == 313 && c->vector.elttype == ecl_aet_b64) { - rs = ecl_alloc_object(t_random); - rs->random.value = cl_copy_seq(c); - break; - } -#else /* 32 bit version */ - if (c->vector.dim == 625 && c->vector.elttype == ecl_aet_b32) { - rs = ecl_alloc_object(t_random); - rs->random.value = cl_copy_seq(c); - break; - } -#endif - default: - rs = ecl_make_random_state(c); - break; - } + rs = ecl_make_random_state(c); @(return rs); }