[#31166] is_ruby_native_thread() — Masahiro Sakai (酒井政裕) <masahiro.sakai@...>

酒井です。

16 messages 2007/07/08
[#31269] Re: is_ruby_native_thread() — Nobuyoshi Nakada <nobu@...> 2007/07/21

なかだです。

[#31270] Re: is_ruby_native_thread() — Hidetoshi NAGAI <nagai@...> 2007/07/22

永井@知能.九工大です.

[#31298] retryの使い方 — eklerni <eklerni@...>

松尾といいます。

52 messages 2007/07/25
[#31299] Re: retryの使い方 — SASADA Koichi <ko1@...> 2007/07/26

 ささだです。

[#31300] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/26

松尾です、返信ありがとうございます。

[#31303] Re: retryの使い方 — Yugui <yugui@...> 2007/07/26

Yuguiといいます。

[#31306] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/26

松尾といいます。

[#31308] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/07/26

In article <46A909DD.1070405@for.mail-box.ne.jp>,

[#31310] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/26

Tanaka Akira さんは書きました:

[#31314] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/07/30

In article <46A92530.80507@for.mail-box.ne.jp>,

[#31315] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/30

Tanaka Akira さんは書きました:

[#31316] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/07/30

In article <46AD7A16.8080509@for.mail-box.ne.jp>,

[#31317] Re: retryの使い方 — eklerni <eklerni@...> 2007/07/31

松尾です。

[#31381] Re: retryの使い方 — SASADA Koichi <ko1@...> 2007/08/12

 ささだです。

[#31422] Re: retryの使い方 — Yukihiro Matsumoto <matz@...> 2007/08/15

まつもと ゆきひろです

[#31425] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/08/15

In article <E1ILDTi-0005T6-Be@x31>,

[#31426] Re: retryの使い方 — Yukihiro Matsumoto <matz@...> 2007/08/15

まつもと ゆきひろです

[#31433] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/08/16

In article <E1ILKn6-0003Nv-0f@x31>,

[#31435] Re: retryの使い方 — Yukihiro Matsumoto <matz@...> 2007/08/16

まつもと ゆきひろです

[#31447] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/08/16

In article <E1ILVN9-0006xJ-7I@x31>,

[#31450] Re: retryの使い方 — Tanaka Akira <akr@...> 2007/08/17

In article <E1ILq4x-0002Bs-Lg@x31>,

[#31451] Re: retryの使い方 — Yukihiro Matsumoto <matz@...> 2007/08/17

まつもと ゆきひろです

[ruby-dev:31193] Re: Random

From: Nobuyoshi Nakada <nobu@...>
Date: 2007-07-12 07:38:50 UTC
List: ruby-dev #31193
なかだです。

At Thu, 12 Jul 2007 15:49:36 +0900,
NAKAMURA, Hiroshi wrote in [ruby-dev:31192]:
> [ruby-dev:31184]のうささんによる修正も入れて、これで目に見えてる範囲の
> 問題はなくなりましたね。

出遅れた感がありますが、警告の抑制とか細かいミスの修正とか。


--- random.c~	2007-07-12 05:16:12.000000000 +0900
+++ random.c	2007-07-12 06:05:21.000000000 +0900
@@ -342,6 +342,5 @@ random_bytes(VALUE obj, VALUE len)
     int r;
     struct MT *mt;
-    unsigned char *ptr;
-    unsigned char *pend;
+    char *ptr, *pend;
 
     switch (TYPE(len)) {
@@ -617,12 +616,12 @@ limited_fix_rand(struct MT *mt, unsigned
 
 static VALUE
-limited_big_rand(struct MT *mt, struct RBignum *limit)
+limited_big_rand(struct MT *mt, VALUE vmax)
 {
     unsigned long mask, lim, rnd;
-    struct RBignum *val;
+    struct RBignum *val, *limit = RB_GC_GUARD(vmax);
     int i, len, boundary;
 
     len = (limit->len * SIZEOF_BDIGITS + 3) / 4;
-    val = (struct RBignum *)rb_big_clone((VALUE)limit);
+    val = RBIGNUM(rb_big_clone(vmax));
     val->sign = 1;
 #if SIZEOF_BDIGITS == 2
@@ -662,31 +661,26 @@ limited_big_rand(struct MT *mt, struct R
 
 static VALUE
-limited_rand(struct MT *mt, VALUE *max)
+limited_rand(struct MT *mt, VALUE vmax)
 {
-    VALUE vmax = *max;
     long lmax;
 
     if (FIXNUM_P(vmax)) {
 	lmax = FIX2LONG(vmax) - 1;
-      fixnum:
-        if (lmax <= -1) {
-            rb_raise(rb_eArgError, "invalid domain");
-        }
-	return LONG2NUM(limited_fix_rand(mt, lmax));
     }
     else {
-	struct RBignum *limit;
 	Check_Type(vmax, T_BIGNUM);
-	limit = (struct RBignum *)vmax;
-	if (!limit->sign) {
+	if (!RBIGNUM(vmax)->sign) {
             rb_raise(rb_eArgError, "invalid domain");
 	}
-	limit = (struct RBignum *)rb_big_minus((VALUE)limit, INT2FIX(1));
-	if (FIXNUM_P((VALUE)limit)) {
-	    lmax = (VALUE)limit;
-	    goto fixnum;
+	vmax = rb_big_minus(vmax, INT2FIX(1));
+	if (!FIXNUM_P(vmax)) {
+	    return limited_big_rand(mt, vmax);
 	}
-	return limited_big_rand(mt, limit);
+	lmax = FIX2LONG(vmax);
+    }
+    if (lmax < 0) {
+	rb_raise(rb_eArgError, "invalid domain");
     }
+    return ULONG2NUM(limited_fix_rand(mt, lmax));
 }
 
@@ -717,5 +711,5 @@ random_rand(int argc, VALUE *argv, VALUE
     rb_scan_args(argc, argv, "01", &vmax);
     if (NIL_P(vmax) || vmax == INT2FIX(0)) {
-      return rb_float_new(genrand_real_0(get_mt(obj)));
+	return rb_float_new(genrand_real_0(get_mt(obj)));
     }
     mt = get_mt(obj);
@@ -768,5 +762,5 @@ random_rand(int argc, VALUE *argv, VALUE
 	break;
     }
-    return limited_rand(mt, &vmax);
+    return limited_rand(mt, vmax);
 }
 
@@ -808,5 +802,5 @@ random_integer(VALUE obj, VALUE vmax)
         rb_raise(rb_eArgError, "argument must be an integer");
     }
-    return limited_rand(mt, &vmax);
+    return limited_rand(mt, vmax);
 }
 


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread