- Timestamp:
- Jan 21, 2018, 12:10:09 AM (6 years ago)
- Location:
- EcnlProtoTool/trunk/mruby-1.3.0
- Files:
-
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/mruby-1.3.0/include/mruby/boxing_nan.h
r321 r331 54 54 55 55 #define mrb_tt(o) ((enum mrb_vtype)(((o).value.ttt & 0xfc000)>>14)-1) 56 #define mrb_type(o) ( (uint32_t)0xfff00000 < (o).value.ttt ? mrb_tt(o) : MRB_TT_FLOAT)56 #define mrb_type(o) (enum mrb_vtype)((uint32_t)0xfff00000 < (o).value.ttt ? mrb_tt(o) : MRB_TT_FLOAT) 57 57 #define mrb_ptr(o) ((void*)((((uintptr_t)0x3fffffffffff)&((uintptr_t)((o).value.p)))<<2)) 58 58 #define mrb_float(o) (o).f … … 61 61 #define mrb_symbol(o) (o).value.sym 62 62 63 #ifdef MRB_64BIT 64 #define BOXNAN_SHIFT_LONG_POINTER(v) (((uintptr_t)(v)>>34)&0x3fff) 65 #else 66 #define BOXNAN_SHIFT_LONG_POINTER(v) 0 67 #endif 68 63 69 #define BOXNAN_SET_VALUE(o, tt, attr, v) do {\ 64 switch (tt) {\ 65 case MRB_TT_FALSE:\ 66 case MRB_TT_TRUE:\ 67 case MRB_TT_UNDEF:\ 68 case MRB_TT_FIXNUM:\ 69 case MRB_TT_SYMBOL: (o).attr = (v); break;\ 70 default: (o).value.i = 0; (o).value.p = (void*)((uintptr_t)(o).value.p | (((uintptr_t)(v))>>2)); break;\ 71 }\ 72 (o).value.ttt = (0xfff00000|(((tt)+1)<<14));\ 70 (o).attr = (v);\ 71 (o).value.ttt = 0xfff00000 | (((tt)+1)<<14);\ 72 } while (0) 73 74 #define BOXNAN_SET_OBJ_VALUE(o, tt, v) do {\ 75 (o).value.p = (void*)((uintptr_t)(v)>>2);\ 76 (o).value.ttt = (0xfff00000|(((tt)+1)<<14)|BOXNAN_SHIFT_LONG_POINTER(v));\ 73 77 } while (0) 74 78 … … 77 81 (r).value.ttt = 0x7ff80000; \ 78 82 (r).value.i = 0; \ 79 } else { \ 83 } \ 84 else { \ 80 85 (r).f = v; \ 81 86 }} while(0) … … 87 92 #define SET_INT_VALUE(r,n) BOXNAN_SET_VALUE(r, MRB_TT_FIXNUM, value.i, (n)) 88 93 #define SET_SYM_VALUE(r,v) BOXNAN_SET_VALUE(r, MRB_TT_SYMBOL, value.sym, (v)) 89 #define SET_OBJ_VALUE(r,v) BOXNAN_SET_ VALUE(r, (((struct RObject*)(v))->tt), value.p, (v))90 #define SET_CPTR_VALUE(mrb,r,v) BOXNAN_SET_ VALUE(r, MRB_TT_CPTR, value.p, v)94 #define SET_OBJ_VALUE(r,v) BOXNAN_SET_OBJ_VALUE(r, (((struct RObject*)(v))->tt), (v)) 95 #define SET_CPTR_VALUE(mrb,r,v) BOXNAN_SET_OBJ_VALUE(r, MRB_TT_CPTR, v) 91 96 #define SET_UNDEF_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_UNDEF, value.i, 0) 92 97
Note:
See TracChangeset
for help on using the changeset viewer.