diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2018-08-06 10:15:34 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2018-08-06 10:15:34 +0900 |
| commit | 708d6a496448cf08ef6da7287b4f78c1397c5ca2 (patch) | |
| tree | 8bd954e7f5d1ed24ebbebd3ddc4f5773163c2490 | |
| parent | 4713cd9eb76bdac24201b6ef85cc3c372c393aff (diff) | |
| parent | ca01c8792d300b15c3ec2605c44e04f3785921f5 (diff) | |
| download | mruby-708d6a496448cf08ef6da7287b4f78c1397c5ca2.tar.gz mruby-708d6a496448cf08ef6da7287b4f78c1397c5ca2.zip | |
Merge pull request #4077 from dearblue/fix-wordboxing-symbol
Fix to sizeof(mrb_value) is 4 bytes 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 |
