mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
[Bug #18937] Coerce non-real non-Numeric into Complex at comparisons
This commit is contained in:
parent
a9b59e24f4
commit
9212d96307
Notes:
git
2022-09-02 14:33:56 +09:00
2 changed files with 19 additions and 7 deletions
16
complex.c
16
complex.c
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue