kernel.c (mrb_equal): move mrb_equal() from object.c

This commit is contained in:
Yukihiro "Matz" Matsumoto
2023-06-15 23:31:45 +09:00
parent 2be7cba8f5
commit 359c630d73
2 changed files with 32 additions and 32 deletions
+32
View File
@@ -61,6 +61,38 @@ mrb_obj_inspect(mrb_state *mrb, mrb_value obj)
return mrb_any_to_s(mrb, obj);
}
MRB_API mrb_bool
mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
{
mrb_value result;
if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE;
#ifndef MRB_NO_FLOAT
/* value mixing with integer and float */
if (mrb_integer_p(obj1) && mrb_float_p(obj2)) {
if ((mrb_float)mrb_integer(obj1) == mrb_float(obj2))
return TRUE;
return FALSE;
}
else if (mrb_float_p(obj1) && mrb_integer_p(obj2)) {
if (mrb_float(obj1) == (mrb_float)mrb_integer(obj2))
return TRUE;
return FALSE;
}
#endif
#ifdef MRB_USE_BIGINT
if (mrb_bigint_p(obj1) &&
(mrb_integer_p(obj2) || mrb_bigint_p(obj2) || mrb_float_p(obj2))) {
if (mrb_bint_cmp(mrb, obj1, obj2) == 0)
return TRUE;
return FALSE;
}
#endif
result = mrb_funcall_argv(mrb, obj1, MRB_OPSYM(eq), 1, &obj2);
if (mrb_test(result)) return TRUE;
return FALSE;
}
/* 15.3.1.3.2 */
/*
* call-seq:
-32
View File
@@ -50,38 +50,6 @@ mrb_obj_equal(mrb_state *mrb, mrb_value v1, mrb_value v2)
return mrb_obj_eq(mrb, v1, v2);
}
MRB_API mrb_bool
mrb_equal(mrb_state *mrb, mrb_value obj1, mrb_value obj2)
{
mrb_value result;
if (mrb_obj_eq(mrb, obj1, obj2)) return TRUE;
#ifndef MRB_NO_FLOAT
/* value mixing with integer and float */
if (mrb_integer_p(obj1) && mrb_float_p(obj2)) {
if ((mrb_float)mrb_integer(obj1) == mrb_float(obj2))
return TRUE;
return FALSE;
}
else if (mrb_float_p(obj1) && mrb_integer_p(obj2)) {
if (mrb_float(obj1) == (mrb_float)mrb_integer(obj2))
return TRUE;
return FALSE;
}
#endif
#ifdef MRB_USE_BIGINT
if (mrb_bigint_p(obj1) &&
(mrb_integer_p(obj2) || mrb_bigint_p(obj2) || mrb_float_p(obj2))) {
if (mrb_bint_cmp(mrb, obj1, obj2) == 0)
return TRUE;
return FALSE;
}
#endif
result = mrb_funcall_argv(mrb, obj1, MRB_OPSYM(eq), 1, &obj2);
if (mrb_test(result)) return TRUE;
return FALSE;
}
/*
* Document-class: NilClass
*