diff options
| author | dearblue <[email protected]> | 2018-08-05 20:33:44 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-08-25 09:16:01 +0900 |
| commit | 322eb2328a516f7d92e35850d730b022bd948c23 (patch) | |
| tree | 47d480eddf325a98af4e4a161c65290d3fd500d8 | |
| parent | 6681e22c71c55ae09d802dad17296a1ebe49bb13 (diff) | |
| download | mruby-322eb2328a516f7d92e35850d730b022bd948c23.tar.gz mruby-322eb2328a516f7d92e35850d730b022bd948c23.zip | |
Fix mrb_value size with MRB_WORD_BOXING on 32-bit mode
| -rw-r--r-- | include/mruby/boxing_word.h | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/include/mruby/boxing_word.h b/include/mruby/boxing_word.h index b17bfc973..2ff314144 100644 --- a/include/mruby/boxing_word.h +++ b/include/mruby/boxing_word.h @@ -45,6 +45,14 @@ enum mrb_special_consts { #define MRB_SYMBOL_FLAG 0x0e #define MRB_SPECIAL_SHIFT 8 +#if defined(MRB_64BIT) +#define MRB_SYMBOL_BITSIZE (sizeof(mrb_sym) * CHAR_BIT) +#define MRB_SYMBOL_MAX UINT32_MAX +#else +#define MRB_SYMBOL_BITSIZE (sizeof(mrb_sym) * CHAR_BIT - MRB_SPECIAL_SHIFT) +#define MRB_SYMBOL_MAX (UINT32_MAX >> MRB_SPECIAL_SHIFT) +#endif + typedef union mrb_value { union { void *p; @@ -54,7 +62,7 @@ typedef union mrb_value { }; struct { unsigned int sym_flag : MRB_SPECIAL_SHIFT; - mrb_sym sym : (sizeof(mrb_sym) * CHAR_BIT); + mrb_sym sym : MRB_SYMBOL_BITSIZE; }; struct RBasic *bp; #ifndef MRB_WITHOUT_FLOAT |
