Ignore:
Timestamp:
Jul 9, 2020, 8:51:43 AM (4 years ago)
Author:
coas-nagasima
Message:

mrubyを2.1.1に更新

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 definitions
     1/**
     2** @file mruby/value.h - mruby value definitions
    33**
    44** See Copyright Notice in mruby.h
     
    1010#include "common.h"
    1111
    12 /**
     12/*
    1313 * MRuby Value definition functions and macros.
    1414 */
    1515MRB_BEGIN_DECL
    1616
     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 */
    1723typedef 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 */
    1834typedef uint8_t mrb_bool;
    1935struct 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 #endif
    2436
    2537#if defined _MSC_VER && _MSC_VER < 1800
    2638# define PRIo64 "llo"
    2739# define PRId64 "lld"
     40# define PRIu64 "llu"
    2841# define PRIx64 "llx"
    2942# define PRIo16 "ho"
    3043# define PRId16 "hd"
     44# define PRIu16 "hu"
    3145# define PRIx16 "hx"
    3246# define PRIo32 "o"
    3347# define PRId32 "d"
     48# define PRIu32 "u"
    3449# define PRIx32 "x"
    3550#else
     
    4560# define MRB_PRId PRId64
    4661# define MRB_PRIx PRIx64
    47 #elif defined(MRB_INT16)
    48   typedef int16_t mrb_int;
    49 # define MRB_INT_BIT 16
    50 # define MRB_INT_MIN (INT16_MIN>>MRB_FIXNUM_SHIFT)
    51 # define MRB_INT_MAX (INT16_MAX>>MRB_FIXNUM_SHIFT)
    52 # define MRB_PRIo PRIo16
    53 # define MRB_PRId PRId16
    54 # define MRB_PRIx PRIx16
    5562#else
    5663  typedef int32_t mrb_int;
     
    6370#endif
    6471
    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
    6679MRB_API double mrb_float_read(const char*, char**);
    6780#ifdef MRB_USE_FLOAT
     
    7083  typedef double mrb_float;
    7184#endif
     85#endif
    7286
    7387#if defined _MSC_VER && _MSC_VER < 1900
    74 # ifndef __cplusplus
    75 #  define inline __inline
    76 # endif
    7788# include <stdarg.h>
    7889MRB_API int mrb_msvc_vsnprintf(char *s, size_t n, const char *format, va_list arg);
     
    8091# define vsnprintf(s, n, format, arg) mrb_msvc_vsnprintf(s, n, format, arg)
    8192# 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
    8394#  include <float.h>
    8495#  define isfinite(n) _finite(n)
     
    94105enum mrb_vtype {
    95106  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 */
    98109  MRB_TT_FIXNUM,      /*   3 */
    99110  MRB_TT_SYMBOL,      /*   4 */
    100111  MRB_TT_UNDEF,       /*   5 */
    101   MRB_TT_FLOAT,       /*   6 */
    102   MRB_TT_CPTR,        /*   7 */
     112  MRB_TT_CPTR,        /*   6 */
     113  MRB_TT_FREE,        /*   7 */
    103114  MRB_TT_OBJECT,      /*   8 */
    104115  MRB_TT_CLASS,       /*   9 */
     
    147158#endif
    148159
     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
    149174#ifndef mrb_fixnum_p
    150175#define mrb_fixnum_p(o) (mrb_type(o) == MRB_TT_FIXNUM)
    151176#endif
     177#ifndef mrb_symbol_p
     178#define mrb_symbol_p(o) (mrb_type(o) == MRB_TT_SYMBOL)
     179#endif
    152180#ifndef mrb_undef_p
    153181#define mrb_undef_p(o) (mrb_type(o) == MRB_TT_UNDEF)
     
    156184#define mrb_nil_p(o)  (mrb_type(o) == MRB_TT_FALSE && !mrb_fixnum(o))
    157185#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
    158254#ifndef mrb_bool
    159255#define mrb_bool(o)   (mrb_type(o) != MRB_TT_FALSE)
    160256#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)
    168257#define mrb_test(o)   mrb_bool(o)
    169 MRB_API mrb_bool mrb_regexp_p(struct mrb_state*, mrb_value);
    170 
    171 /*
     258
     259/**
    172260 * Returns a float in Ruby.
    173  */
     261 *
     262 * Takes a float and boxes it into an mrb_value
     263 */
     264#ifndef MRB_WITHOUT_FLOAT
    174265MRB_INLINE mrb_value mrb_float_value(struct mrb_state *mrb, mrb_float f)
    175266{
     
    179270  return v;
    180271}
    181 
    182 static inline mrb_value
     272#endif
     273
     274MRB_INLINE mrb_value
    183275mrb_cptr_value(struct mrb_state *mrb, void *p)
    184276{
     
    189281}
    190282
    191 /*
     283/**
    192284 * Returns a fixnum in Ruby.
     285 *
     286 * Takes an integer and boxes it into an mrb_value
    193287 */
    194288MRB_INLINE mrb_value mrb_fixnum_value(mrb_int i)
     
    199293}
    200294
    201 static inline mrb_value
     295MRB_INLINE mrb_value
    202296mrb_symbol_value(mrb_sym i)
    203297{
     
    207301}
    208302
    209 static inline mrb_value
     303MRB_INLINE mrb_value
    210304mrb_obj_value(void *p)
    211305{
     
    217311}
    218312
    219 
    220 /*
     313/**
    221314 * Get a nil mrb_value object.
    222315 *
     
    231324}
    232325
    233 /*
     326/**
    234327 * Returns false in Ruby.
    235328 */
     
    241334}
    242335
    243 /*
     336/**
    244337 * Returns true in Ruby.
    245338 */
     
    251344}
    252345
    253 static inline mrb_value
     346MRB_INLINE mrb_value
    254347mrb_bool_value(mrb_bool boolean)
    255348{
     
    259352}
    260353
    261 static inline mrb_value
     354MRB_INLINE mrb_value
    262355mrb_undef_value(void)
    263356{
     
    267360}
    268361
    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()`. */
     371mrb_bool mrb_ro_data_p(const char *p);
     372#elif defined(MRB_USE_LINK_TIME_RO_DATA_P)
     373extern char __ehdr_start[];
     374extern char __init_array_start[];
     375
    272376static inline mrb_bool
    273377mrb_ro_data_p(const char *p)
    274378{
    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}
    297381#else
    298382# define mrb_ro_data_p(p) FALSE
Note: See TracChangeset for help on using the changeset viewer.