diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-07-20 02:56:17 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2019-07-22 13:23:53 +0900 |
| commit | 6f67fddb87bc1bb098431fa23cbf39f5fedea43e (patch) | |
| tree | 79739d9c9760cd2915a16e3ba001ef72726d5263 /include | |
| parent | cf4cddf7a1e67109ca36f058719fa62c48b6b315 (diff) | |
| download | mruby-6f67fddb87bc1bb098431fa23cbf39f5fedea43e.tar.gz mruby-6f67fddb87bc1bb098431fa23cbf39f5fedea43e.zip | |
Fix `FIXABLE_FLOAT()` on `MRB_INT64`; ref #4566
Normal `TYPED_FIXABLE(f,mrb_float)` does not work on 64bit int from
casting problems. The new approach works well, but assumes two's
complement and IEEE-754 floating point numbers.
Diffstat (limited to 'include')
| -rw-r--r-- | include/mruby/numeric.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/include/mruby/numeric.h b/include/mruby/numeric.h index 34707e441..07266aa10 100644 --- a/include/mruby/numeric.h +++ b/include/mruby/numeric.h @@ -23,8 +23,12 @@ MRB_BEGIN_DECL #define NEGFIXABLE(f) TYPED_NEGFIXABLE(f,mrb_int) #define FIXABLE(f) TYPED_FIXABLE(f,mrb_int) #ifndef MRB_WITHOUT_FLOAT +#ifdef MRB_INT64 +#define FIXABLE_FLOAT(f) ((f)>=-9223372036854775808.0 && (f)<9223372036854775808.0) +#else #define FIXABLE_FLOAT(f) TYPED_FIXABLE(f,mrb_float) #endif +#endif #ifndef MRB_WITHOUT_FLOAT MRB_API mrb_value mrb_flo_to_fixnum(mrb_state *mrb, mrb_value val); |
