Changeset 439 for EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/value.h
- Timestamp:
- Jul 9, 2020, 8:51:43 AM (4 years ago)
- Location:
- EcnlProtoTool/trunk/mruby-2.1.1
- Files:
-
- 1 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/mruby-2.1.1/include/mruby/value.h
r331 r439 1 /* 2 ** mruby/value.h - mruby value definitions1 /** 2 ** @file mruby/value.h - mruby value definitions 3 3 ** 4 4 ** See Copyright Notice in mruby.h … … 10 10 #include "common.h" 11 11 12 /* *12 /* 13 13 * MRuby Value definition functions and macros. 14 14 */ 15 15 MRB_BEGIN_DECL 16 16 17 /** 18 * mruby Symbol. 19 * @class mrb_sym 20 * 21 * You can create an mrb_sym by simply using mrb_str_intern() or mrb_intern_cstr() 22 */ 17 23 typedef uint32_t mrb_sym; 24 25 /** 26 * mruby Boolean. 27 * @class mrb_bool 28 * 29 * 30 * Used internally to represent boolean. Can be TRUE or FALSE. 31 * Not to be confused with Ruby's boolean classes, which can be 32 * obtained using mrb_false_value() and mrb_true_value() 33 */ 18 34 typedef uint8_t mrb_bool; 19 35 struct mrb_state; 20 21 #if defined(MRB_INT16) && defined(MRB_INT64)22 # error "You can't define MRB_INT16 and MRB_INT64 at the same time."23 #endif24 36 25 37 #if defined _MSC_VER && _MSC_VER < 1800 26 38 # define PRIo64 "llo" 27 39 # define PRId64 "lld" 40 # define PRIu64 "llu" 28 41 # define PRIx64 "llx" 29 42 # define PRIo16 "ho" 30 43 # define PRId16 "hd" 44 # define PRIu16 "hu" 31 45 # define PRIx16 "hx" 32 46 # define PRIo32 "o" 33 47 # define PRId32 "d" 48 # define PRIu32 "u" 34 49 # define PRIx32 "x" 35 50 #else … … 45 60 # define MRB_PRId PRId64 46 61 # define MRB_PRIx PRIx64 47 #elif defined(MRB_INT16)48 typedef int16_t mrb_int;49 # define MRB_INT_BIT 1650 # define MRB_INT_MIN (INT16_MIN>>MRB_FIXNUM_SHIFT)51 # define MRB_INT_MAX (INT16_MAX>>MRB_FIXNUM_SHIFT)52 # define MRB_PRIo PRIo1653 # define MRB_PRId PRId1654 # define MRB_PRIx PRIx1655 62 #else 56 63 typedef int32_t mrb_int; … … 63 70 #endif 64 71 65 72 #ifdef MRB_ENDIAN_BIG 73 # define MRB_ENDIAN_LOHI(a,b) a b 74 #else 75 # define MRB_ENDIAN_LOHI(a,b) b a 76 #endif 77 78 #ifndef MRB_WITHOUT_FLOAT 66 79 MRB_API double mrb_float_read(const char*, char**); 67 80 #ifdef MRB_USE_FLOAT … … 70 83 typedef double mrb_float; 71 84 #endif 85 #endif 72 86 73 87 #if defined _MSC_VER && _MSC_VER < 1900 74 # ifndef __cplusplus75 # define inline __inline76 # endif77 88 # include <stdarg.h> 78 89 MRB_API int mrb_msvc_vsnprintf(char *s, size_t n, const char *format, va_list arg); … … 80 91 # define vsnprintf(s, n, format, arg) mrb_msvc_vsnprintf(s, n, format, arg) 81 92 # define snprintf(s, n, format, ...) mrb_msvc_snprintf(s, n, format, __VA_ARGS__) 82 # if _MSC_VER < 1800 93 # if _MSC_VER < 1800 && !defined MRB_WITHOUT_FLOAT 83 94 # include <float.h> 84 95 # define isfinite(n) _finite(n) … … 94 105 enum mrb_vtype { 95 106 MRB_TT_FALSE = 0, /* 0 */ 96 MRB_TT_ FREE, /* 1 */97 MRB_TT_ TRUE,/* 2 */107 MRB_TT_TRUE, /* 1 */ 108 MRB_TT_FLOAT, /* 2 */ 98 109 MRB_TT_FIXNUM, /* 3 */ 99 110 MRB_TT_SYMBOL, /* 4 */ 100 111 MRB_TT_UNDEF, /* 5 */ 101 MRB_TT_ FLOAT,/* 6 */102 MRB_TT_ CPTR, /* 7 */112 MRB_TT_CPTR, /* 6 */ 113 MRB_TT_FREE, /* 7 */ 103 114 MRB_TT_OBJECT, /* 8 */ 104 115 MRB_TT_CLASS, /* 9 */ … … 147 158 #endif 148 159 160 #define MRB_SYMBOL_BIT (sizeof(mrb_sym) * CHAR_BIT - MRB_SYMBOL_SHIFT) 161 #define MRB_SYMBOL_MAX (UINT32_MAX >> MRB_SYMBOL_SHIFT) 162 163 #if INTPTR_MAX < MRB_INT_MAX 164 typedef intptr_t mrb_ssize; 165 # define MRB_SSIZE_MAX (INTPTR_MAX>>MRB_FIXNUM_SHIFT) 166 #else 167 typedef mrb_int mrb_ssize; 168 # define MRB_SSIZE_MAX MRB_INT_MAX 169 #endif 170 171 #ifndef mrb_immediate_p 172 #define mrb_immediate_p(o) (mrb_type(o) < MRB_TT_FREE) 173 #endif 149 174 #ifndef mrb_fixnum_p 150 175 #define mrb_fixnum_p(o) (mrb_type(o) == MRB_TT_FIXNUM) 151 176 #endif 177 #ifndef mrb_symbol_p 178 #define mrb_symbol_p(o) (mrb_type(o) == MRB_TT_SYMBOL) 179 #endif 152 180 #ifndef mrb_undef_p 153 181 #define mrb_undef_p(o) (mrb_type(o) == MRB_TT_UNDEF) … … 156 184 #define mrb_nil_p(o) (mrb_type(o) == MRB_TT_FALSE && !mrb_fixnum(o)) 157 185 #endif 186 #ifndef mrb_false_p 187 #define mrb_false_p(o) (mrb_type(o) == MRB_TT_FALSE && !!mrb_fixnum(o)) 188 #endif 189 #ifndef mrb_true_p 190 #define mrb_true_p(o) (mrb_type(o) == MRB_TT_TRUE) 191 #endif 192 #ifndef MRB_WITHOUT_FLOAT 193 #ifndef mrb_float_p 194 #define mrb_float_p(o) (mrb_type(o) == MRB_TT_FLOAT) 195 #endif 196 #endif 197 #ifndef mrb_array_p 198 #define mrb_array_p(o) (mrb_type(o) == MRB_TT_ARRAY) 199 #endif 200 #ifndef mrb_string_p 201 #define mrb_string_p(o) (mrb_type(o) == MRB_TT_STRING) 202 #endif 203 #ifndef mrb_hash_p 204 #define mrb_hash_p(o) (mrb_type(o) == MRB_TT_HASH) 205 #endif 206 #ifndef mrb_cptr_p 207 #define mrb_cptr_p(o) (mrb_type(o) == MRB_TT_CPTR) 208 #endif 209 #ifndef mrb_exception_p 210 #define mrb_exception_p(o) (mrb_type(o) == MRB_TT_EXCEPTION) 211 #endif 212 #ifndef mrb_free_p 213 #define mrb_free_p(o) (mrb_type(o) == MRB_TT_FREE) 214 #endif 215 #ifndef mrb_object_p 216 #define mrb_object_p(o) (mrb_type(o) == MRB_TT_OBJECT) 217 #endif 218 #ifndef mrb_class_p 219 #define mrb_class_p(o) (mrb_type(o) == MRB_TT_CLASS) 220 #endif 221 #ifndef mrb_module_p 222 #define mrb_module_p(o) (mrb_type(o) == MRB_TT_MODULE) 223 #endif 224 #ifndef mrb_iclass_p 225 #define mrb_iclass_p(o) (mrb_type(o) == MRB_TT_ICLASS) 226 #endif 227 #ifndef mrb_sclass_p 228 #define mrb_sclass_p(o) (mrb_type(o) == MRB_TT_SCLASS) 229 #endif 230 #ifndef mrb_proc_p 231 #define mrb_proc_p(o) (mrb_type(o) == MRB_TT_PROC) 232 #endif 233 #ifndef mrb_range_p 234 #define mrb_range_p(o) (mrb_type(o) == MRB_TT_RANGE) 235 #endif 236 #ifndef mrb_file_p 237 #define mrb_file_p(o) (mrb_type(o) == MRB_TT_FILE) 238 #endif 239 #ifndef mrb_env_p 240 #define mrb_env_p(o) (mrb_type(o) == MRB_TT_ENV) 241 #endif 242 #ifndef mrb_data_p 243 #define mrb_data_p(o) (mrb_type(o) == MRB_TT_DATA) 244 #endif 245 #ifndef mrb_fiber_p 246 #define mrb_fiber_p(o) (mrb_type(o) == MRB_TT_FIBER) 247 #endif 248 #ifndef mrb_istruct_p 249 #define mrb_istruct_p(o) (mrb_type(o) == MRB_TT_ISTRUCT) 250 #endif 251 #ifndef mrb_break_p 252 #define mrb_break_p(o) (mrb_type(o) == MRB_TT_BREAK) 253 #endif 158 254 #ifndef mrb_bool 159 255 #define mrb_bool(o) (mrb_type(o) != MRB_TT_FALSE) 160 256 #endif 161 #define mrb_float_p(o) (mrb_type(o) == MRB_TT_FLOAT)162 #define mrb_symbol_p(o) (mrb_type(o) == MRB_TT_SYMBOL)163 #define mrb_array_p(o) (mrb_type(o) == MRB_TT_ARRAY)164 #define mrb_string_p(o) (mrb_type(o) == MRB_TT_STRING)165 #define mrb_hash_p(o) (mrb_type(o) == MRB_TT_HASH)166 #define mrb_cptr_p(o) (mrb_type(o) == MRB_TT_CPTR)167 #define mrb_exception_p(o) (mrb_type(o) == MRB_TT_EXCEPTION)168 257 #define mrb_test(o) mrb_bool(o) 169 MRB_API mrb_bool mrb_regexp_p(struct mrb_state*, mrb_value); 170 171 /* 258 259 /** 172 260 * Returns a float in Ruby. 173 */ 261 * 262 * Takes a float and boxes it into an mrb_value 263 */ 264 #ifndef MRB_WITHOUT_FLOAT 174 265 MRB_INLINE mrb_value mrb_float_value(struct mrb_state *mrb, mrb_float f) 175 266 { … … 179 270 return v; 180 271 } 181 182 static inline mrb_value 272 #endif 273 274 MRB_INLINE mrb_value 183 275 mrb_cptr_value(struct mrb_state *mrb, void *p) 184 276 { … … 189 281 } 190 282 191 /* 283 /** 192 284 * Returns a fixnum in Ruby. 285 * 286 * Takes an integer and boxes it into an mrb_value 193 287 */ 194 288 MRB_INLINE mrb_value mrb_fixnum_value(mrb_int i) … … 199 293 } 200 294 201 static inlinemrb_value295 MRB_INLINE mrb_value 202 296 mrb_symbol_value(mrb_sym i) 203 297 { … … 207 301 } 208 302 209 static inlinemrb_value303 MRB_INLINE mrb_value 210 304 mrb_obj_value(void *p) 211 305 { … … 217 311 } 218 312 219 220 /* 313 /** 221 314 * Get a nil mrb_value object. 222 315 * … … 231 324 } 232 325 233 /* 326 /** 234 327 * Returns false in Ruby. 235 328 */ … … 241 334 } 242 335 243 /* 336 /** 244 337 * Returns true in Ruby. 245 338 */ … … 251 344 } 252 345 253 static inlinemrb_value346 MRB_INLINE mrb_value 254 347 mrb_bool_value(mrb_bool boolean) 255 348 { … … 259 352 } 260 353 261 static inlinemrb_value354 MRB_INLINE mrb_value 262 355 mrb_undef_value(void) 263 356 { … … 267 360 } 268 361 269 #ifdef MRB_USE_ETEXT_EDATA 270 #if (defined(__APPLE__) && defined(__MACH__)) 271 #include <mach-o/getsect.h> 362 #if defined(MRB_USE_ETEXT_EDATA) && !defined(MRB_USE_LINK_TIME_RO_DATA_P) 363 # ifdef __GNUC__ 364 # warning MRB_USE_ETEXT_EDATA is deprecated. Define MRB_USE_LINK_TIME_RO_DATA_P instead. 365 # endif 366 # define MRB_USE_LINK_TIME_RO_DATA_P 367 #endif 368 369 #if defined(MRB_USE_CUSTOM_RO_DATA_P) 370 /* If you define `MRB_USE_CUSTOM_RO_DATA_P`, you must implement `mrb_ro_data_p()`. */ 371 mrb_bool mrb_ro_data_p(const char *p); 372 #elif defined(MRB_USE_LINK_TIME_RO_DATA_P) 373 extern char __ehdr_start[]; 374 extern char __init_array_start[]; 375 272 376 static inline mrb_bool 273 377 mrb_ro_data_p(const char *p) 274 378 { 275 return (const char*)get_etext() < p && p < (const char*)get_edata(); 276 } 277 #else 278 extern char _etext[]; 279 #ifdef MRB_NO_INIT_ARRAY_START 280 extern char _edata[]; 281 282 static inline mrb_bool 283 mrb_ro_data_p(const char *p) 284 { 285 return _etext < p && p < _edata; 286 } 287 #else 288 extern char __init_array_start[]; 289 290 static inline mrb_bool 291 mrb_ro_data_p(const char *p) 292 { 293 return _etext < p && p < (char*)&__init_array_start; 294 } 295 #endif 296 #endif 379 return __ehdr_start < p && p < __init_array_start; 380 } 297 381 #else 298 382 # define mrb_ro_data_p(p) FALSE
Note:
See TracChangeset
for help on using the changeset viewer.