summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2018-08-06 10:15:34 +0900
committerGitHub <[email protected]>2018-08-06 10:15:34 +0900
commit708d6a496448cf08ef6da7287b4f78c1397c5ca2 (patch)
tree8bd954e7f5d1ed24ebbebd3ddc4f5773163c2490
parent4713cd9eb76bdac24201b6ef85cc3c372c393aff (diff)
parentca01c8792d300b15c3ec2605c44e04f3785921f5 (diff)
downloadmruby-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.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