From b8396aec3307fb03dc0cff4aca43c3176a1b89c6 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 17 Jun 2024 08:52:22 +0900 Subject: [PATCH] numeric.c (cmpnum): fix a bug in float-bigint comparison Should have used bigint to float conversion. --- src/numeric.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/numeric.c b/src/numeric.c index deee6f445..225d1b959 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -1881,15 +1881,6 @@ int_to_s(mrb_state *mrb, mrb_value self) static mrb_int cmpnum(mrb_state *mrb, mrb_value v1, mrb_value v2) { -#ifdef MRB_USE_BIGINT - if (mrb_bigint_p(v1)) { - return mrb_bint_cmp(mrb, v1, v2); - } - if (mrb_bigint_p(v2)) { - return mrb_bint_cmp(mrb, mrb_bint_new_int(mrb, mrb_integer(v1)), v2); - } -#endif - #ifdef MRB_NO_FLOAT mrb_int x, y; #else @@ -1904,8 +1895,17 @@ cmpnum(mrb_state *mrb, mrb_value v1, mrb_value v2) switch (mrb_type(v2)) { case MRB_TT_INTEGER: #ifdef MRB_NO_FLOAT +#ifdef MRB_USE_BIGINT + return -2; +#endif y = mrb_integer(v2); #else +#ifdef MRB_USE_BIGINT + if (mrb_bigint_p(v2)) { + y = mrb_bint_as_float(mrb, v2); + break; + } +#endif y = (mrb_float)mrb_integer(v2); #endif break;