summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2021-12-31 10:26:58 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2021-12-31 10:54:28 +0900
commit7f40b645d2773c8f50c48ae4adf90488e164da55 (patch)
treebd4041653a38c7d4b975fe869043b756b105d2a8
parenteea418bcceba5091b19033f5555ca76cc0f15d0f (diff)
downloadmruby-7f40b645d2773c8f50c48ae4adf90488e164da55.tar.gz
mruby-7f40b645d2773c8f50c48ae4adf90488e164da55.zip
numeric.c: `mrb_as_float` should not call `to_f` for generic objects.
It should only call `to_f` for Rational and Complex numbers. Ref #5540 #5613 #5620
-rw-r--r--src/numeric.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/numeric.c b/src/numeric.c
index fd9f5ce2c..a3021b19e 100644
--- a/src/numeric.c
+++ b/src/numeric.c
@@ -29,13 +29,13 @@ mrb_as_float(mrb_state *mrb, mrb_value val)
return (mrb_float)mrb_integer(val);
case MRB_TT_FLOAT:
break;
- case MRB_TT_STRING:
- case MRB_TT_FALSE:
- case MRB_TT_TRUE:
- mrb_raise(mrb, E_TYPE_ERROR, "non float value");
- default:
+ case MRB_TT_RATIONAL:
+ case MRB_TT_COMPLEX:
val = mrb_type_convert(mrb, val, MRB_TT_FLOAT, MRB_SYM(to_f));
break;
+ default:
+ mrb_raise(mrb, E_TYPE_ERROR, "non float value");
+ break;
}
return mrb_float(val);
}