diff options
author | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-12 06:07:01 +0000 |
---|---|---|
committer | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-11-12 06:07:01 +0000 |
commit | 2e9357e7ea4c35c0ea101487bc2e417622b36b62 (patch) | |
tree | 726776367c1580b084496c81d733576cd7e3edc3 /rational.c | |
parent | d611a7c77bc4128dd1edf5503c899df6cf92694c (diff) |
rational.c: optimize Rational#-@
* rational.c (nurat_negate): introduced to optimize Rational#-@.
Author: Tadashi Saito <[email protected]>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@56735 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'rational.c')
-rw-r--r-- | rational.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/rational.c b/rational.c index afd6e5033a..1d569ce55a 100644 --- a/rational.c +++ b/rational.c @@ -637,6 +637,19 @@ nurat_denominator(VALUE self) return dat->den; } +/* + * call-seq: + * -rat -> rational + * + * Negates +rat+. + */ +static VALUE +nurat_negate(VALUE self) +{ + get_dat1(self); + return f_rational_new2(CLASS_OF(self), rb_int_uminus(dat->num), dat->den); +} + #ifndef NDEBUG #define f_imul f_imul_orig #endif @@ -2591,6 +2604,7 @@ Init_Rational(void) rb_define_method(rb_cRational, "numerator", nurat_numerator, 0); rb_define_method(rb_cRational, "denominator", nurat_denominator, 0); + rb_define_method(rb_cRational, "-@", nurat_negate, 0); rb_define_method(rb_cRational, "+", rb_rational_plus, 1); rb_define_method(rb_cRational, "-", nurat_sub, 1); rb_define_method(rb_cRational, "*", nurat_mul, 1); |