From: Tadashi Saito Date: 2003-06-24T02:06:26+09:00 Subject: [ruby-dev:20428] Re: [BigDecimal] proposal to change specification なかむらさんはじめまして、斎藤です。 ----- Original Message ----- From: "U.Nakamura" To: "ruby developers list" 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 #include #include -#ifdef NT -#include -#ifdef _MSC_VER -#include -#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 --- 斎藤ただし