[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]