Commit 710f6252 authored by Masaki Muranaka's avatar Masaki Muranaka

Remove mrb_flt2big() as there is no bignum in the core.

 Add new API mrb_flo_to_fixnum(). You can replace mrb_flt2big() to mrb_flo_to_fixnum() with few modifications.
parent 6818ec0b
...@@ -15,7 +15,7 @@ extern "C" { ...@@ -15,7 +15,7 @@ extern "C" {
#define NEGFIXABLE(f) ((f) >= MRB_INT_MIN) #define NEGFIXABLE(f) ((f) >= MRB_INT_MIN)
#define FIXABLE(f) (POSFIXABLE(f) && NEGFIXABLE(f)) #define FIXABLE(f) (POSFIXABLE(f) && NEGFIXABLE(f))
mrb_value mrb_flt2big(mrb_state *mrb, mrb_float d); mrb_value mrb_flo_to_fixnum(mrb_state *mrb, mrb_value val);
mrb_value mrb_fix2str(mrb_state *mrb, mrb_value x, int base); mrb_value mrb_fix2str(mrb_state *mrb, mrb_value x, int base);
mrb_value mrb_fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y); mrb_value mrb_fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y);
......
...@@ -806,7 +806,7 @@ retry: ...@@ -806,7 +806,7 @@ retry:
val = mrb_fixnum_value((mrb_int)mrb_float(val)); val = mrb_fixnum_value((mrb_int)mrb_float(val));
goto bin_retry; goto bin_retry;
} }
val = mrb_flt2big(mrb, mrb_float(val)); val = mrb_flo_to_fixnum(mrb, val);
if (mrb_fixnum_p(val)) goto bin_retry; if (mrb_fixnum_p(val)) goto bin_retry;
break; break;
case MRB_TT_STRING: case MRB_TT_STRING:
......
...@@ -1175,11 +1175,18 @@ fix_to_f(mrb_state *mrb, mrb_value num) ...@@ -1175,11 +1175,18 @@ fix_to_f(mrb_state *mrb, mrb_value num)
* FloatDomainError: Infinity * FloatDomainError: Infinity
*/ */
/* ------------------------------------------------------------------------*/ /* ------------------------------------------------------------------------*/
static mrb_int mrb_value
flt2big(mrb_state *mrb, mrb_float d) mrb_flo_to_fixnum(mrb_state *mrb, mrb_value x)
{ {
mrb_int z; mrb_int z;
if (mrb_float_p(x)) {
mrb_raise(mrb, E_TYPE_ERROR, "non float value");
z = 0; /* not reached. just supress warnings. */
}
else {
mrb_float d = mrb_float(x);
if (isinf(d)) { if (isinf(d)) {
mrb_raise(mrb, E_FLOATDOMAIN_ERROR, d < 0 ? "-Infinity" : "Infinity"); mrb_raise(mrb, E_FLOATDOMAIN_ERROR, d < 0 ? "-Infinity" : "Infinity");
} }
...@@ -1187,13 +1194,8 @@ flt2big(mrb_state *mrb, mrb_float d) ...@@ -1187,13 +1194,8 @@ flt2big(mrb_state *mrb, mrb_float d)
mrb_raise(mrb, E_FLOATDOMAIN_ERROR, "NaN"); mrb_raise(mrb, E_FLOATDOMAIN_ERROR, "NaN");
} }
z = (mrb_int)d; z = (mrb_int)d;
return z; }
} return mrb_fixnum_value(z);
mrb_value
mrb_flt2big(mrb_state *mrb, mrb_float d)
{
return mrb_fixnum_value(flt2big(mrb, d));
} }
mrb_value mrb_value
......
...@@ -530,7 +530,7 @@ mrb_convert_to_integer(mrb_state *mrb, mrb_value val, int base) ...@@ -530,7 +530,7 @@ mrb_convert_to_integer(mrb_state *mrb, mrb_value val, int base)
if (FIXABLE(mrb_float(val))) { if (FIXABLE(mrb_float(val))) {
break; break;
} }
return mrb_flt2big(mrb, mrb_float(val)); return mrb_flo_to_fixnum(mrb, val);
case MRB_TT_FIXNUM: case MRB_TT_FIXNUM:
if (base != 0) goto arg_error; if (base != 0) goto arg_error;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment