Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: mruby_mbed_web mirb_mbed
value.h
00001 /* 00002 ** mruby/value.h - mruby value definitions 00003 ** 00004 ** See Copyright Notice in mruby.h 00005 */ 00006 00007 #ifndef MRUBY_VALUE_H 00008 #define MRUBY_VALUE_H 00009 00010 typedef uint32_t mrb_sym; 00011 typedef uint8_t mrb_bool; 00012 struct mrb_state; 00013 00014 #if defined(MRB_INT16) && defined(MRB_INT64) 00015 # error "You can't define MRB_INT16 and MRB_INT64 at the same time." 00016 #endif 00017 00018 #if defined(MRB_INT64) 00019 typedef int64_t mrb_int; 00020 # define MRB_INT_BIT 64 00021 # define MRB_INT_MIN (INT64_MIN>>MRB_FIXNUM_SHIFT) 00022 # define MRB_INT_MAX (INT64_MAX>>MRB_FIXNUM_SHIFT) 00023 #elif defined(MRB_INT16) 00024 typedef int16_t mrb_int; 00025 # define MRB_INT_BIT 16 00026 # define MRB_INT_MIN (INT16_MIN>>MRB_FIXNUM_SHIFT) 00027 # define MRB_INT_MAX (INT16_MAX>>MRB_FIXNUM_SHIFT) 00028 #else 00029 typedef int32_t mrb_int; 00030 # define MRB_INT_BIT 32 00031 # define MRB_INT_MIN (INT32_MIN>>MRB_FIXNUM_SHIFT) 00032 # define MRB_INT_MAX (INT32_MAX>>MRB_FIXNUM_SHIFT) 00033 #endif 00034 00035 #ifdef MRB_USE_FLOAT 00036 typedef float mrb_float; 00037 # define mrb_float_to_str(buf, i) sprintf(buf, "%.7e", i) 00038 # define str_to_mrb_float(buf) strtof(buf, NULL) 00039 #else 00040 typedef double mrb_float; 00041 # define mrb_float_to_str(buf, i) sprintf(buf, "%.16e", i) 00042 # define str_to_mrb_float(buf) strtod(buf, NULL) 00043 #endif 00044 00045 #ifdef _MSC_VER 00046 # ifndef __cplusplus 00047 # define inline __inline 00048 # endif 00049 # if _MSC_VER < 1900 00050 # include <stdarg.h> 00051 MRB_API int mrb_msvc_vsnprintf(char *s, size_t n, const char *format, va_list arg); 00052 MRB_API int mrb_msvc_snprintf(char *s, size_t n, const char *format, ...); 00053 # define vsnprintf(s, n, format, arg) mrb_msvc_vsnprintf(s, n, format, arg) 00054 # define snprintf(s, n, format, ...) mrb_msvc_snprintf(s, n, format, __VA_ARGS__) 00055 # endif 00056 # if _MSC_VER < 1800 00057 # include <float.h> 00058 # define isfinite(n) _finite(n) 00059 # define isnan _isnan 00060 # define isinf(n) (!_finite(n) && !_isnan(n)) 00061 # define signbit(n) (_copysign(1.0, (n)) < 0.0) 00062 # define strtof (float)strtod 00063 static const unsigned int IEEE754_INFINITY_BITS_SINGLE = 0x7F800000; 00064 # define INFINITY (*(float *)&IEEE754_INFINITY_BITS_SINGLE) 00065 # define NAN ((float)(INFINITY - INFINITY)) 00066 # else 00067 # include <inttypes.h> 00068 # endif 00069 #else 00070 # include <inttypes.h> 00071 #endif 00072 00073 enum mrb_vtype { 00074 MRB_TT_FALSE = 0, /* 0 */ 00075 MRB_TT_FREE, /* 1 */ 00076 MRB_TT_TRUE, /* 2 */ 00077 MRB_TT_FIXNUM, /* 3 */ 00078 MRB_TT_SYMBOL, /* 4 */ 00079 MRB_TT_UNDEF, /* 5 */ 00080 MRB_TT_FLOAT, /* 6 */ 00081 MRB_TT_CPTR, /* 7 */ 00082 MRB_TT_OBJECT, /* 8 */ 00083 MRB_TT_CLASS, /* 9 */ 00084 MRB_TT_MODULE, /* 10 */ 00085 MRB_TT_ICLASS, /* 11 */ 00086 MRB_TT_SCLASS, /* 12 */ 00087 MRB_TT_PROC, /* 13 */ 00088 MRB_TT_ARRAY, /* 14 */ 00089 MRB_TT_HASH, /* 15 */ 00090 MRB_TT_STRING, /* 16 */ 00091 MRB_TT_RANGE, /* 17 */ 00092 MRB_TT_EXCEPTION, /* 18 */ 00093 MRB_TT_FILE, /* 19 */ 00094 MRB_TT_ENV, /* 20 */ 00095 MRB_TT_DATA, /* 21 */ 00096 MRB_TT_FIBER, /* 22 */ 00097 MRB_TT_MAXDEFINE /* 23 */ 00098 }; 00099 00100 #include "mruby/object.h" 00101 00102 #if defined(MRB_NAN_BOXING) 00103 #include "boxing_nan.h" 00104 #elif defined(MRB_WORD_BOXING) 00105 #include "boxing_word.h" 00106 #else 00107 #include "boxing_no.h" 00108 #endif 00109 00110 #ifndef mrb_fixnum_p 00111 #define mrb_fixnum_p(o) (mrb_type(o) == MRB_TT_FIXNUM) 00112 #endif 00113 #ifndef mrb_undef_p 00114 #define mrb_undef_p(o) (mrb_type(o) == MRB_TT_UNDEF) 00115 #endif 00116 #ifndef mrb_nil_p 00117 #define mrb_nil_p(o) (mrb_type(o) == MRB_TT_FALSE && !mrb_fixnum(o)) 00118 #endif 00119 #ifndef mrb_bool 00120 #define mrb_bool(o) (mrb_type(o) != MRB_TT_FALSE) 00121 #endif 00122 #define mrb_float_p(o) (mrb_type(o) == MRB_TT_FLOAT) 00123 #define mrb_symbol_p(o) (mrb_type(o) == MRB_TT_SYMBOL) 00124 #define mrb_array_p(o) (mrb_type(o) == MRB_TT_ARRAY) 00125 #define mrb_string_p(o) (mrb_type(o) == MRB_TT_STRING) 00126 #define mrb_hash_p(o) (mrb_type(o) == MRB_TT_HASH) 00127 #define mrb_cptr_p(o) (mrb_type(o) == MRB_TT_CPTR) 00128 #define mrb_exception_p(o) (mrb_type(o) == MRB_TT_EXCEPTION) 00129 #define mrb_test(o) mrb_bool(o) 00130 MRB_API mrb_bool mrb_regexp_p(struct mrb_state*, mrb_value); 00131 00132 static inline mrb_value 00133 mrb_float_value(struct mrb_state *mrb, mrb_float f) 00134 { 00135 mrb_value v; 00136 (void) mrb; 00137 SET_FLOAT_VALUE(mrb, v, f); 00138 return v; 00139 } 00140 00141 static inline mrb_value 00142 mrb_cptr_value(struct mrb_state *mrb, void *p) 00143 { 00144 mrb_value v; 00145 (void) mrb; 00146 SET_CPTR_VALUE(mrb,v,p); 00147 return v; 00148 } 00149 00150 static inline mrb_value 00151 mrb_fixnum_value(mrb_int i) 00152 { 00153 mrb_value v; 00154 SET_INT_VALUE(v, i); 00155 return v; 00156 } 00157 00158 static inline mrb_value 00159 mrb_symbol_value(mrb_sym i) 00160 { 00161 mrb_value v; 00162 SET_SYM_VALUE(v, i); 00163 return v; 00164 } 00165 00166 static inline mrb_value 00167 mrb_obj_value(void *p) 00168 { 00169 mrb_value v; 00170 SET_OBJ_VALUE(v, (struct RBasic*)p); 00171 return v; 00172 } 00173 00174 static inline mrb_value 00175 mrb_nil_value(void) 00176 { 00177 mrb_value v; 00178 SET_NIL_VALUE(v); 00179 return v; 00180 } 00181 00182 static inline mrb_value 00183 mrb_false_value(void) 00184 { 00185 mrb_value v; 00186 SET_FALSE_VALUE(v); 00187 return v; 00188 } 00189 00190 static inline mrb_value 00191 mrb_true_value(void) 00192 { 00193 mrb_value v; 00194 SET_TRUE_VALUE(v); 00195 return v; 00196 } 00197 00198 static inline mrb_value 00199 mrb_bool_value(mrb_bool boolean) 00200 { 00201 mrb_value v; 00202 SET_BOOL_VALUE(v, boolean); 00203 return v; 00204 } 00205 00206 static inline mrb_value 00207 mrb_undef_value(void) 00208 { 00209 mrb_value v; 00210 SET_UNDEF_VALUE(v); 00211 return v; 00212 } 00213 00214 #ifdef MRB_USE_ETEXT_EDATA 00215 extern char _etext[]; 00216 #ifdef MRB_NO_INIT_ARRAY_START 00217 extern char _edata[]; 00218 00219 static inline mrb_bool 00220 mrb_ro_data_p(const char *p) 00221 { 00222 return _etext < p && p < _edata; 00223 } 00224 #else 00225 extern char __init_array_start[]; 00226 00227 static inline mrb_bool 00228 mrb_ro_data_p(const char *p) 00229 { 00230 return _etext < p && p < (char*)&__init_array_start; 00231 } 00232 #endif 00233 #else 00234 # define mrb_ro_data_p(p) FALSE 00235 #endif 00236 00237 #endif /* MRUBY_VALUE_H */ 00238
Generated on Tue Jul 12 2022 18:00:35 by
1.7.2