summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-21 10:35:37 +0000
committeryugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-06-21 10:35:37 +0000
commit9bf9043556167cea83430f574883f4c70a99f7b1 (patch)
tree0c4d4cffd4ecf67273d1c9d73ba6b82805927a09
parent979153cf9b89f534b01fd538a60265d868bd9020 (diff)
merges r23741 from trunk into ruby_1_9_1.
-- * numeric.c (*_numerator,*_denominator): moved to rational.c. * rational.c (*_numerator,*_denominator): moved from numeric.c. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_1@23802 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--numeric.c33
-rw-r--r--rational.c60
-rw-r--r--version.h2
4 files changed, 67 insertions, 34 deletions
diff --git a/ChangeLog b/ChangeLog
index 4d46d17b84..2c346da4ff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Fri Jun 19 09:28:45 2009 Tadayoshi Funaba <tadf@dotrb.org>
+
+ * numeric.c (*_numerator,*_denominator): moved to rational.c.
+
+ * rational.c (*_numerator,*_denominator): moved from numeric.c.
+
Fri Jun 19 08:14:07 2009 Nobuyoshi Nakada <nobu@ruby-lang.org>
* bignum.c (big_lshift, big_rshift): return Bignum always withou
diff --git a/numeric.c b/numeric.c
index cd5bae60b8..6f59c98a47 100644
--- a/numeric.c
+++ b/numeric.c
@@ -1355,7 +1355,6 @@ flo_truncate(VALUE num)
return LONG2FIX(val);
}
-
/*
* call-seq:
* num.floor => integer
@@ -1745,20 +1744,6 @@ rb_num2ull(VALUE val)
#endif /* HAVE_LONG_LONG */
-static VALUE
-num_numerator(VALUE num)
-{
- return rb_funcall(rb_funcall(num, rb_intern("to_r"), 0),
- rb_intern("numerator"), 0);
-}
-
-static VALUE
-num_denominator(VALUE num)
-{
- return rb_funcall(rb_funcall(num, rb_intern("to_r"), 0),
- rb_intern("denominator"), 0);
-}
-
/*
* Document-class: Integer
*
@@ -1959,18 +1944,6 @@ int_ord(num)
return num;
}
-static VALUE
-int_numerator(VALUE num)
-{
- return num;
-}
-
-static VALUE
-int_denominator(VALUE num)
-{
- return INT2FIX(1);
-}
-
/********************************************************************
*
* Document-class: Fixnum
@@ -3140,9 +3113,6 @@ Init_Numeric(void)
rb_define_method(rb_cNumeric, "truncate", num_truncate, 0);
rb_define_method(rb_cNumeric, "step", num_step, -1);
- rb_define_method(rb_cNumeric, "numerator", num_numerator, 0);
- rb_define_method(rb_cNumeric, "denominator", num_denominator, 0);
-
rb_cInteger = rb_define_class("Integer", rb_cNumeric);
rb_undef_alloc_func(rb_cInteger);
rb_undef_method(CLASS_OF(rb_cInteger), "new");
@@ -3165,9 +3135,6 @@ Init_Numeric(void)
rb_define_method(rb_cInteger, "truncate", int_to_i, 0);
rb_define_method(rb_cInteger, "round", int_round, -1);
- rb_define_method(rb_cInteger, "numerator", int_numerator, 0);
- rb_define_method(rb_cInteger, "denominator", int_denominator, 0);
-
rb_cFixnum = rb_define_class("Fixnum", rb_cInteger);
rb_define_method(rb_cFixnum, "to_s", fix_to_s, -1);
diff --git a/rational.c b/rational.c
index 6e35573eb4..c3938adf1f 100644
--- a/rational.c
+++ b/rational.c
@@ -1218,6 +1218,57 @@ rb_Rational(VALUE x, VALUE y)
return nurat_s_convert(2, a, rb_cRational);
}
+#define id_numerator rb_intern("numerator")
+#define f_numerator(x) rb_funcall(x, id_numerator, 0)
+
+#define id_denominator rb_intern("denominator")
+#define f_denominator(x) rb_funcall(x, id_denominator, 0)
+
+#define id_to_r rb_intern("to_r")
+#define f_to_r(x) rb_funcall(x, id_to_r, 0)
+
+static VALUE
+numeric_numerator(VALUE self)
+{
+ return f_numerator(f_to_r(self));
+}
+
+static VALUE
+numeric_denominator(VALUE self)
+{
+ return f_denominator(f_to_r(self));
+}
+
+static VALUE
+integer_numerator(VALUE self)
+{
+ return self;
+}
+
+static VALUE
+integer_denominator(VALUE self)
+{
+ return INT2FIX(1);
+}
+
+static VALUE
+float_numerator(VALUE self)
+{
+ double d = RFLOAT_VALUE(self);
+ if (isinf(d) || isnan(d))
+ return self;
+ return rb_call_super(0, 0);
+}
+
+static VALUE
+float_denominator(VALUE self)
+{
+ double d = RFLOAT_VALUE(self);
+ if (isinf(d) || isnan(d))
+ return INT2FIX(1);
+ return rb_call_super(0, 0);
+}
+
static VALUE
nilclass_to_r(VALUE self)
{
@@ -1594,6 +1645,15 @@ Init_Rational(void)
rb_define_method(rb_cInteger, "lcm", rb_lcm, 1);
rb_define_method(rb_cInteger, "gcdlcm", rb_gcdlcm, 1);
+ rb_define_method(rb_cNumeric, "numerator", numeric_numerator, 0);
+ rb_define_method(rb_cNumeric, "denominator", numeric_denominator, 0);
+
+ rb_define_method(rb_cInteger, "numerator", integer_numerator, 0);
+ rb_define_method(rb_cInteger, "denominator", integer_denominator, 0);
+
+ rb_define_method(rb_cFloat, "numerator", float_numerator, 0);
+ rb_define_method(rb_cFloat, "denominator", float_denominator, 0);
+
rb_define_method(rb_cNilClass, "to_r", nilclass_to_r, 0);
rb_define_method(rb_cInteger, "to_r", integer_to_r, 0);
rb_define_method(rb_cFloat, "to_r", float_to_r, 0);
diff --git a/version.h b/version.h
index d0e87fe1c6..131a9a30b0 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
#define RUBY_VERSION "1.9.1"
#define RUBY_RELEASE_DATE "2009-05-22"
-#define RUBY_PATCHLEVEL 192
+#define RUBY_PATCHLEVEL 193
#define RUBY_VERSION_MAJOR 1
#define RUBY_VERSION_MINOR 9
#define RUBY_VERSION_TEENY 1