Update the PR #4922 according to #3123.

close #3123
parent ed32b6fc
......@@ -2315,7 +2315,33 @@ RETRY_TRY_BLOCK:
{
mrb_int x = mrb_fixnum(regs[a]);
mrb_int y = mrb_fixnum(regs[a+1]);
SET_INT_VALUE(regs[a], y ? x / y : 0);
if (y == 0 || (x == MRB_INT_MIN && y == -1)) {
#ifdef MRB_NO_FLOAT
SET_INT_VALUE(regs[a], y ? x / y : 0);
#else
SET_FLOAT_VALUE(mrb, regs[a], (mrb_float)x / (mrb_float)y);
#endif
}
else {
mrb_int div, mod;
if (y < 0) {
if (x < 0)
div = -x / -y;
else
div = - (x / -y);
}
else {
if (x < 0)
div = - (-x / y);
else
div = x / y;
}
mod = x - div*y;
if ((mod < 0 && y > 0) || (mod > 0 && y < 0)) {
div -= 1;
}
SET_INT_VALUE(regs[a], div);
}
}
NEXT;
#ifndef MRB_NO_FLOAT
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment