[Bug #18937] Coerce non-real non-Numeric into Complex at comparisons

This commit is contained in:
Nobuyoshi Nakada 2022-08-31 11:01:59 +09:00
parent a9b59e24f4
commit 9212d96307
Notes: git 2022-09-02 14:33:56 +09:00
2 changed files with 19 additions and 7 deletions

View file

@ -1124,15 +1124,23 @@ nucomp_cmp(VALUE self, VALUE other)
if (!k_numeric_p(other)) {
return rb_num_coerce_cmp(self, other, idCmp);
}
if (nucomp_real_p(self)) {
if (RB_TYPE_P(other, T_COMPLEX) && nucomp_real_p(other)) {
if (!nucomp_real_p(self)) {
return Qnil;
}
if (RB_TYPE_P(other, T_COMPLEX)) {
if (nucomp_real_p(other)) {
get_dat2(self, other);
return rb_funcall(adat->real, idCmp, 1, bdat->real);
}
else if (f_real_p(other)) {
get_dat1(self);
}
else {
get_dat1(self);
if (f_real_p(other)) {
return rb_funcall(dat->real, idCmp, 1, other);
}
else {
return rb_num_coerce_cmp(dat->real, other, idCmp);
}
}
return Qnil;
}