mruby 3.3.0
mruby is the lightweight implementation of the Ruby language
Loading...
Searching...
No Matches
Classes | Macros | Typedefs | Enumerations | Functions
boxing_nan.h File Reference

More...

Go to the source code of this file.

Classes

struct  mrb_value
 
struct  RInteger
 

Macros

#define MRB_FIXNUM_MIN   INT32_MIN
 
#define MRB_FIXNUM_MAX   INT32_MAX
 
#define SET_FLOAT_VALUE(mrb, r, f)
 
#define mrb_float_p(o)   (((uint64_t)((o).u)&0xfffc000000000000) != 0)
 
#define mrb_nb_tt(o)   ((enum mrb_nanbox_tt_inline)((uint32_t)((o).u>>48)&3))
 
#define NANBOX_SET_MISC_VALUE(r, t, i)   NANBOX_SET_VALUE(r, MRB_NANBOX_TT_MISC, ((uint64_t)(t)<<32) | (i))
 
#define mrb_float(o)   mrb_nan_boxing_value_float(o)
 
#define mrb_fixnum(o)   ((mrb_int)(((uintptr_t)0xffffffff)&((o).u)))
 
#define mrb_integer(o)   mrb_fixnum(o)
 
#define mrb_symbol(o)   ((mrb_sym)((uintptr_t)0xffffffff)&((o).u))
 
#define mrb_ptr(o)   ((void*)(uintptr_t)(o).u)
 
#define mrb_cptr(o)   ((void*)(uintptr_t)(0xffffffffffffULL&(o).u))
 
#define NANBOX_SET_VALUE(o, tt, v)
 
#define SET_NIL_VALUE(r)   ((r).u = 0)
 
#define SET_FALSE_VALUE(r)   NANBOX_SET_MISC_VALUE(r, MRB_TT_FALSE, 1)
 
#define SET_TRUE_VALUE(r)   NANBOX_SET_MISC_VALUE(r, MRB_TT_TRUE, 1)
 
#define SET_BOOL_VALUE(r, b)   NANBOX_SET_MISC_VALUE(r, (b) ? MRB_TT_TRUE : MRB_TT_FALSE, 1)
 
#define SET_INT_VALUE(mrb, r, n)   SET_FIXNUM_VALUE(r, n)
 
#define SET_FIXNUM_VALUE(r, n)   NANBOX_SET_VALUE(r, MRB_NANBOX_TT_INTEGER, (uint32_t)(n))
 
#define SET_SYM_VALUE(r, v)   NANBOX_SET_MISC_VALUE(r, MRB_TT_SYMBOL, (uint32_t)(v))
 
#define SET_OBJ_VALUE(r, v)   do {(r).u = (uint64_t)(uintptr_t)(v);} while (0)
 
#define SET_CPTR_VALUE(mrb, r, v)   NANBOX_SET_VALUE(r, MRB_NANBOX_TT_CPTR, (uint64_t)(uintptr_t)(v) & 0x0000ffffffffffffULL)
 
#define SET_UNDEF_VALUE(r)   NANBOX_SET_MISC_VALUE(r, MRB_TT_UNDEF, 4)
 
#define mrb_immediate_p(o)   ((mrb_float_p(o) || mrb_nb_tt(o) != MRB_NANBOX_TT_OBJECT) || (o).u == 0)
 
#define mrb_nil_p(o)   ((o).u == 0)
 
#define mrb_false_p(o)   (mrb_type(o) == MRB_TT_FALSE || (o).u == 0)
 
#define mrb_fixnum_p(o)   (!mrb_float_p(o) && mrb_nb_tt(o)==MRB_NANBOX_TT_INTEGER)
 

Typedefs

typedef struct mrb_value mrb_value
 

Enumerations

enum  mrb_nanbox_tt_inline { MRB_NANBOX_TT_OBJECT = 0 , MRB_NANBOX_TT_INTEGER = 1 , MRB_NANBOX_TT_MISC = 2 , MRB_NANBOX_TT_CPTR = 3 }
 

Functions

static mrb_float mrb_nan_boxing_value_float (mrb_value v)
 
MRB_INLINE enum mrb_vtype mrb_type (mrb_value o)
 

Detailed Description

See Copyright Notice in mruby.h

Macro Definition Documentation

◆ NANBOX_SET_VALUE

#define NANBOX_SET_VALUE (   o,
  tt,
 
)
Value:
do { \
(o).u = ((uint64_t)(tt)<<48) | ((uint64_t)(v)); \
} while (0)

◆ SET_FLOAT_VALUE

#define SET_FLOAT_VALUE (   mrb,
  r,
 
)
Value:
do { \
union { \
mrb_float f; \
uint64_t u; \
} float_uint_union; \
if ((f) != (f)) { /* NaN */ \
float_uint_union.u = 0x7ff8000000000000UL; \
} \
else { \
float_uint_union.f = (f); \
} \
r.u = float_uint_union.u + 0x8004000000000000; \
} while(0)