source: EcnlProtoTool/trunk/mruby-1.2.0/include/mruby/value.h@ 270

Last change on this file since 270 was 270, checked in by coas-nagasima, 7 years ago

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr
File size: 5.7 KB
RevLine 
[270]1/*
2** mruby/value.h - mruby value definitions
3**
4** See Copyright Notice in mruby.h
5*/
6
7#ifndef MRUBY_VALUE_H
8#define MRUBY_VALUE_H
9
10#include "mruby/common.h"
11
12/**
13 * MRuby Value definition functions and macros.
14 */
15MRB_BEGIN_DECL
16
17typedef uint32_t mrb_sym;
18typedef uint8_t mrb_bool;
19struct 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
24
25#if defined(MRB_INT64)
26 typedef int64_t mrb_int;
27# define MRB_INT_BIT 64
28# define MRB_INT_MIN (INT64_MIN>>MRB_FIXNUM_SHIFT)
29# define MRB_INT_MAX (INT64_MAX>>MRB_FIXNUM_SHIFT)
30#elif defined(MRB_INT16)
31 typedef int16_t mrb_int;
32# define MRB_INT_BIT 16
33# define MRB_INT_MIN (INT16_MIN>>MRB_FIXNUM_SHIFT)
34# define MRB_INT_MAX (INT16_MAX>>MRB_FIXNUM_SHIFT)
35#else
36 typedef int32_t mrb_int;
37# define MRB_INT_BIT 32
38# define MRB_INT_MIN (INT32_MIN>>MRB_FIXNUM_SHIFT)
39# define MRB_INT_MAX (INT32_MAX>>MRB_FIXNUM_SHIFT)
40#endif
41
42#ifdef MRB_USE_FLOAT
43 typedef float mrb_float;
44# define str_to_mrb_float(buf) strtof(buf, NULL)
45#else
46 typedef double mrb_float;
47# define str_to_mrb_float(buf) strtod(buf, NULL)
48#endif
49
50#if defined _MSC_VER && _MSC_VER < 1900
51# ifndef __cplusplus
52# define inline __inline
53# endif
54# include <stdarg.h>
55MRB_API int mrb_msvc_vsnprintf(char *s, size_t n, const char *format, va_list arg);
56MRB_API int mrb_msvc_snprintf(char *s, size_t n, const char *format, ...);
57# define vsnprintf(s, n, format, arg) mrb_msvc_vsnprintf(s, n, format, arg)
58# define snprintf(s, n, format, ...) mrb_msvc_snprintf(s, n, format, __VA_ARGS__)
59# if _MSC_VER < 1800
60# include <float.h>
61# define isfinite(n) _finite(n)
62# define isnan _isnan
63# define isinf(n) (!_finite(n) && !_isnan(n))
64# define signbit(n) (_copysign(1.0, (n)) < 0.0)
65# define strtof (float)strtod
66static const unsigned int IEEE754_INFINITY_BITS_SINGLE = 0x7F800000;
67# define INFINITY (*(float *)&IEEE754_INFINITY_BITS_SINGLE)
68# define NAN ((float)(INFINITY - INFINITY))
69# endif
70#endif
71
72enum mrb_vtype {
73 MRB_TT_FALSE = 0, /* 0 */
74 MRB_TT_FREE, /* 1 */
75 MRB_TT_TRUE, /* 2 */
76 MRB_TT_FIXNUM, /* 3 */
77 MRB_TT_SYMBOL, /* 4 */
78 MRB_TT_UNDEF, /* 5 */
79 MRB_TT_FLOAT, /* 6 */
80 MRB_TT_CPTR, /* 7 */
81 MRB_TT_OBJECT, /* 8 */
82 MRB_TT_CLASS, /* 9 */
83 MRB_TT_MODULE, /* 10 */
84 MRB_TT_ICLASS, /* 11 */
85 MRB_TT_SCLASS, /* 12 */
86 MRB_TT_PROC, /* 13 */
87 MRB_TT_ARRAY, /* 14 */
88 MRB_TT_HASH, /* 15 */
89 MRB_TT_STRING, /* 16 */
90 MRB_TT_RANGE, /* 17 */
91 MRB_TT_EXCEPTION, /* 18 */
92 MRB_TT_FILE, /* 19 */
93 MRB_TT_ENV, /* 20 */
94 MRB_TT_DATA, /* 21 */
95 MRB_TT_FIBER, /* 22 */
96 MRB_TT_MAXDEFINE /* 23 */
97};
98
99#include "mruby/object.h"
100
101#ifdef MRB_DOCUMENTATION_BLOCK
102
103/**
104 * @abstract
105 * MRuby value boxing.
106 *
107 * Actual implementation depends on configured boxing type.
108 *
109 * @see mruby/boxing_no.h Default boxing representation
110 * @see mruby/boxing_word.h Word representation
111 * @see mruby/boxing_nan.h Boxed double representation
112 */
113typedef void mrb_value;
114
115#endif
116
117#if defined(MRB_NAN_BOXING)
118#include "boxing_nan.h"
119#elif defined(MRB_WORD_BOXING)
120#include "boxing_word.h"
121#else
122#include "boxing_no.h"
123#endif
124
125#ifndef mrb_fixnum_p
126#define mrb_fixnum_p(o) (mrb_type(o) == MRB_TT_FIXNUM)
127#endif
128#ifndef mrb_undef_p
129#define mrb_undef_p(o) (mrb_type(o) == MRB_TT_UNDEF)
130#endif
131#ifndef mrb_nil_p
132#define mrb_nil_p(o) (mrb_type(o) == MRB_TT_FALSE && !mrb_fixnum(o))
133#endif
134#ifndef mrb_bool
135#define mrb_bool(o) (mrb_type(o) != MRB_TT_FALSE)
136#endif
137#define mrb_float_p(o) (mrb_type(o) == MRB_TT_FLOAT)
138#define mrb_symbol_p(o) (mrb_type(o) == MRB_TT_SYMBOL)
139#define mrb_array_p(o) (mrb_type(o) == MRB_TT_ARRAY)
140#define mrb_string_p(o) (mrb_type(o) == MRB_TT_STRING)
141#define mrb_hash_p(o) (mrb_type(o) == MRB_TT_HASH)
142#define mrb_cptr_p(o) (mrb_type(o) == MRB_TT_CPTR)
143#define mrb_exception_p(o) (mrb_type(o) == MRB_TT_EXCEPTION)
144#define mrb_test(o) mrb_bool(o)
145MRB_API mrb_bool mrb_regexp_p(struct mrb_state*, mrb_value);
146
147/*
148 * Returns a float in Ruby.
149 */
150MRB_INLINE mrb_value mrb_float_value(struct mrb_state *mrb, mrb_float f)
151{
152 mrb_value v;
153 (void) mrb;
154 SET_FLOAT_VALUE(mrb, v, f);
155 return v;
156}
157
158static inline mrb_value
159mrb_cptr_value(struct mrb_state *mrb, void *p)
160{
161 mrb_value v;
162 (void) mrb;
163 SET_CPTR_VALUE(mrb,v,p);
164 return v;
165}
166
167/*
168 * Returns a fixnum in Ruby.
169 */
170MRB_INLINE mrb_value mrb_fixnum_value(mrb_int i)
171{
172 mrb_value v;
173 SET_INT_VALUE(v, i);
174 return v;
175}
176
177static inline mrb_value
178mrb_symbol_value(mrb_sym i)
179{
180 mrb_value v;
181 SET_SYM_VALUE(v, i);
182 return v;
183}
184
185static inline mrb_value
186mrb_obj_value(void *p)
187{
188 mrb_value v;
189 SET_OBJ_VALUE(v, (struct RBasic*)p);
190 return v;
191}
192
193
194/*
195 * Get a nil mrb_value object.
196 *
197 * @return
198 * nil mrb_value object reference.
199 */
200MRB_INLINE mrb_value mrb_nil_value(void)
201{
202 mrb_value v;
203 SET_NIL_VALUE(v);
204 return v;
205}
206
207/*
208 * Returns false in Ruby.
209 */
210MRB_INLINE mrb_value mrb_false_value(void)
211{
212 mrb_value v;
213 SET_FALSE_VALUE(v);
214 return v;
215}
216
217/*
218 * Returns true in Ruby.
219 */
220MRB_INLINE mrb_value mrb_true_value(void)
221{
222 mrb_value v;
223 SET_TRUE_VALUE(v);
224 return v;
225}
226
227static inline mrb_value
228mrb_bool_value(mrb_bool boolean)
229{
230 mrb_value v;
231 SET_BOOL_VALUE(v, boolean);
232 return v;
233}
234
235static inline mrb_value
236mrb_undef_value(void)
237{
238 mrb_value v;
239 SET_UNDEF_VALUE(v);
240 return v;
241}
242
243#ifdef MRB_USE_ETEXT_EDATA
244extern char _etext[];
245#ifdef MRB_NO_INIT_ARRAY_START
246extern char _edata[];
247
248static inline mrb_bool
249mrb_ro_data_p(const char *p)
250{
251 return _etext < p && p < _edata;
252}
253#else
254extern char __init_array_start[];
255
256static inline mrb_bool
257mrb_ro_data_p(const char *p)
258{
259 return _etext < p && p < (char*)&__init_array_start;
260}
261#endif
262#else
263# define mrb_ro_data_p(p) FALSE
264#endif
265
266MRB_END_DECL
267
268#endif /* MRUBY_VALUE_H */
Note: See TracBrowser for help on using the repository browser.