Use mrb_true_or_false_value() / in mrb_ary_equal().

This commit is contained in:
Masaki Muranaka
2013-03-19 10:30:19 +09:00
parent 3ebcb9c1a3
commit 162f373ccb
+20 -12
View File
@@ -1059,31 +1059,39 @@ static mrb_value
mrb_ary_equal(mrb_state *mrb, mrb_value ary1)
{
mrb_value ary2;
mrb_bool equal_p;
mrb_get_args(mrb, "o", &ary2);
if (mrb_obj_equal(mrb, ary1, ary2)) return mrb_true_value();
if (mrb_special_const_p(ary2)) return mrb_false_value();
if (!mrb_array_p(ary2)) {
if (mrb_obj_equal(mrb, ary1, ary2)) {
equal_p = 1;
}
else if (mrb_special_const_p(ary2)) {
equal_p = 0;
}
else if (!mrb_array_p(ary2)) {
if (!mrb_respond_to(mrb, ary2, mrb_intern(mrb, "to_ary"))) {
return mrb_false_value();
}
if (mrb_equal(mrb, ary2, ary1)){
return mrb_true_value();
equal_p = 0;
}
else {
return mrb_false_value();
equal_p = mrb_equal(mrb, ary2, ary1);
}
}
if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) return mrb_false_value();
else if (RARRAY_LEN(ary1) != RARRAY_LEN(ary2)) {
equal_p = 0;
}
else {
mrb_int i;
equal_p = 1;
for (i=0; i<RARRAY_LEN(ary1); i++) {
if (!mrb_equal(mrb, ary_elt(ary1, i), ary_elt(ary2, i)))
return mrb_false_value();
if (!mrb_equal(mrb, ary_elt(ary1, i), ary_elt(ary2, i))) {
equal_p = 0;
break;
}
}
return mrb_true_value();
}
return mrb_true_or_false_value(equal_p);
}
/* 15.2.12.5.34 (x) */