From 6d2e7f50e245b63f238c2edb9a7a7f221099ff9b Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 9 Dec 2024 13:04:01 +0900 Subject: [PATCH] mruby-bigint: compact mpz_add_int,mpz_sub_int calling conditions --- mrbgems/mruby-bigint/core/bigint.c | 36 +++++------------------------- 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/mrbgems/mruby-bigint/core/bigint.c b/mrbgems/mruby-bigint/core/bigint.c index dff4b70dd..b301c0372 100644 --- a/mrbgems/mruby-bigint/core/bigint.c +++ b/mrbgems/mruby-bigint/core/bigint.c @@ -1509,25 +1509,12 @@ mrb_bint_add_n(mrb_state *mrb, mrb_value x, mrb_value y) mrb_int n = mrb_integer(y); if (int_fit_limb_p(n)) { mpz_init_set(mrb, &z, &a); - if (n > 0) { - if (z.sn > 0) { - mpz_add_int(mrb, &z, n); - } - else { - mpz_sub_int(mrb, &z, n); - } + if ((n > 0) ^ (z.sn > 0)) { + mpz_sub_int(mrb, &z, n<0 ? -n : n); } else { - n = -n; - if (z.sn > 0) { - mpz_sub_int(mrb, &z, n); - } - else { - mpz_add_int(mrb, &z, n); - } + mpz_add_int(mrb, &z, n<0 ? -n : n); } - struct RBigint *v = bint_new(mrb, &z); - return mrb_obj_value(v); } } y = mrb_as_bint(mrb, y); @@ -1563,22 +1550,11 @@ mrb_bint_sub_n(mrb_state *mrb, mrb_value x, mrb_value y) mrb_int n = mrb_integer(y); if (int_fit_limb_p(n)) { mpz_init_set(mrb, &z, &a); - if (n > 0) { - if (z.sn > 0) { - mpz_sub_int(mrb, &z, n); - } - else { - mpz_add_int(mrb, &z, n); - } + if ((n > 0) ^ (z.sn > 0)) { + mpz_add_int(mrb, &z, n<0 ? -n : n); } else { - n = -n; - if (z.sn > 0) { - mpz_add_int(mrb, &z, n); - } - else { - mpz_sub_int(mrb, &z, n); - } + mpz_sub_int(mrb, &z, n<0 ? -n : n); } struct RBigint *v = bint_new(mrb, &z); return mrb_obj_value(v);