From 83fc915213b23b798ea1afef55fddc0836207a83 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Fri, 26 May 2017 09:54:10 +0900 Subject: 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. --- include/mruby/numeric.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'include') diff --git a/include/mruby/numeric.h b/include/mruby/numeric.h index 36489b1ce..e4c1a2f56 100644 --- a/include/mruby/numeric.h +++ b/include/mruby/numeric.h @@ -20,6 +20,12 @@ MRB_BEGIN_DECL #define NEGFIXABLE(f) ((f) >= MRB_INT_MIN) #define FIXABLE(f) (POSFIXABLE(f) && NEGFIXABLE(f)) +#ifdef MRB_INT64 +#define FIXABLE_FLOAT(f) FIXABLE((mrb_int)(f)) +#else +#define FIXABLE_FLOAT(f) FIXABLE(f) +#endif + MRB_API mrb_value mrb_flo_to_fixnum(mrb_state *mrb, mrb_value val); MRB_API mrb_value mrb_fixnum_to_str(mrb_state *mrb, mrb_value x, int base); /* ArgumentError if format string doesn't match /%(\.[0-9]+)?[aAeEfFgG]/ */ -- cgit v1.2.3