aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-11-18 15:04:36 +0000
committermrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2016-11-18 15:04:36 +0000
commit9b3a8aed6da8782c5f66817103c40d2a4d63836b (patch)
treeb039a3665801d016f23295c309b56578a1a27c13
parent3695ae9e6bc86e95b7ad9da78b6c82a12e0cd531 (diff)
downloadruby-9b3a8aed6da8782c5f66817103c40d2a4d63836b.tar.gz
rational.c: optimization and refactoring
* rational.c (nurat_s_new_bang, nurat_canonicalize): small optimization by using rb_int_uminus instead of f_negate. * rational.c (nurat_canonicalize): add assertions for parameters. * rational.c (f_negate, id_negate): removed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56828 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--rational.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/rational.c b/rational.c
index e554d5df37..ee73426786 100644
--- a/rational.c
+++ b/rational.c
@@ -32,7 +32,7 @@
VALUE rb_cRational;
-static ID id_abs, id_idiv, id_integer_p, id_negate, id_to_i,
+static ID id_abs, id_idiv, id_integer_p, id_to_i,
id_i_num, id_i_den;
#define f_boolcast(x) ((x) ? Qtrue : Qfalse)
@@ -137,7 +137,6 @@ f_abs(VALUE x)
}
fun1(integer_p)
-fun1(negate)
inline static VALUE
f_to_i(VALUE x)
@@ -415,8 +414,8 @@ nurat_s_new_bang(int argc, VALUE *argv, VALUE klass)
den = f_to_i(den);
if (INT_NEGATIVE_P(den)) {
- num = f_negate(num);
- den = f_negate(den);
+ num = rb_int_uminus(num);
+ den = rb_int_uminus(den);
}
else if (INT_ZERO_P(den)) {
rb_num_zerodiv();
@@ -469,9 +468,11 @@ nurat_int_value(VALUE num)
static void
nurat_canonicalize(VALUE *num, VALUE *den)
{
+ assert(num != NULL && RB_INTEGER_TYPE_P(*num));
+ assert(den != NULL && RB_INTEGER_TYPE_P(*den));
if (INT_NEGATIVE_P(*den)) {
- *num = f_negate(*num);
- *den = f_negate(*den);
+ *num = rb_int_uminus(*num);
+ *den = rb_int_uminus(*den);
}
else if (INT_ZERO_P(*den)) {
rb_num_zerodiv();
@@ -2615,7 +2616,6 @@ Init_Rational(void)
id_abs = rb_intern("abs");
id_idiv = rb_intern("div");
id_integer_p = rb_intern("integer?");
- id_negate = rb_intern("-@");
id_to_i = rb_intern("to_i");
id_i_num = rb_intern("@numerator");
id_i_den = rb_intern("@denominator");