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); }