diff --git a/mrbgems/mruby-numeric-ext/src/numeric_ext.c b/mrbgems/mruby-numeric-ext/src/numeric_ext.c index e2db07b9b..fb4066bf1 100644 --- a/mrbgems/mruby-numeric-ext/src/numeric_ext.c +++ b/mrbgems/mruby-numeric-ext/src/numeric_ext.c @@ -43,7 +43,7 @@ int_remainder(mrb_state *mrb, mrb_value x) #endif } -mrb_value mrb_int_pow(mrb_state *mrb, mrb_value x); +mrb_value mrb_int_pow(mrb_state *mrb, mrb_value x, mrb_value y); /* * call-seq: @@ -62,7 +62,7 @@ int_powm(mrb_state *mrb, mrb_value x) mrb_int base, exp, mod, result = 1; if (mrb_get_argc(mrb) == 1) { - return mrb_int_pow(mrb, x); + return mrb_int_pow(mrb, x, mrb_get_arg1(mrb)); } mrb_get_args(mrb, "io", &exp, &m); if (exp < 0) mrb_raise(mrb, E_ARGUMENT_ERROR, "int.pow(n,m): n must be positive"); diff --git a/src/numeric.c b/src/numeric.c index cb43328a6..1da9f17e7 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -39,22 +39,11 @@ mrb_int_noconv(mrb_state *mrb, mrb_value y) mrb_raisef(mrb, E_TYPE_ERROR, "can't convert %Y into Integer", y); } -/* - * call-seq: - * - * num ** other -> num - * - * Raises num the other power. - * - * 2.0**3 #=> 8.0 - */ mrb_value -mrb_int_pow(mrb_state *mrb, mrb_value x) +mrb_int_pow(mrb_state *mrb, mrb_value x, mrb_value y) { #ifdef MRB_USE_BIGINT if (mrb_bigint_p(x)) { - mrb_value y = mrb_get_arg1(mrb); - #ifndef MRB_NO_FLOAT if (mrb_float_p(y)) { return mrb_float_value(mrb, pow(mrb_bint_as_float(mrb, x), mrb_float(y))); @@ -68,8 +57,6 @@ mrb_int_pow(mrb_state *mrb, mrb_value x) mrb_int exp; #ifndef MRB_NO_FLOAT - mrb_value y = mrb_get_arg1(mrb); - if (mrb_float_p(y)) { return mrb_float_value(mrb, pow((double)base, mrb_float(y))); } @@ -110,7 +97,21 @@ mrb_int_pow(mrb_state *mrb, mrb_value x) } return mrb_int_value(mrb, result); } -#define int_pow mrb_int_pow + +/* + * call-seq: + * + * num ** other -> num + * + * Raises num the other power. + * + * 2.0**3 #=> 8.0 + */ +static mrb_value +int_pow(mrb_state *mrb, mrb_value x) +{ + return mrb_int_pow(mrb, x, mrb_get_arg1(mrb)); +} mrb_int mrb_div_int(mrb_int x, mrb_int y)