summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--time.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/time.c b/time.c
index 0d93ec65ff..04c111a0c6 100644
--- a/time.c
+++ b/time.c
@@ -103,7 +103,17 @@ mul(VALUE x, VALUE y)
return rb_funcall(x, '*', 1, y);
}
-#define div(x,y) (rb_funcall((x), id_div, 1, (y)))
+static VALUE
+_div(VALUE x, VALUE y)
+{
+ if (FIXNUM_P(x) && FIXNUM_P(y)) {
+ return rb_fix_div_fix(x, y);
+ }
+ if (RB_TYPE_P(x, T_BIGNUM))
+ return rb_big_div(x, y);
+ return rb_funcall(x, id_div, 1, y);
+}
+#define div(x,y) _div(x,y)
static VALUE
mod(VALUE x, VALUE y)