From 763b39d00b69b2235c87eac5ef779dbc58d409e7 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Sat, 8 Aug 2020 17:18:06 +0900 Subject: Simplify `NaN` boxing definitions. Remove `#ifdef` from `union mrb_value_`. --- include/mruby/boxing_nan.h | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) (limited to 'include') diff --git a/include/mruby/boxing_nan.h b/include/mruby/boxing_nan.h index b8820ab82..a8655ca19 100644 --- a/include/mruby/boxing_nan.h +++ b/include/mruby/boxing_nan.h @@ -41,13 +41,7 @@ union mrb_value_ { struct { MRB_ENDIAN_LOHI( uint32_t ttt; - ,union { - mrb_int i; - mrb_sym sym; -#ifdef MRB_32BIT - void *p; -#endif - }; + ,uint32_t i; ) }; }; @@ -63,15 +57,15 @@ mrb_val_union(mrb_value v) #define mrb_tt(o) ((enum mrb_vtype)((mrb_val_union(o).ttt & 0xfc000)>>14)-1) #define mrb_type(o) (enum mrb_vtype)((uint32_t)0xfff00000 < mrb_val_union(o).ttt ? mrb_tt(o) : MRB_TT_FLOAT) #define mrb_float(o) mrb_val_union(o).f -#define mrb_fixnum(o) mrb_val_union(o).i -#define mrb_symbol(o) mrb_val_union(o).sym +#define mrb_fixnum(o) ((mrb_int)mrb_val_union(o).i) +#define mrb_symbol(o) ((mrb_sym)mrb_val_union(o).i) #ifdef MRB_64BIT #define mrb_ptr(o) ((void*)((((uintptr_t)0x3fffffffffff)&((uintptr_t)(mrb_val_union(o).p)))<<2)) #define mrb_cptr(o) (((struct RCptr*)mrb_ptr(o))->p) #define BOXNAN_SHIFT_LONG_POINTER(v) (((uintptr_t)(v)>>34)&0x3fff) #else -#define mrb_ptr(o) (mrb_val_union(o).p) +#define mrb_ptr(o) ((void*)mrb_val_union(o).i) #define mrb_cptr(o) mrb_ptr(o) #define BOXNAN_SHIFT_LONG_POINTER(v) 0 #endif @@ -91,7 +85,7 @@ mrb_val_union(mrb_value v) o = mrb_value_union_variable.u;\ } while (0) #else -#define BOXNAN_SET_OBJ_VALUE(o, tt, v) BOXNAN_SET_VALUE(o, tt, p, v) +#define BOXNAN_SET_OBJ_VALUE(o, tt, v) BOXNAN_SET_VALUE(o, tt, i, (uint32_t)v) #endif #define SET_FLOAT_VALUE(mrb,r,v) do { \ @@ -110,8 +104,8 @@ mrb_val_union(mrb_value v) #define SET_FALSE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_FALSE, i, 1) #define SET_TRUE_VALUE(r) BOXNAN_SET_VALUE(r, MRB_TT_TRUE, i, 1) #define SET_BOOL_VALUE(r,b) BOXNAN_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, i, 1) -#define SET_INT_VALUE(r,n) BOXNAN_SET_VALUE(r, MRB_TT_FIXNUM, i, (n)) -#define SET_SYM_VALUE(r,v) BOXNAN_SET_VALUE(r, MRB_TT_SYMBOL, sym, (v)) +#define SET_INT_VALUE(r,n) BOXNAN_SET_VALUE(r, MRB_TT_FIXNUM, i, (uint32_t)(n)) +#define SET_SYM_VALUE(r,v) BOXNAN_SET_VALUE(r, MRB_TT_SYMBOL, i, (uint32_t)(v)) #define SET_OBJ_VALUE(r,v) BOXNAN_SET_OBJ_VALUE(r, (((struct RObject*)(v))->tt), (v)) #ifdef MRB_64BIT MRB_API mrb_value mrb_nan_boxing_cptr_value(struct mrb_state*, void*); -- cgit v1.2.3