Support integer and float combination in `mrb_equal()`.

parent 33c8d6af
...@@ -47,6 +47,17 @@ mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2) ...@@ -47,6 +47,17 @@ mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
mrb_value result; mrb_value result;
if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE; if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE;
#ifndef MRB_WITHOUT_FLOAT
/* value mixing with integer and float */
if (mrb_fixnum_p(obj1)) {
if (mrb_float_p(obj2) && (mrb_float)mrb_fixnum(obj1) == mrb_float(obj2))
return TRUE;
}
else if (mrb_float_p(obj1)) {
if (mrb_fixnum_p(obj2) && mrb_float(obj1) == (mrb_float)mrb_fixnum(obj2))
return TRUE;
}
#endif
result = mrb_funcall(mrb, obj1, "==", 1, obj2); result = mrb_funcall(mrb, obj1, "==", 1, obj2);
if (mrb_test(result)) return TRUE; if (mrb_test(result)) return TRUE;
return FALSE; return FALSE;
......
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