diff options
| -rw-r--r-- | include/mruby/numeric.h | 1 | ||||
| -rw-r--r-- | src/class.c | 20 | ||||
| -rw-r--r-- | src/numeric.c | 2 |
3 files changed, 3 insertions, 20 deletions
diff --git a/include/mruby/numeric.h b/include/mruby/numeric.h index d0305160c..17291c2f2 100644 --- a/include/mruby/numeric.h +++ b/include/mruby/numeric.h @@ -23,6 +23,7 @@ mrb_value mrb_fixnum_plus(mrb_state *mrb, mrb_value x, mrb_value y); mrb_value mrb_fixnum_minus(mrb_state *mrb, mrb_value x, mrb_value y); mrb_value mrb_fixnum_mul(mrb_state *mrb, mrb_value x, mrb_value y); mrb_value mrb_num_div(mrb_state *mrb, mrb_value x, mrb_value y); +mrb_float mrb_to_flo(mrb_state *mrb, mrb_value x); #if defined(__cplusplus) } /* extern "C" { */ diff --git a/src/class.c b/src/class.c index 17e5410bc..a214d7b27 100644 --- a/src/class.c +++ b/src/class.c @@ -568,25 +568,7 @@ mrb_get_args(mrb_state *mrb, const char *format, ...) p = va_arg(ap, mrb_float*); if (i < argc) { - switch (mrb_type(*sp)) { - case MRB_TT_FLOAT: - *p = mrb_float(*sp); - break; - case MRB_TT_FIXNUM: - *p = (mrb_float)mrb_fixnum(*sp); - break; - case MRB_TT_STRING: - mrb_raise(mrb, E_TYPE_ERROR, "no implicit conversion of String into Float"); - break; - default: - { - mrb_value tmp; - - tmp = mrb_convert_type(mrb, *sp, MRB_TT_FLOAT, "Float", "to_f"); - *p = mrb_float(tmp); - } - break; - } + *p = mrb_to_flo(mrb, *sp); sp++; i++; } diff --git a/src/numeric.c b/src/numeric.c index b2507fb0b..c3209bc6f 100644 --- a/src/numeric.c +++ b/src/numeric.c @@ -27,7 +27,7 @@ #define FLO_EPSILON DBL_EPSILON #endif -static mrb_float +mrb_float mrb_to_flo(mrb_state *mrb, mrb_value val) { switch (mrb_type(val)) { |
