diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-01-12 16:26:05 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2021-01-12 16:26:05 +0900 |
| commit | b64ec814d6d5d663e7a88a36161f92431616fe62 (patch) | |
| tree | cc25c4c9d80b7b75a9f96071585a507372f5bbe7 /include | |
| parent | 1310368b3f78e9304b7231eb1d6408842340c6cf (diff) | |
| download | mruby-b64ec814d6d5d663e7a88a36161f92431616fe62.tar.gz mruby-b64ec814d6d5d663e7a88a36161f92431616fe62.zip | |
Fix a signed shift bug on 32 bit platforms; ref e1c9e7e
Diffstat (limited to 'include')
| -rw-r--r-- | include/mruby/boxing_word.h | 6 |
1 files changed, 2 insertions, 4 deletions
diff --git a/include/mruby/boxing_word.h b/include/mruby/boxing_word.h index 9e01de4ed..86a04368f 100644 --- a/include/mruby/boxing_word.h +++ b/include/mruby/boxing_word.h @@ -55,8 +55,6 @@ enum mrb_special_consts { #define BOXWORD_SYMBOL_MASK ((1 << BOXWORD_SYMBOL_BIT_POS) - 1) #define BOXWORD_IMMEDIATE_MASK 0x07 -#define BOXWORD_SHIFT_VALUE(o,n,t) \ - (t)(((intptr_t)(o).w) >> BOXWORD_##n##_SHIFT) #define BOXWORD_SET_SHIFT_VALUE(o,n,v) \ ((o).w = (((uintptr_t)(v)) << BOXWORD_##n##_SHIFT) | BOXWORD_##n##_FLAG) #define BOXWORD_SHIFT_VALUE_P(o,n) \ @@ -123,7 +121,7 @@ MRB_API mrb_value mrb_word_boxing_int_value(struct mrb_state*, mrb_int); #ifndef MRB_NO_FLOAT #define mrb_float(o) mrb_val_union(o).fp->f #endif -#define mrb_fixnum(o) BOXWORD_SHIFT_VALUE(o, FIXNUM, mrb_int) +#define mrb_fixnum(o) (mrb_int)(((intptr_t)(o).w) >> BOXWORD_FIXNUM_SHIFT) MRB_INLINE mrb_int mrb_integer_func(mrb_value o) { if (mrb_immediate_p(o)) return mrb_fixnum(o); @@ -133,7 +131,7 @@ mrb_integer_func(mrb_value o) { #ifdef MRB_64BIT #define mrb_symbol(o) mrb_val_union(o).sym #else -#define mrb_symbol(o) BOXWORD_SHIFT_VALUE(o, SYMBOL, mrb_sym) +#define mrb_symbol(o) (mrb_sym)(((o).w) >> BOXWORD_SYMBOL_SHIFT) #endif #define mrb_bool(o) (((o).w & ~(uintptr_t)MRB_Qfalse) != 0) |
