7 #ifndef MRUBY_BOXING_NAN_H 8 #define MRUBY_BOXING_NAN_H 11 # error ---->> MRB_NAN_BOXING and MRB_USE_FLOAT conflict <<---- 14 #ifdef MRB_WITHOUT_FLOAT 15 # error ---->> MRB_NAN_BOXING and MRB_WITHOUT_FLOAT conflict <<---- 19 # error ---->> MRB_NAN_BOXING and MRB_INT64 conflict <<---- 22 #define MRB_FIXNUM_SHIFT 0 23 #define MRB_TT_HAS_BASIC MRB_TT_OBJECT 26 #define MRB_ENDIAN_LOHI(a,b) a b 28 #define MRB_ENDIAN_LOHI(a,b) b a 57 #define mrb_float_pool(mrb,f) mrb_float_value(mrb,f) 59 #define mrb_tt(o) ((enum mrb_vtype)(((o).value.ttt & 0xfc000)>>14)-1) 60 #define mrb_type(o) (enum mrb_vtype)((uint32_t)0xfff00000 < (o).value.ttt ? mrb_tt(o) : MRB_TT_FLOAT) 61 #define mrb_ptr(o) ((void*)((((uintptr_t)0x3fffffffffff)&((uintptr_t)((o).value.p)))<<2)) 62 #define mrb_float(o) (o).f 63 #define mrb_cptr(o) mrb_ptr(o) 64 #define mrb_fixnum(o) (o).value.i 65 #define mrb_symbol(o) (o).value.sym 68 #define BOXNAN_SHIFT_LONG_POINTER(v) (((uintptr_t)(v)>>34)&0x3fff) 70 #define BOXNAN_SHIFT_LONG_POINTER(v) 0 73 #define BOXNAN_SET_VALUE(o, tt, attr, v) do {\ 75 (o).value.ttt = 0xfff00000 | (((tt)+1)<<14);\ 78 #define BOXNAN_SET_OBJ_VALUE(o, tt, v) do {\ 79 (o).value.p = (void*)((uintptr_t)(v)>>2);\ 80 (o).value.ttt = (0xfff00000|(((tt)+1)<<14)|BOXNAN_SHIFT_LONG_POINTER(v));\ 83 #define SET_FLOAT_VALUE(mrb,r,v) do { \ 85 (r).value.ttt = 0x7ff80000; \ 92 #define SET_NIL_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_FALSE, value.i, 0) 93 #define SET_FALSE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_FALSE, value.i, 1) 94 #define SET_TRUE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_TRUE, value.i, 1) 95 #define SET_BOOL_VALUE(r,b) BOXNAN_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, value.i, 1) 96 #define SET_INT_VALUE(r,n) BOXNAN_SET_VALUE(r, MRB_TT_FIXNUM, value.i, (n)) 97 #define SET_SYM_VALUE(r,v) BOXNAN_SET_VALUE(r, MRB_TT_SYMBOL, value.sym, (v)) 98 #define SET_OBJ_VALUE(r,v) BOXNAN_SET_OBJ_VALUE(r, (((struct RObject*)(v))->tt), (v)) 99 #define SET_CPTR_VALUE(mrb,r,v) BOXNAN_SET_OBJ_VALUE(r, MRB_TT_CPTR, v) 100 #define SET_UNDEF_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_UNDEF, value.i, 0)
Definition: boxing_nan.h:39