ruby-changes:56840
From: Nobuyoshi <ko1@a...>
Date: Tue, 6 Aug 2019 23:54:24 +0900 (JST)
Subject: [ruby-changes:56840] Nobuyoshi Nakada: 0ed298f382 (master): Refine time_to_r
https://git.ruby-lang.org/ruby.git/commit/?id=0ed298f382 From 0ed298f382e0fc0f119f4896394aacf3b74f6687 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada <nobu@r...> Date: Tue, 6 Aug 2019 23:39:14 +0900 Subject: Refine time_to_r * time.c (time_to_r): get rid canonicalize and uncanonicalize one-denominator rational, by rb_time_unmagnify_to_rational. diff --git a/time.c b/time.c index 91e7d9d..40b2f06 100644 --- a/time.c +++ b/time.c @@ -141,9 +141,8 @@ modv(VALUE x, VALUE y) https://github.com/ruby/ruby/blob/trunk/time.c#L141 #define neg(x) (subv(INT2FIX(0), (x))) static VALUE -quov(VALUE x, VALUE y) +quor(VALUE x, VALUE y) { - VALUE ret; if (FIXNUM_P(x) && FIXNUM_P(y)) { long a, b, c; a = FIX2LONG(x); @@ -155,7 +154,13 @@ quov(VALUE x, VALUE y) https://github.com/ruby/ruby/blob/trunk/time.c#L154 return LONG2FIX(c); } } - ret = rb_numeric_quo(x, y); + return rb_numeric_quo(x, y); +} + +static VALUE +quov(VALUE x, VALUE y) +{ + VALUE ret = quor(x, y); if (RB_TYPE_P(ret, T_RATIONAL) && RRATIONAL(ret)->den == INT2FIX(1)) { ret = RRATIONAL(ret)->num; @@ -548,10 +553,16 @@ rb_time_magnify(wideval_t w) https://github.com/ruby/ruby/blob/trunk/time.c#L553 return wmul(w, WINT2FIXWV(TIME_SCALE)); } +static VALUE +rb_time_unmagnify_to_rational(wideval_t w) +{ + return quor(w2v(w), INT2FIX(TIME_SCALE)); +} + static wideval_t rb_time_unmagnify(wideval_t w) { - return wquo(w, WINT2FIXWV(TIME_SCALE)); + return v2w(rb_time_unmagnify_to_rational(w)); } static VALUE @@ -3549,7 +3560,7 @@ time_to_r(VALUE time) https://github.com/ruby/ruby/blob/trunk/time.c#L3560 VALUE v; GetTimeval(time, tobj); - v = w2v(rb_time_unmagnify(tobj->timew)); + v = rb_time_unmagnify_to_rational(tobj->timew); if (!RB_TYPE_P(v, T_RATIONAL)) { v = rb_Rational1(v); } -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/