summaryrefslogtreecommitdiffhomepage
path: root/include
diff options
context:
space:
mode:
authordearblue <[email protected]>2018-08-05 20:33:44 +0900
committerdearblue <[email protected]>2018-08-05 20:33:44 +0900
commitca01c8792d300b15c3ec2605c44e04f3785921f5 (patch)
tree8bd954e7f5d1ed24ebbebd3ddc4f5773163c2490 /include
parent4713cd9eb76bdac24201b6ef85cc3c372c393aff (diff)
downloadmruby-ca01c8792d300b15c3ec2605c44e04f3785921f5.tar.gz
mruby-ca01c8792d300b15c3ec2605c44e04f3785921f5.zip
Fix mrb_value size with MRB_WORD_BOXING on 32-bit mode
Diffstat (limited to 'include')
-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