なかむらさんはじめまして、斎藤です。

----- Original Message ----- 
From: "U.Nakamura" <usa / osb.att.ne.jp>
To: "ruby developers list" <ruby-dev / ruby-lang.org>
Sent: Monday, June 23, 2003 12:28 PM
Subject: [ruby-dev:20411] Re: [BigDecimal] proposal to change
  specification


> (1) 1.8では NT の代わりに _WIN32 が定義されます。
> (2) ruby.h → defines.h → win32/win32.h とincludeされますが、
>     win32/win32.hの中でisinf()・isnan()ともにdefineされていま
>     す。
>
> というわけで、実は該当部のコードは不要と思われます。

解説ありがとうございます。一瞬、_MSC_VERが定義されているのに
win32.hを使わない環境でもあるのかなぁと勘繰ってしまいましたが、
さすがにそれはないですよね。

ということで、#ifdef NTで囲われた部分を削除して、[ruby-dev:20140]
のパッチを作り直しました。
さらに、
「bigdecimal-rationalがrequireされるのは
bigdecimalとrationalの双方がrequireされた後でなければならない」
という事でしたら、順番を間違えたらLoadErrorにする方が明確になって
親切かと思い、その変更も付け加えてみました。
それに加えVPrintの部分で、ヘッダもちょこっといじりました。

もしよろしければcommitをお願いします。

Index: ext/bigdecimal/bigdecimal.c
===================================================================
RCS file: /src/ruby/ext/bigdecimal/bigdecimal.c,v
retrieving revision 1.6
diff -u -r1.6 bigdecimal.c
--- ext/bigdecimal/bigdecimal.c 6 May 2003 13:18:26 -0000 1.6
+++ ext/bigdecimal/bigdecimal.c 23 Jun 2003 16:55:19 -0000
@@ -34,14 +34,6 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#ifdef NT
-#include <malloc.h>
-#ifdef _MSC_VER
-#include <float.h>
-#define isnan(x) _isnan(x)
-#define isinf(x) (!(_finite(x)))
-#endif /* _MSC_VER */
-#endif /* defined NT */
 #include "ruby.h"
 #include "math.h"
 #include "version.h"
@@ -2980,6 +2972,7 @@
     return (int)val;
 }

+#ifdef _DEBUG
 /*
  *    cntl_chr ... ASCIIZ Character, print control characters
  *     Available control codes:
@@ -3082,6 +3075,7 @@
     }
     return (int)nc;
 }
+#endif /* _DEBUG */

 static void
 VpFormatSt(char *psz,S_INT fFmt)
Index: ext/bigdecimal/bigdecimal.h
===================================================================
RCS file: /src/ruby/ext/bigdecimal/bigdecimal.h,v
retrieving revision 1.3
diff -u -r1.3 bigdecimal.h
--- ext/bigdecimal/bigdecimal.h 6 May 2003 13:18:26 -0000 1.3
+++ ext/bigdecimal/bigdecimal.h 23 Jun 2003 16:55:19 -0000
@@ -130,7 +130,6 @@
 VP_EXPORT void VpExp1(Real *y);
 VP_EXPORT void VpExp(Real *y,Real *x);
 VP_EXPORT void VpSinCos(Real *psin,Real *pcos,Real *x);
-VP_EXPORT int VPrint(FILE *fp,char *cntl_chr,Real *a);

 /*
  *  ------------------
@@ -180,6 +179,7 @@

 #ifdef _DEBUG
 int VpVarCheck(Real * v);
+int VPrint(FILE *fp,char *cntl_chr,Real *a);
 #endif /* _DEBUG */

 #if defined(__cplusplus)
Index: ext/bigdecimal/lib/bigdecimal-rational.rb
===================================================================
RCS file: /src/ruby/ext/bigdecimal/lib/bigdecimal-rational.rb,v
retrieving revision 1.1
diff -u -r1.1 bigdecimal-rational.rb
--- ext/bigdecimal/lib/bigdecimal-rational.rb 28 Mar 2003 05:00:21 -0000 1.1
+++ ext/bigdecimal/lib/bigdecimal-rational.rb 23 Jun 2003 16:55:20 -0000
@@ -1,6 +1,10 @@
 #
 # BigDecimal <-> Rational
 #
+unless defined?(BigDecimal) && defined?(Rational)
+    raise LoadError, "require 'bigdecimal' and 'rational' before requiring
'bigdecimal-rational'"
+end
+
 class BigDecimal
     # Convert BigDecimal to Rational
     def to_r
@@ -12,7 +16,7 @@
        else
           denominator = base ** denomi_power
        end
-       Rational.new(numerator,denominator)
+       Rational(numerator,denominator)
     end
 end

---
斎藤ただし