diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-05-13 23:15:44 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-05-13 23:15:44 +0900 |
| commit | c12f64271a7a76b5405f72fff65c52c254e72be4 (patch) | |
| tree | cf5298f7873ff4267422cd1c0cb6bac2325e24f8 /include | |
| parent | 190d9ebbe2c3369853f7aeff5420ed3c5b645461 (diff) | |
| download | mruby-c12f64271a7a76b5405f72fff65c52c254e72be4.tar.gz mruby-c12f64271a7a76b5405f72fff65c52c254e72be4.zip | |
fix overflow error like #2244 on MRB_WORD_BOXING
Diffstat (limited to 'include')
| -rw-r--r-- | include/mruby/value.h | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/include/mruby/value.h b/include/mruby/value.h index 5c24e8843..f6d08f58e 100644 --- a/include/mruby/value.h +++ b/include/mruby/value.h @@ -27,8 +27,13 @@ # else typedef int64_t mrb_int; # define MRB_INT_BIT 64 -# define MRB_INT_MIN INT64_MIN -# define MRB_INT_MAX INT64_MAX +# ifdef MRB_WORD_BOXING +# define MRB_INT_MIN (INT64_MIN>>MRB_FIXNUM_SHIFT) +# define MRB_INT_MAX (INT64_MAX>>MRB_FIXNUM_SHIFT) +# else +# define MRB_INT_MIN INT64_MIN +# define MRB_INT_MAX INT64_MAX +# endif # define PRIdMRB_INT PRId64 # define PRIiMRB_INT PRIi64 # define PRIoMRB_INT PRIo64 @@ -36,6 +41,9 @@ # define PRIXMRB_INT PRIX64 # endif #elif defined(MRB_INT16) +# ifdef MRB_WORD_BOXING +# error "MRB_INT16 is too small for MRB_WORD_BOXING." +# endif typedef int16_t mrb_int; # define MRB_INT_BIT 16 # define MRB_INT_MIN INT16_MIN @@ -43,8 +51,13 @@ #else typedef int32_t mrb_int; # define MRB_INT_BIT 32 -# define MRB_INT_MIN INT32_MIN -# define MRB_INT_MAX INT32_MAX +# ifdef MRB_WORD_BOXING +# define MRB_INT_MIN (INT32_MIN>>MRB_FIXNUM_SHIFT) +# define MRB_INT_MAX (INT32_MAX>>MRB_FIXNUM_SHIFT) +# else +# define MRB_INT_MIN INT32_MIN +# define MRB_INT_MAX INT32_MAX +# endif # define PRIdMRB_INT PRId32 # define PRIiMRB_INT PRIi32 # define PRIoMRB_INT PRIo32 |
