diff options
Diffstat (limited to 'src/object.c')
| -rw-r--r-- | src/object.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/object.c b/src/object.c index de0298fab..8a2addc20 100644 --- a/src/object.c +++ b/src/object.c @@ -485,26 +485,22 @@ mrb_obj_is_kind_of(mrb_state *mrb, mrb_value obj, struct RClass *c) } MRB_API mrb_value -mrb_to_integer(mrb_state *mrb, mrb_value val) +mrb_ensure_int_type(mrb_state *mrb, mrb_value val) { - if (!mrb_integer_p(val)) { #ifndef MRB_NO_FLOAT if (mrb_float_p(val)) { return mrb_float_to_integer(mrb, val); } #endif - if (mrb_string_p(val)) { - mrb_raise(mrb, E_TYPE_ERROR, "can't convert String to Integer"); - } - return mrb_type_convert(mrb, val, MRB_TT_INTEGER, MRB_SYM(to_i)); + mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Integer", val); } return val; } #ifndef MRB_NO_FLOAT MRB_API mrb_value -mrb_to_float(mrb_state *mrb, mrb_value val) +mrb_ensure_float_type(mrb_state *mrb, mrb_value val) { if (mrb_nil_p(val)) { mrb_raise(mrb, E_TYPE_ERROR, "can't convert nil into Float"); @@ -516,11 +512,14 @@ mrb_to_float(mrb_state *mrb, mrb_value val) case MRB_TT_FLOAT: return val; - case MRB_TT_STRING: - return mrb_float_value(mrb, mrb_str_to_dbl(mrb, val, TRUE)); + case MRB_TT_RATIONAL: + case MRB_TT_COMPLEX: + return mrb_type_convert(mrb, val, MRB_TT_FLOAT, MRB_SYM(to_f)); default: - return mrb_type_convert(mrb, val, MRB_TT_FLOAT, MRB_SYM(to_f)); + mrb_raisef(mrb, E_TYPE_ERROR, "%Y cannot be converted to Float", val); + /* not reached */ + return val; } } #endif |
