mruby 3.3.0
mruby is the lightweight implementation of the Ruby language
Loading...
Searching...
No Matches
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)
 
#define mrb_nb_tt(o)
 
#define NANBOX_SET_MISC_VALUE(r, t, i)
 
#define mrb_float(o)
 
#define mrb_fixnum(o)
 
#define mrb_integer(o)
 
#define mrb_symbol(o)
 
#define mrb_ptr(o)
 
#define mrb_cptr(o)
 
#define NANBOX_SET_VALUE(o, tt, v)
 
#define SET_NIL_VALUE(r)
 
#define SET_FALSE_VALUE(r)
 
#define SET_TRUE_VALUE(r)
 
#define SET_BOOL_VALUE(r, b)
 
#define SET_INT_VALUE(mrb, r, n)
 
#define SET_FIXNUM_VALUE(r, n)
 
#define SET_SYM_VALUE(r, v)
 
#define SET_OBJ_VALUE(r, v)
 
#define SET_CPTR_VALUE(mrb, r, v)
 
#define SET_UNDEF_VALUE(r)
 
#define mrb_immediate_p(o)
 
#define mrb_nil_p(o)
 
#define mrb_false_p(o)
 
#define mrb_fixnum_p(o)
 

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

◆ mrb_cptr

#define mrb_cptr ( o)
Value:
((void*)(uintptr_t)(0xffffffffffffULL&(o).u))

◆ mrb_false_p

#define mrb_false_p ( o)
Value:
(mrb_type(o) == MRB_TT_FALSE || (o).u == 0)

◆ mrb_fixnum

#define mrb_fixnum ( o)
Value:
((mrb_int)(((uintptr_t)0xffffffff)&((o).u)))

◆ mrb_fixnum_p

#define mrb_fixnum_p ( o)
Value:
(!mrb_float_p(o) && mrb_nb_tt(o)==MRB_NANBOX_TT_INTEGER)

◆ mrb_float

#define mrb_float ( o)
Value:
mrb_nan_boxing_value_float(o)

◆ mrb_float_p

#define mrb_float_p ( o)
Value:
(((uint64_t)((o).u)&0xfffc000000000000) != 0)

◆ mrb_immediate_p

#define mrb_immediate_p ( o)
Value:
((mrb_float_p(o) || mrb_nb_tt(o) != MRB_NANBOX_TT_OBJECT) || (o).u == 0)

◆ mrb_integer

#define mrb_integer ( o)
Value:
mrb_fixnum(o)

◆ mrb_nb_tt

#define mrb_nb_tt ( o)
Value:
((enum mrb_nanbox_tt_inline)((uint32_t)((o).u>>48)&3))

◆ mrb_nil_p

#define mrb_nil_p ( o)
Value:
((o).u == 0)

◆ mrb_ptr

#define mrb_ptr ( o)
Value:
((void*)(uintptr_t)(o).u)

◆ mrb_symbol

#define mrb_symbol ( o)
Value:
((mrb_sym)((uintptr_t)0xffffffff)&((o).u))
mruby Symbol.

◆ NANBOX_SET_MISC_VALUE

#define NANBOX_SET_MISC_VALUE ( r,
t,
i )
Value:
NANBOX_SET_VALUE(r, MRB_NANBOX_TT_MISC, ((uint64_t)(t)<<32) | (i))

◆ NANBOX_SET_VALUE

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

◆ SET_BOOL_VALUE

#define SET_BOOL_VALUE ( r,
b )
Value:
NANBOX_SET_MISC_VALUE(r, (b) ? MRB_TT_TRUE : MRB_TT_FALSE, 1)

◆ SET_CPTR_VALUE

#define SET_CPTR_VALUE ( mrb,
r,
v )
Value:
NANBOX_SET_VALUE(r, MRB_NANBOX_TT_CPTR, (uint64_t)(uintptr_t)(v) & 0x0000ffffffffffffULL)

◆ SET_FALSE_VALUE

#define SET_FALSE_VALUE ( r)
Value:
NANBOX_SET_MISC_VALUE(r, MRB_TT_FALSE, 1)

◆ SET_FIXNUM_VALUE

#define SET_FIXNUM_VALUE ( r,
n )
Value:
NANBOX_SET_VALUE(r, MRB_NANBOX_TT_INTEGER, (uint32_t)(n))

◆ SET_FLOAT_VALUE

#define SET_FLOAT_VALUE ( mrb,
r,
f )
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)

◆ SET_INT_VALUE

#define SET_INT_VALUE ( mrb,
r,
n )
Value:
SET_FIXNUM_VALUE(r, n)

◆ SET_NIL_VALUE

#define SET_NIL_VALUE ( r)
Value:
((r).u = 0)

◆ SET_OBJ_VALUE

#define SET_OBJ_VALUE ( r,
v )
Value:
do {(r).u = (uint64_t)(uintptr_t)(v);} while (0)

◆ SET_SYM_VALUE

#define SET_SYM_VALUE ( r,
v )
Value:
NANBOX_SET_MISC_VALUE(r, MRB_TT_SYMBOL, (uint32_t)(v))

◆ SET_TRUE_VALUE

#define SET_TRUE_VALUE ( r)
Value:
NANBOX_SET_MISC_VALUE(r, MRB_TT_TRUE, 1)

◆ SET_UNDEF_VALUE

#define SET_UNDEF_VALUE ( r)
Value:
NANBOX_SET_MISC_VALUE(r, MRB_TT_UNDEF, 4)