[#34647] fork 不可能な環境での test_argv0_noarg — wanabe <s.wanabe@...>

ワナベと申します。

13 messages 2008/05/11
[#34667] Re: fork 不可能な環境での test_argv0_noarg — Yukihiro Matsumoto <matz@...> 2008/05/13

まつもと ゆきひろです

[#34742] Ruby 1.8.7-preview3 has been released — "Akinori MUSHA" <knu@...>

 Ruby 1.8.7-preview3 をリリースしました。

14 messages 2008/05/18
[#34744] Re: [ruby-list:44957] Ruby 1.8.7-preview3 has been released — Takahiro Kambe <taca@...> 2008/05/19

お疲れ様です。

[#34800] Windows2000上でtrunkがビルドできない — KIMURA Koichi <kimura.koichi@...>

木村です。

18 messages 2008/05/22
[#34801] Re: Windows2000上でtrunkがビルドできない — "U.Nakamura" <usa@...> 2008/05/22

こんにちは、なかむら(う)です。

[#34824] Re: Windows2000上でtrunkがビルドできない — KIMURA Koichi <kimura.koichi@...> 2008/05/23

木村です。

[#34850] Re: Windows2000上でtrunkがビルドできない — KIMURA Koichi <kimura.koichi@...> 2008/05/26

木村です。

[#34854] Re: Windows2000上でtrunkがビルドできない — "U.Nakamura" <usa@...> 2008/05/26

こんにちは、なかむら(う)です。

[#34889] Ruby 1.8.7-preview4 test-all failed in OpenSSL::TestSSL — Nobuhiro IMAI <nov@...>

いまいです。

10 messages 2008/05/29

[ruby-dev:34648] Bignum のメソッドからの bigzero_p

From: wanabe <s.wanabe@...>
Date: 2008-05-11 06:15:23 UTC
List: ruby-dev #34648
ワナベと申します。

Ruby から Bignum インスタンスのメソッドが呼ばれた場合には
bigzero_p ですべてのビットを見る必要はあまり無いように思います。

そこで、確実に Fixnum の範囲にないことを示すフラグで分岐するパッチを書きました。
試験的に to_s が呼ばれたときにだけ付加しています。

Index: include/ruby/ruby.h
===================================================================
--- include/ruby/ruby.h	(revision 16344)
+++ include/ruby/ruby.h	(working copy)
@@ -610,9 +610,11 @@
 #define RBIGNUM_POSITIVE_P(b) RBIGNUM_SIGN(b)
 #define RBIGNUM_NEGATIVE_P(b) (!RBIGNUM_SIGN(b))

-#define RBIGNUM_EMBED_FLAG FL_USER2
-#define RBIGNUM_EMBED_LEN_MASK (FL_USER5|FL_USER4|FL_USER3)
-#define RBIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+3)
+#define RBIGNUM_UNFIXABLE_FLAG FL_USER2
+
+#define RBIGNUM_EMBED_FLAG FL_USER3
+#define RBIGNUM_EMBED_LEN_MASK (FL_USER6|FL_USER5|FL_USER4)
+#define RBIGNUM_EMBED_LEN_SHIFT (FL_USHIFT+4)
 #define RBIGNUM_LEN(b) \
     ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \
      (long)((RBASIC(b)->flags >> RBIGNUM_EMBED_LEN_SHIFT) & \
Index: bignum.c
===================================================================
--- bignum.c	(revision 16344)
+++ bignum.c	(working copy)
@@ -44,6 +44,10 @@
 bigzero_p(VALUE x)
 {
     long i;
+
+    if (FL_TEST(x, RBIGNUM_UNFIXABLE_FLAG)) {
+	return 0;
+    }
     for (i = 0; i < RBIGNUM_LEN(x); ++i) {
 	if (BDIGITS(x)[i]) return 0;
     }
@@ -1000,6 +1004,7 @@
 {
     int base;

+    FL_SET(x, RBIGNUM_UNFIXABLE_FLAG);
     if (argc == 0) base = 10;
     else {
 	VALUE b;

-- 
ワナベ

In This Thread

Prev Next