summaryrefslogtreecommitdiffhomepage
path: root/src/object.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-05-26 09:54:10 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2017-05-26 09:54:10 +0900
commit83fc915213b23b798ea1afef55fddc0836207a83 (patch)
tree88509b29e278c185308ea676fa465ac4dbe97425 /src/object.c
parent3c312782368e2854c75c56d2008a5cbd78b70dfa (diff)
downloadmruby-83fc915213b23b798ea1afef55fddc0836207a83.tar.gz
mruby-83fc915213b23b798ea1afef55fddc0836207a83.zip
Add new range check macro FIXABLE_FLOAT(); ref #3652
When MRB_INT64, valid value range of mrb_int is bigger than double, which only has 53 bits significant precision.
Diffstat (limited to 'src/object.c')
-rw-r--r--src/object.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/object.c b/src/object.c
index d7f3f5a55..a78e9a443 100644
--- a/src/object.c
+++ b/src/object.c
@@ -534,8 +534,11 @@ mrb_convert_to_integer(mrb_state *mrb, mrb_value val, int base)
switch (mrb_type(val)) {
case MRB_TT_FLOAT:
if (base != 0) goto arg_error;
- if (FIXABLE(mrb_float(val))) {
- break;
+ else {
+ mrb_float f = mrb_float(val);
+ if (FIXABLE_FLOAT(f)) {
+ break;
+ }
}
return mrb_flo_to_fixnum(mrb, val);