summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-03-28 11:04:15 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-03-28 11:04:15 +0900
commit514cafe6c3fe548c215f83c84fafa6d3019b0bf4 (patch)
tree9517bd955931a2a66a163753f010606222d1d193
parentb8e434a5e6ed2884e70a77c28430fb8bc1d372dc (diff)
downloadmruby-514cafe6c3fe548c215f83c84fafa6d3019b0bf4.tar.gz
mruby-514cafe6c3fe548c215f83c84fafa6d3019b0bf4.zip
do not use "to_f" to retrieve floats in mrb_get_args(); close #1965
-rw-r--r--include/mruby/numeric.h1
-rw-r--r--src/class.c20
-rw-r--r--src/numeric.c2
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)) {