diff --git a/ChangeLog b/ChangeLog index 86f9dde8cb..83e869901f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Wed Oct 30 12:20:32 2013 Tanaka Akira + + * time.c (v2w): Normalize a rational value to an integer if possible. + [ruby-core:58070] [Bug #9059] reported by Isaac Schwabacher. + Wed Oct 30 12:08:41 2013 Masaki Matsushita * array.c (rb_ary_uniq_bang): use rb_ary_modify_check() instead of diff --git a/time.c b/time.c index c8f15bfc97..c01ca743d5 100644 --- a/time.c +++ b/time.c @@ -320,6 +320,11 @@ v2w_bignum(VALUE v) static inline wideval_t v2w(VALUE v) { + if (RB_TYPE_P(v, T_RATIONAL)) { + if (RRATIONAL(v)->den != LONG2FIX(1)) + return v; + v = RRATIONAL(v)->num; + } #if WIDEVALUE_IS_WIDER if (FIXNUM_P(v)) { return WIDEVAL_WRAP((WIDEVALUE)(SIGNED_WIDEVALUE)(long)v);