diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-05-07 04:14:57 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-05-07 04:14:57 +0000 |
commit | fa161103263f001ba009cecfbc25ed336757ede7 (patch) | |
tree | 0677b0d96fbcc241b80054a32859f4c8131438c5 /rational.c | |
parent | f7b3f1c528260e50db430a0dcd3678d447308d89 (diff) |
* bignum.c (rb_big_fdiv): flo.fdiv(NaN) should result NaN.
* numeric.c (num_quo): renamed and moved from bignum.c.
[ruby-dev:34582]
* bignum.c (rb_big_fdiv): update RDoc description
* rational.c (nurat_s_new_m): small refactoring.
* bignum.c (rb_big2dbl): no need for forceful warning when
converting to float. overflow is a nature of float values.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16308 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'rational.c')
-rw-r--r-- | rational.c | 40 |
1 files changed, 18 insertions, 22 deletions
diff --git a/rational.c b/rational.c index a81ffe1611..f54cb70e24 100644 --- a/rational.c +++ b/rational.c @@ -500,10 +500,8 @@ nurat_s_canonicalize(int argc, VALUE *argv, VALUE klass) { VALUE num, den; - switch (rb_scan_args(argc, argv, "11", &num, &den)) { - case 1: + if (rb_scan_args(argc, argv, "11", &num, &den) == 1) { den = ONE; - break; } nurat_int_check(num); @@ -514,22 +512,25 @@ nurat_s_canonicalize(int argc, VALUE *argv, VALUE klass) #endif static VALUE -nurat_s_new(int argc, VALUE *argv, VALUE klass) +nurat_s_new(VALUE klass, VALUE num, VALUE den) { - VALUE num, den; - - switch (rb_scan_args(argc, argv, "11", &num, &den)) { - case 1: - den = ONE; - break; - } - nurat_int_check(num); nurat_int_check(den); return nurat_s_canonicalize_internal(klass, num, den); } +static VALUE +nurat_s_new_m(int argc, VALUE *argv, VALUE klass) +{ + VALUE num, den; + + if (rb_scan_args(argc, argv, "11", &num, &den) == 1) { + den = ONE; + } + return nurat_s_new(klass, num, den); +} + inline static VALUE f_rational_new1(VALUE klass, VALUE x) { @@ -1425,9 +1426,9 @@ nurat_s_convert(int argc, VALUE *argv, VALUE klass) { VALUE a1, a2; - a1 = Qnil; - a2 = Qnil; - rb_scan_args(argc, argv, "02", &a1, &a2); + if (rb_scan_args(argc, argv, "02", &a1, &a2) == 1) { + a2 = ONE; + } switch (TYPE(a1)) { case T_COMPLEX: @@ -1486,12 +1487,7 @@ nurat_s_convert(int argc, VALUE *argv, VALUE klass) return f_div(a1, a2); } - { - VALUE argv2[2]; - argv2[0] = a1; - argv2[1] = a2; - return nurat_s_new(argc, argv2, klass); - } + return nurat_s_new(klass, a1, a2); } static VALUE @@ -1533,7 +1529,7 @@ Init_Rational(void) rb_funcall(rb_cRational, rb_intern("private_class_method"), 1, ID2SYM(rb_intern("new!"))); - rb_define_singleton_method(rb_cRational, "new", nurat_s_new, -1); + rb_define_singleton_method(rb_cRational, "new", nurat_s_new_m, -1); rb_funcall(rb_cRational, rb_intern("private_class_method"), 1, ID2SYM(rb_intern("new"))); |