7 #ifndef MRUBY_BOXING_WORD_H 8 #define MRUBY_BOXING_WORD_H 10 #if defined(MRB_INT16) 11 # error MRB_INT16 is too small for MRB_WORD_BOXING. 14 #if defined(MRB_INT64) && !defined(MRB_64BIT) 15 #error MRB_INT64 cannot be used with MRB_WORD_BOXING in 32-bit mode. 18 #ifndef MRB_WITHOUT_FLOAT 30 #define MRB_FIXNUM_SHIFT 1 31 #ifdef MRB_WITHOUT_FLOAT 32 #define MRB_TT_HAS_BASIC MRB_TT_CPTR 34 #define MRB_TT_HAS_BASIC MRB_TT_FLOAT 37 enum mrb_special_consts {
44 #define MRB_FIXNUM_FLAG 0x01 45 #define MRB_SYMBOL_FLAG 0x0e 46 #define MRB_SPECIAL_SHIFT 8 48 #if defined(MRB_64BIT) 49 #define MRB_SYMBOL_BITSIZE (sizeof(mrb_sym) * CHAR_BIT) 50 #define MRB_SYMBOL_MAX UINT32_MAX 52 #define MRB_SYMBOL_BITSIZE (sizeof(mrb_sym) * CHAR_BIT - MRB_SPECIAL_SHIFT) 53 #define MRB_SYMBOL_MAX (UINT32_MAX >> MRB_SPECIAL_SHIFT) 60 unsigned int i_flag : MRB_FIXNUM_SHIFT;
61 mrb_int i : (MRB_INT_BIT - MRB_FIXNUM_SHIFT);
64 unsigned int sym_flag : MRB_SPECIAL_SHIFT;
65 mrb_sym sym : MRB_SYMBOL_BITSIZE;
68 #ifndef MRB_WITHOUT_FLOAT 77 #ifndef MRB_WITHOUT_FLOAT 82 #ifndef MRB_WITHOUT_FLOAT 83 #define mrb_float_pool(mrb,f) mrb_word_boxing_float_pool(mrb,f) 86 #define mrb_ptr(o) (o).value.p 87 #define mrb_cptr(o) (o).value.vp->p 88 #ifndef MRB_WITHOUT_FLOAT 89 #define mrb_float(o) (o).value.fp->f 91 #define mrb_fixnum(o) ((mrb_int)(o).value.i) 92 #define mrb_symbol(o) (o).value.sym 106 if (o.value.i_flag == MRB_FIXNUM_FLAG) {
107 return MRB_TT_FIXNUM;
109 if (o.value.sym_flag == MRB_SYMBOL_FLAG) {
110 return MRB_TT_SYMBOL;
112 return o.value.bp->tt;
115 #define mrb_bool(o) ((o).w != MRB_Qnil && (o).w != MRB_Qfalse) 116 #define mrb_fixnum_p(o) ((o).value.i_flag == MRB_FIXNUM_FLAG) 117 #define mrb_undef_p(o) ((o).w == MRB_Qundef) 118 #define mrb_nil_p(o) ((o).w == MRB_Qnil) 119 #define mrb_false_p(o) ((o).w == MRB_Qfalse) 120 #define mrb_true_p(o) ((o).w == MRB_Qtrue) 122 #ifndef MRB_WITHOUT_FLOAT 123 #define SET_FLOAT_VALUE(mrb,r,v) ((r) = mrb_word_boxing_float_value(mrb, v)) 125 #define SET_CPTR_VALUE(mrb,r,v) ((r) = mrb_word_boxing_cptr_value(mrb, v)) 126 #define SET_UNDEF_VALUE(r) ((r).w = MRB_Qundef) 127 #define SET_NIL_VALUE(r) ((r).w = MRB_Qnil) 128 #define SET_FALSE_VALUE(r) ((r).w = MRB_Qfalse) 129 #define SET_TRUE_VALUE(r) ((r).w = MRB_Qtrue) 130 #define SET_BOOL_VALUE(r,b) ((b) ? SET_TRUE_VALUE(r) : SET_FALSE_VALUE(r)) 131 #define SET_INT_VALUE(r,n) do { \ 133 (r).value.i_flag = MRB_FIXNUM_FLAG; \ 136 #define SET_SYM_VALUE(r,v) do { \ 138 (r).value.sym_flag = MRB_SYMBOL_FLAG; \ 139 (r).value.sym = (v); \ 141 #define SET_OBJ_VALUE(r,v) do { \
Definition: boxing_word.h:19
Definition: boxing_word.h:25
#define MRB_API
Declare a public MRuby API function.
Definition: common.h:73
Definition: boxing_nan.h:39
#define MRB_INLINE
Declare a function as always inlined.
Definition: common.h:62