summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authordearblue <[email protected]>2018-08-05 20:33:44 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2018-08-25 09:16:01 +0900
commit322eb2328a516f7d92e35850d730b022bd948c23 (patch)
tree47d480eddf325a98af4e4a161c65290d3fd500d8
parent6681e22c71c55ae09d802dad17296a1ebe49bb13 (diff)
downloadmruby-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.h10
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