diff options
Diffstat (limited to 'insns.def')
-rw-r--r-- | insns.def | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -1524,13 +1524,15 @@ opt_mod { if (FIXNUM_2_P(recv, obj) && BASIC_OP_UNREDEFINED_P(BOP_MOD, FIXNUM_REDEFINED_OP_FLAG )) { - long x, y, mod; + long x, y; x = FIX2LONG(recv); y = FIX2LONG(obj); - { + if (x > 0 && y > 0) { + val = LONG2FIX(x % y); + } else { /* copied from numeric.c#fixdivmod */ - long div; + long div, mod; if (y == 0) rb_num_zerodiv(); @@ -1551,8 +1553,8 @@ opt_mod mod += y; div -= 1; } + val = LONG2FIX(mod); } - val = LONG2FIX(mod); } else if (FLONUM_2_P(recv, obj) && BASIC_OP_UNREDEFINED_P(BOP_MOD, FLOAT_REDEFINED_OP_FLAG)) { |