aboutsummaryrefslogtreecommitdiffstats
path: root/rational.c
diff options
context:
space:
mode:
authortadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-10-28 14:11:08 +0000
committertadf <tadf@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-10-28 14:11:08 +0000
commit2b72e549a755dec2fbbf78199e41d4148683d025 (patch)
tree25aa67933c32d251d4a631278881fb3adde4eca6 /rational.c
parentd563f1680cba03335eb38bd9e7bce8b82f03e12d (diff)
downloadruby-2b72e549a755dec2fbbf78199e41d4148683d025.tar.gz
* complex.c: continues to support canonicalization *unofficially*
for an odd library mathn for the time being (only 1.9.x). since grand mathn is must be very very special library for us. * rational.c: ditto. * ext/mathn/*/*: follow the above changes. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@20001 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'rational.c')
-rw-r--r--rational.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/rational.c b/rational.c
index f5eb2c3aea..d7966a1e7a 100644
--- a/rational.c
+++ b/rational.c
@@ -377,7 +377,19 @@ f_rational_new_bang2(VALUE klass, VALUE x, VALUE y)
return nurat_s_new_internal(klass, x, y);
}
-#define f_unify_p(klass) rb_const_defined(klass, id_Unify)
+#if RUBY_VERSION_CODE < 200
+#define CANON
+#endif
+
+#ifdef CANON
+static int canonicalization = 0;
+
+void
+nurat_canonicalize(int f)
+{
+ canonicalization = f;
+}
+#endif
inline static void
nurat_int_check(VALUE num)
@@ -421,7 +433,7 @@ nurat_s_canonicalize_internal(VALUE klass, VALUE num, VALUE den)
den = f_idiv(den, gcd);
#ifdef CANON
- if (f_one_p(den) && f_unify_p(klass))
+ if (f_one_p(den) && canonicalization)
return num;
#endif
return nurat_s_new_internal(klass, num, den);
@@ -441,7 +453,7 @@ nurat_s_canonicalize_internal_no_reduce(VALUE klass, VALUE num, VALUE den)
}
#ifdef CANON
- if (f_one_p(den) && f_unify_p(klass))
+ if (f_one_p(den) && canonicalization)
return num;
#endif
return nurat_s_new_internal(klass, num, den);