summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorMasaki Muranaka <[email protected]>2013-03-29 21:56:41 +0900
committerMasaki Muranaka <[email protected]>2013-03-29 22:19:26 +0900
commitf82ae7653a53946fa14ed7a334b686265dc63dd3 (patch)
treea954b6e7db8c914a078a9ae2447a5f8beebc7ff7
parent710f6252548f4a0eaf16a7b0d4d973a50e4520c0 (diff)
downloadmruby-f82ae7653a53946fa14ed7a334b686265dc63dd3.tar.gz
mruby-f82ae7653a53946fa14ed7a334b686265dc63dd3.zip
Change the second argument of mrb_flo_to_str().
Export mrb_flo_to_str() as API.
-rw-r--r--include/mruby/numeric.h2
-rw-r--r--src/numeric.c12
2 files changed, 11 insertions, 3 deletions
diff --git a/include/mruby/numeric.h b/include/mruby/numeric.h
index 6d90fbad7..615fdfe57 100644
--- a/include/mruby/numeric.h
+++ b/include/mruby/numeric.h
@@ -16,6 +16,8 @@ extern "C" {
#define FIXABLE(f) (POSFIXABLE(f) && NEGFIXABLE(f))
mrb_value mrb_flo_to_fixnum(mrb_state *mrb, mrb_value val);
+mrb_value mrb_flo_to_str(mrb_state *mrb, mrb_value flo, int max_digit);
+
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);
diff --git a/src/numeric.c b/src/numeric.c
index 02a18c130..c24e84958 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -163,13 +163,19 @@ num_abs(mrb_state *mrb, mrb_value num)
*/
mrb_value
-mrb_flo_to_str(mrb_state *mrb, mrb_float n, int max_digit)
+mrb_flo_to_str(mrb_state *mrb, mrb_value flo, int max_digit)
{
mrb_value result;
+ mrb_float n;
if (max_digit > 40) {
mrb_raise(mrb, E_RANGE_ERROR, "Too large max_digit.");
}
+ else if (!mrb_float_p(flo)) {
+ mrb_raise(mrb, E_TYPE_ERROR, "non float value");
+ }
+
+ n = mrb_float(flo);
if (isnan(n)) {
result = mrb_str_new(mrb, "NaN", 3);
@@ -270,9 +276,9 @@ static mrb_value
flo_to_s(mrb_state *mrb, mrb_value flt)
{
#ifdef MRB_USE_FLOAT
- return mrb_flo_to_str(mrb, mrb_float(flt), 7);
+ return mrb_flo_to_str(mrb, flt, 7);
#else
- return mrb_flo_to_str(mrb, mrb_float(flt), 14);
+ return mrb_flo_to_str(mrb, flt, 14);
#endif
}