summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--inits.c2
-rw-r--r--random.c19
3 files changed, 20 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index 1279775..272c5f2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Thu Oct 22 06:33:38 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
+
+ * random.c (InitVM_Random): move Random::DEFAULT initialization
+ bits to Init_Random_default.
+ * random.c (Init_Random_default): renamed from Init_Rndom2.
+ * random.c (Init_RandomSeedCore): renamed from Init_Random.
+
Thu Oct 22 06:20:48 2015 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
* random.c (Init_RandomSeed): move all Random::DEFAULT
diff --git a/inits.c b/inits.c
index 12b2d52..5822f04 100644
--- a/inits.c
+++ b/inits.c
@@ -17,7 +17,7 @@ void
rb_call_inits(void)
{
CALL(Method);
- CALL(RandomSeed);
+ CALL(RandomSeedCore);
CALL(sym);
CALL(var_tables);
CALL(Object);
diff --git a/random.c b/random.c
index 8a9ef3a..3fde5c3 100644
--- a/random.c
+++ b/random.c
@@ -1496,9 +1496,10 @@ rb_memhash(const void *ptr, long len)
#endif
}
-/* Initialize Ruby internal seeds */
+/* Initialize Ruby internal seeds. This function is called at very early stage
+ * of Ruby startup. Thus, you can't use Ruby's object. */
void
-Init_RandomSeed(void)
+Init_RandomSeedCore(void)
{
/*
Don't reuse this MT for Random::DEFAULT. Random::DEFAULT::seed shouldn't
@@ -1530,14 +1531,20 @@ init_randomseed(struct MT *mt)
}
/* construct Random::DEFAULT bits */
-static void
-Init_RandomSeed2(void)
+static VALUE
+Init_Random_default(void)
{
rb_random_t *r = &default_rand;
struct MT *mt = &r->mt;
+ VALUE v;
r->seed = init_randomseed(mt);
rb_global_variable(&r->seed);
+
+ v = TypedData_Wrap_Struct(rb_cRandom, &random_data_type, r);
+ rb_gc_register_mark_object(v);
+
+ return v;
}
void
@@ -1575,7 +1582,6 @@ rb_reset_random_seed(void)
void
InitVM_Random(void)
{
- Init_RandomSeed2();
rb_define_global_function("srand", rb_f_srand, -1);
rb_define_global_function("rand", rb_f_rand, -1);
@@ -1593,9 +1599,8 @@ InitVM_Random(void)
rb_define_method(rb_cRandom, "==", random_equal, 1);
{
- VALUE rand_default = TypedData_Wrap_Struct(rb_cRandom, &random_data_type, &default_rand);
- rb_gc_register_mark_object(rand_default);
/* Direct access to Ruby's Pseudorandom number generator (PRNG). */
+ VALUE rand_default = Init_Random_default();
rb_define_const(rb_cRandom, "DEFAULT", rand_default);
}