37 #if defined(MRB_INT16) && defined(MRB_INT64) 38 # error "You can't define MRB_INT16 and MRB_INT64 at the same time." 41 #if defined _MSC_VER && _MSC_VER < 1800 52 # include <inttypes.h> 55 #if defined(MRB_INT64) 56 typedef int64_t mrb_int;
57 # define MRB_INT_BIT 64 58 # define MRB_INT_MIN (INT64_MIN>>MRB_FIXNUM_SHIFT) 59 # define MRB_INT_MAX (INT64_MAX>>MRB_FIXNUM_SHIFT) 60 # define MRB_PRIo PRIo64 61 # define MRB_PRId PRId64 62 # define MRB_PRIx PRIx64 63 #elif defined(MRB_INT16) 64 typedef int16_t mrb_int;
65 # define MRB_INT_BIT 16 66 # define MRB_INT_MIN (INT16_MIN>>MRB_FIXNUM_SHIFT) 67 # define MRB_INT_MAX (INT16_MAX>>MRB_FIXNUM_SHIFT) 68 # define MRB_PRIo PRIo16 69 # define MRB_PRId PRId16 70 # define MRB_PRIx PRIx16 72 typedef int32_t mrb_int;
73 # define MRB_INT_BIT 32 74 # define MRB_INT_MIN (INT32_MIN>>MRB_FIXNUM_SHIFT) 75 # define MRB_INT_MAX (INT32_MAX>>MRB_FIXNUM_SHIFT) 76 # define MRB_PRIo PRIo32 77 # define MRB_PRId PRId32 78 # define MRB_PRIx PRIx32 82 #ifndef MRB_WITHOUT_FLOAT 83 MRB_API double mrb_float_read(
const char*,
char**);
85 typedef float mrb_float;
87 typedef double mrb_float;
91 #if defined _MSC_VER && _MSC_VER < 1900 93 MRB_API int mrb_msvc_vsnprintf(
char *s,
size_t n,
const char *format, va_list arg);
94 MRB_API int mrb_msvc_snprintf(
char *s,
size_t n,
const char *format, ...);
95 # define vsnprintf(s, n, format, arg) mrb_msvc_vsnprintf(s, n, format, arg) 96 # define snprintf(s, n, format, ...) mrb_msvc_snprintf(s, n, format, __VA_ARGS__) 97 # if _MSC_VER < 1800 && !defined MRB_WITHOUT_FLOAT 99 # define isfinite(n) _finite(n) 100 # define isnan _isnan 101 # define isinf(n) (!_finite(n) && !_isnan(n)) 102 # define signbit(n) (_copysign(1.0, (n)) < 0.0) 103 static const unsigned int IEEE754_INFINITY_BITS_SINGLE = 0x7F800000;
104 # define INFINITY (*(float *)&IEEE754_INFINITY_BITS_SINGLE) 105 # define NAN ((float)(INFINITY - INFINITY)) 140 #ifdef MRB_DOCUMENTATION_BLOCK 156 #if defined(MRB_NAN_BOXING) 158 #elif defined(MRB_WORD_BOXING) 165 #define mrb_fixnum_p(o) (mrb_type(o) == MRB_TT_FIXNUM) 168 #define mrb_undef_p(o) (mrb_type(o) == MRB_TT_UNDEF) 171 #define mrb_nil_p(o) (mrb_type(o) == MRB_TT_FALSE && !mrb_fixnum(o)) 174 #define mrb_false_p(o) (mrb_type(o) == MRB_TT_FALSE && !!mrb_fixnum(o)) 177 #define mrb_true_p(o) (mrb_type(o) == MRB_TT_TRUE) 180 #define mrb_bool(o) (mrb_type(o) != MRB_TT_FALSE) 182 #if !defined(MRB_SYMBOL_BITSIZE) 183 #define MRB_SYMBOL_BITSIZE (sizeof(mrb_sym) * CHAR_BIT) 184 #define MRB_SYMBOL_MAX UINT32_MAX 186 #ifndef MRB_WITHOUT_FLOAT 187 #define mrb_float_p(o) (mrb_type(o) == MRB_TT_FLOAT) 189 #define mrb_symbol_p(o) (mrb_type(o) == MRB_TT_SYMBOL) 190 #define mrb_array_p(o) (mrb_type(o) == MRB_TT_ARRAY) 191 #define mrb_string_p(o) (mrb_type(o) == MRB_TT_STRING) 192 #define mrb_hash_p(o) (mrb_type(o) == MRB_TT_HASH) 193 #define mrb_cptr_p(o) (mrb_type(o) == MRB_TT_CPTR) 194 #define mrb_exception_p(o) (mrb_type(o) == MRB_TT_EXCEPTION) 195 #define mrb_test(o) mrb_bool(o) 202 #ifndef MRB_WITHOUT_FLOAT 207 SET_FLOAT_VALUE(mrb, v, f);
213 mrb_cptr_value(
struct mrb_state *mrb,
void *p)
217 SET_CPTR_VALUE(mrb,v,p);
242 mrb_obj_value(
void *p)
245 SET_OBJ_VALUE(v, (
struct RBasic*)p);
246 mrb_assert(p == mrb_ptr(v));
247 mrb_assert(((
struct RBasic*)p)->tt == mrb_type(v));
288 SET_BOOL_VALUE(v,
boolean);
293 mrb_undef_value(
void)
300 #if defined(MRB_USE_CUSTOM_RO_DATA_P) 302 mrb_bool mrb_ro_data_p(
const char *p);
303 #elif defined(MRB_USE_ETEXT_EDATA) 304 #if (defined(__APPLE__) && defined(__MACH__)) 305 #include <mach-o/getsect.h> 307 mrb_ro_data_p(
const char *p)
309 return (
const char*)get_etext() < p && p < (
const char*)get_edata();
312 extern char _etext[];
313 #ifdef MRB_NO_INIT_ARRAY_START 314 extern char _edata[];
317 mrb_ro_data_p(
const char *p)
319 return _etext < p && p < _edata;
322 extern char __init_array_start[];
325 mrb_ro_data_p(
const char *p)
327 return _etext < p && p < (
char*)&__init_array_start;
332 # define mrb_ro_data_p(p) FALSE unboxed mrb_value definition
static mrb_value mrb_false_value(void)
Returns false in Ruby.
Definition: value.h:267
nan boxing mrb_value definition
#define MRB_BEGIN_DECL
Start declarations in C mode.
Definition: common.h:26
word boxing mrb_value definition
#define MRB_API
Declare a public MRuby API function.
Definition: common.h:73
#define MRB_END_DECL
End declarations in C mode.
Definition: common.h:28
static mrb_value mrb_true_value(void)
Returns true in Ruby.
Definition: value.h:277
mruby common platform definition"
static mrb_value mrb_float_value(struct mrb_state *mrb, mrb_float f)
Returns a float in Ruby.
Definition: value.h:203
static mrb_value mrb_fixnum_value(mrb_int i)
Returns a fixnum in Ruby.
Definition: value.h:226
static mrb_value mrb_nil_value(void)
Get a nil mrb_value object.
Definition: value.h:257
Definition: boxing_nan.h:39
#define MRB_INLINE
Declare a function as always inlined.
Definition: common.h:62