mruby  2.0.1
mruby is the lightweight implementation of the Ruby language
Classes | Macros | Typedefs
boxing_nan.h File Reference

More...

Go to the source code of this file.

Classes

union  mrb_value
 

Macros

#define MRB_FIXNUM_SHIFT   0
 
#define MRB_TT_HAS_BASIC   MRB_TT_OBJECT
 
#define MRB_ENDIAN_LOHI(a, b)   b a
 
#define mrb_float_pool(mrb, f)   mrb_float_value(mrb,f)
 
#define mrb_tt(o)   ((enum mrb_vtype)(((o).value.ttt & 0xfc000)>>14)-1)
 
#define mrb_type(o)   (enum mrb_vtype)((uint32_t)0xfff00000 < (o).value.ttt ? mrb_tt(o) : MRB_TT_FLOAT)
 
#define mrb_ptr(o)   ((void*)((((uintptr_t)0x3fffffffffff)&((uintptr_t)((o).value.p)))<<2))
 
#define mrb_float(o)   (o).f
 
#define mrb_cptr(o)   mrb_ptr(o)
 
#define mrb_fixnum(o)   (o).value.i
 
#define mrb_symbol(o)   (o).value.sym
 
#define BOXNAN_SHIFT_LONG_POINTER(v)   0
 
#define BOXNAN_SET_VALUE(o, tt, attr, v)
 
#define BOXNAN_SET_OBJ_VALUE(o, tt, v)
 
#define SET_FLOAT_VALUE(mrb, r, v)
 
#define SET_NIL_VALUE(r)   BOXNAN_SET_VALUE(r, MRB_TT_FALSE, value.i, 0)
 
#define SET_FALSE_VALUE(r)   BOXNAN_SET_VALUE(r, MRB_TT_FALSE, value.i, 1)
 
#define SET_TRUE_VALUE(r)   BOXNAN_SET_VALUE(r, MRB_TT_TRUE, value.i, 1)
 
#define SET_BOOL_VALUE(r, b)   BOXNAN_SET_VALUE(r, b ? MRB_TT_TRUE : MRB_TT_FALSE, value.i, 1)
 
#define SET_INT_VALUE(r, n)   BOXNAN_SET_VALUE(r, MRB_TT_FIXNUM, value.i, (n))
 
#define SET_SYM_VALUE(r, v)   BOXNAN_SET_VALUE(r, MRB_TT_SYMBOL, value.sym, (v))
 
#define SET_OBJ_VALUE(r, v)   BOXNAN_SET_OBJ_VALUE(r, (((struct RObject*)(v))->tt), (v))
 
#define SET_CPTR_VALUE(mrb, r, v)   BOXNAN_SET_OBJ_VALUE(r, MRB_TT_CPTR, v)
 
#define SET_UNDEF_VALUE(r)   BOXNAN_SET_VALUE(r, MRB_TT_UNDEF, value.i, 0)
 

Typedefs

typedef struct mrb_value mrb_value
 

Detailed Description

See Copyright Notice in mruby.h

Macro Definition Documentation

◆ BOXNAN_SET_OBJ_VALUE

#define BOXNAN_SET_OBJ_VALUE (   o,
  tt,
 
)
Value:
do {\
(o).value.p = (void*)((uintptr_t)(v)>>2);\
(o).value.ttt = (0xfff00000|(((tt)+1)<<14)|BOXNAN_SHIFT_LONG_POINTER(v));\
} while (0)

◆ BOXNAN_SET_VALUE

#define BOXNAN_SET_VALUE (   o,
  tt,
  attr,
 
)
Value:
do {\
(o).attr = (v);\
(o).value.ttt = 0xfff00000 | (((tt)+1)<<14);\
} while (0)

◆ SET_FLOAT_VALUE

#define SET_FLOAT_VALUE (   mrb,
  r,
 
)
Value:
do { \
if ((v) != (v)) { \
(r).value.ttt = 0x7ff80000; \
(r).value.i = 0; \
} \
else { \
(r).f = v; \
}} while(0)