cl_object z = ecl_alloc_object(t_random);
if (rs == ECL_T) {
z->random.value = init_random_state();
- } else {
- if (Null(rs)) {
- rs = ecl_symbol_value(@'*random-state*');
- }
- unlikely_if (!ECL_RANDOM_STATE_P(rs)) {
- FEwrong_type_only_arg(@[make-random-state], rs,
- @[random-state]);
- }
+ return z;
+ }
+
+ if (Null(rs))
+ rs = ecl_symbol_value(@'*random-state*');
+
+ switch (ecl_t_of(rs)) {
+ case t_random:
z->random.value = cl_copy_seq(rs->random.value);
+ break;
+ case t_fixnum:
+ z->random.value = init_genrand
+ (ecl_to_uint32_t(rs));
+ break;
+ /* case t_vector: */
+ /* z->random.value = init_by_array(rs, cl_length(rs)); */
+ /* break; */
+ default:
+ FEwrong_type_only_arg(@[make-random-state], rs,
+ @[random-state]);
}
+
return(z);
}
if (d != ECL_NIL && !read_suppress)
extra_argument('$', in, d);
c = ecl_read_object(in);
- rs = ecl_alloc_object(t_random);
- rs->random.value = c;
+ rs = ecl_make_random_state(c);
@(return rs)
}