portable_mruby 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +195 -0
- data/exe/portable-mruby +6 -0
- data/lib/portable_mruby/binary_manager.rb +225 -0
- data/lib/portable_mruby/builder.rb +97 -0
- data/lib/portable_mruby/bytecode_compiler.rb +19 -0
- data/lib/portable_mruby/c_generator.rb +94 -0
- data/lib/portable_mruby/cli.rb +136 -0
- data/lib/portable_mruby/version.rb +6 -0
- data/lib/portable_mruby.rb +15 -0
- data/vendor/mruby/bin/mrbc.com +0 -0
- data/vendor/mruby/include/mrbconf.h +230 -0
- data/vendor/mruby/include/mruby/array.h +303 -0
- data/vendor/mruby/include/mruby/boxing_nan.h +169 -0
- data/vendor/mruby/include/mruby/boxing_no.h +59 -0
- data/vendor/mruby/include/mruby/boxing_word.h +251 -0
- data/vendor/mruby/include/mruby/class.h +104 -0
- data/vendor/mruby/include/mruby/common.h +118 -0
- data/vendor/mruby/include/mruby/compile.h +185 -0
- data/vendor/mruby/include/mruby/data.h +76 -0
- data/vendor/mruby/include/mruby/debug.h +75 -0
- data/vendor/mruby/include/mruby/dump.h +159 -0
- data/vendor/mruby/include/mruby/endian.h +44 -0
- data/vendor/mruby/include/mruby/error.h +132 -0
- data/vendor/mruby/include/mruby/gc.h +72 -0
- data/vendor/mruby/include/mruby/gems/mruby-dir/include/dir_hal.h +79 -0
- data/vendor/mruby/include/mruby/gems/mruby-io/include/io_hal.h +451 -0
- data/vendor/mruby/include/mruby/gems/mruby-io/include/mruby/ext/io.h +76 -0
- data/vendor/mruby/include/mruby/gems/mruby-socket/include/socket_hal.h +83 -0
- data/vendor/mruby/include/mruby/gems/mruby-time/include/mruby/time.h +27 -0
- data/vendor/mruby/include/mruby/hash.h +234 -0
- data/vendor/mruby/include/mruby/internal.h +274 -0
- data/vendor/mruby/include/mruby/irep.h +142 -0
- data/vendor/mruby/include/mruby/istruct.h +50 -0
- data/vendor/mruby/include/mruby/khash.h +455 -0
- data/vendor/mruby/include/mruby/mempool.h +19 -0
- data/vendor/mruby/include/mruby/numeric.h +174 -0
- data/vendor/mruby/include/mruby/object.h +45 -0
- data/vendor/mruby/include/mruby/opcode.h +69 -0
- data/vendor/mruby/include/mruby/ops.h +120 -0
- data/vendor/mruby/include/mruby/presym/disable.h +72 -0
- data/vendor/mruby/include/mruby/presym/enable.h +39 -0
- data/vendor/mruby/include/mruby/presym/id.h +1423 -0
- data/vendor/mruby/include/mruby/presym/scanning.h +81 -0
- data/vendor/mruby/include/mruby/presym/table.h +2847 -0
- data/vendor/mruby/include/mruby/presym.h +41 -0
- data/vendor/mruby/include/mruby/proc.h +186 -0
- data/vendor/mruby/include/mruby/range.h +77 -0
- data/vendor/mruby/include/mruby/re.h +16 -0
- data/vendor/mruby/include/mruby/string.h +428 -0
- data/vendor/mruby/include/mruby/throw.h +57 -0
- data/vendor/mruby/include/mruby/value.h +471 -0
- data/vendor/mruby/include/mruby/variable.h +108 -0
- data/vendor/mruby/include/mruby/version.h +143 -0
- data/vendor/mruby/include/mruby.h +1614 -0
- data/vendor/mruby/lib/libmruby.a +0 -0
- metadata +102 -0
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
/**
|
|
2
|
+
** @file 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 "common.h"
|
|
11
|
+
|
|
12
|
+
/*
|
|
13
|
+
* mruby Value definition functions and macros.
|
|
14
|
+
*/
|
|
15
|
+
MRB_BEGIN_DECL
|
|
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
|
+
*/
|
|
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
|
+
*/
|
|
34
|
+
#if defined(__cplusplus) || (defined(__bool_true_false_are_defined) && __bool_true_false_are_defined)
|
|
35
|
+
typedef bool mrb_bool;
|
|
36
|
+
|
|
37
|
+
# ifndef FALSE
|
|
38
|
+
# define FALSE false
|
|
39
|
+
# endif
|
|
40
|
+
# ifndef TRUE
|
|
41
|
+
# define TRUE true
|
|
42
|
+
# endif
|
|
43
|
+
#else
|
|
44
|
+
# if __STDC_VERSION__ >= 199901L
|
|
45
|
+
typedef _Bool mrb_bool;
|
|
46
|
+
# else
|
|
47
|
+
typedef uint8_t mrb_bool;
|
|
48
|
+
# endif
|
|
49
|
+
|
|
50
|
+
# ifndef FALSE
|
|
51
|
+
# define FALSE 0
|
|
52
|
+
# endif
|
|
53
|
+
# ifndef TRUE
|
|
54
|
+
# define TRUE 1
|
|
55
|
+
# endif
|
|
56
|
+
#endif
|
|
57
|
+
|
|
58
|
+
struct mrb_state;
|
|
59
|
+
|
|
60
|
+
#if defined _MSC_VER && _MSC_VER < 1800
|
|
61
|
+
# define PRIo64 "llo"
|
|
62
|
+
# define PRId64 "lld"
|
|
63
|
+
# define PRIu64 "llu"
|
|
64
|
+
# define PRIx64 "llx"
|
|
65
|
+
# define PRIo16 "ho"
|
|
66
|
+
# define PRId16 "hd"
|
|
67
|
+
# define PRIu16 "hu"
|
|
68
|
+
# define PRIx16 "hx"
|
|
69
|
+
# define PRIo32 "o"
|
|
70
|
+
# define PRId32 "d"
|
|
71
|
+
# define PRIu32 "u"
|
|
72
|
+
# define PRIx32 "x"
|
|
73
|
+
#else
|
|
74
|
+
# include <inttypes.h>
|
|
75
|
+
#endif
|
|
76
|
+
|
|
77
|
+
#if defined(MRB_INT64)
|
|
78
|
+
typedef int64_t mrb_int;
|
|
79
|
+
typedef uint64_t mrb_uint;
|
|
80
|
+
# define MRB_INT_BIT 64
|
|
81
|
+
# define MRB_INT_MIN INT64_MIN
|
|
82
|
+
# define MRB_INT_MAX INT64_MAX
|
|
83
|
+
# define MRB_PRIo PRIo64
|
|
84
|
+
# define MRB_PRId PRId64
|
|
85
|
+
# define MRB_PRIx PRIx64
|
|
86
|
+
#else
|
|
87
|
+
typedef int32_t mrb_int;
|
|
88
|
+
typedef uint32_t mrb_uint;
|
|
89
|
+
# define MRB_INT_BIT 32
|
|
90
|
+
# define MRB_INT_MIN INT32_MIN
|
|
91
|
+
# define MRB_INT_MAX INT32_MAX
|
|
92
|
+
# define MRB_PRIo PRIo32
|
|
93
|
+
# define MRB_PRId PRId32
|
|
94
|
+
# define MRB_PRIx PRIx32
|
|
95
|
+
#endif
|
|
96
|
+
|
|
97
|
+
#define MRB_FLAGS_MASK(shift, width) (~(~0U << (width)) << (shift))
|
|
98
|
+
#define MRB_FLAGS_GET(b, s, w) (((b) >> (s)) & MRB_FLAGS_MASK(0, w))
|
|
99
|
+
#define MRB_FLAGS_SET(b, s, w, n) ((b) = MRB_FLAGS_ZERO(b, s, w) | MRB_FLAGS_MAKE(s, w, n))
|
|
100
|
+
#define MRB_FLAGS_ZERO(b, s, w) ((b) & ~MRB_FLAGS_MASK(s, w))
|
|
101
|
+
#define MRB_FLAGS_MAKE(s, w, n) (((n) & MRB_FLAGS_MASK(0, w)) << (s))
|
|
102
|
+
#define MRB_FLAG_ON(b, s) ((b) |= MRB_FLAGS_MASK(s, 1))
|
|
103
|
+
#define MRB_FLAG_OFF(b, s) ((b) &= ~MRB_FLAGS_MASK(s, 1))
|
|
104
|
+
#define MRB_FLAG_CHECK(b, s) (!!((b) & MRB_FLAGS_MASK(s, 1)))
|
|
105
|
+
|
|
106
|
+
MRB_API mrb_bool mrb_read_int(const char *p, const char *e, char **endp, mrb_int *np);
|
|
107
|
+
/* obsolete; do not use mrb_int_read() */
|
|
108
|
+
MRB_API mrb_int mrb_int_read(const char*, const char*, char**);
|
|
109
|
+
#ifndef MRB_NO_FLOAT
|
|
110
|
+
MRB_API mrb_bool mrb_read_float(const char *p, char **endp, double *fp);
|
|
111
|
+
/* obsolete; do not use mrb_float_read() */
|
|
112
|
+
MRB_API double mrb_float_read(const char *p, char **endp);
|
|
113
|
+
#ifdef MRB_USE_FLOAT32
|
|
114
|
+
typedef float mrb_float;
|
|
115
|
+
#else
|
|
116
|
+
typedef double mrb_float;
|
|
117
|
+
#endif
|
|
118
|
+
#endif
|
|
119
|
+
|
|
120
|
+
#if defined _MSC_VER && _MSC_VER < 1900
|
|
121
|
+
MRB_API int mrb_msvc_vsnprintf(char *s, size_t n, const char *format, va_list arg);
|
|
122
|
+
MRB_API int mrb_msvc_snprintf(char *s, size_t n, const char *format, ...);
|
|
123
|
+
# define vsnprintf(s, n, format, arg) mrb_msvc_vsnprintf(s, n, format, arg)
|
|
124
|
+
# define snprintf(s, n, format, ...) mrb_msvc_snprintf(s, n, format, __VA_ARGS__)
|
|
125
|
+
# if _MSC_VER < 1800 && !defined MRB_NO_FLOAT
|
|
126
|
+
# define isfinite(n) _finite(n)
|
|
127
|
+
# define isnan _isnan
|
|
128
|
+
# define isinf(n) (!_finite(n) && !_isnan(n))
|
|
129
|
+
# define signbit(n) (_copysign(1.0, (n)) < 0.0)
|
|
130
|
+
static const unsigned int IEEE754_INFINITY_BITS_SINGLE = 0x7F800000;
|
|
131
|
+
# define INFINITY (*(float*)&IEEE754_INFINITY_BITS_SINGLE)
|
|
132
|
+
# define NAN ((float)(INFINITY - INFINITY))
|
|
133
|
+
# endif
|
|
134
|
+
#endif
|
|
135
|
+
|
|
136
|
+
#define MRB_VTYPE_FOREACH(f) \
|
|
137
|
+
/* mrb_vtype */ /* C type */ /* Ruby class */ \
|
|
138
|
+
f(MRB_TT_FALSE, void, "false") \
|
|
139
|
+
f(MRB_TT_TRUE, void, "true") \
|
|
140
|
+
f(MRB_TT_SYMBOL, void, "Symbol") \
|
|
141
|
+
f(MRB_TT_UNDEF, void, "undefined") \
|
|
142
|
+
f(MRB_TT_FREE, void, "free") \
|
|
143
|
+
f(MRB_TT_FLOAT, struct RFloat, "Float") \
|
|
144
|
+
f(MRB_TT_INTEGER, struct RInteger, "Integer") \
|
|
145
|
+
f(MRB_TT_CPTR, struct RCptr, "cptr") \
|
|
146
|
+
f(MRB_TT_OBJECT, struct RObject, "Object") \
|
|
147
|
+
f(MRB_TT_CLASS, struct RClass, "Class") \
|
|
148
|
+
f(MRB_TT_MODULE, struct RClass, "Module") \
|
|
149
|
+
f(MRB_TT_SCLASS, struct RClass, "SClass") \
|
|
150
|
+
f(MRB_TT_HASH, struct RHash, "Hash") \
|
|
151
|
+
f(MRB_TT_CDATA, struct RData, "C data") \
|
|
152
|
+
f(MRB_TT_EXCEPTION, struct RException, "Exception") \
|
|
153
|
+
f(MRB_TT_ICLASS, struct RClass, "iClass") \
|
|
154
|
+
f(MRB_TT_PROC, struct RProc, "Proc") \
|
|
155
|
+
f(MRB_TT_ARRAY, struct RArray, "Array") \
|
|
156
|
+
f(MRB_TT_STRING, struct RString, "String") \
|
|
157
|
+
f(MRB_TT_RANGE, struct RRange, "Range") \
|
|
158
|
+
f(MRB_TT_ENV, struct REnv, "env") \
|
|
159
|
+
f(MRB_TT_FIBER, struct RFiber, "Fiber") \
|
|
160
|
+
f(MRB_TT_STRUCT, struct RArray, "Struct") \
|
|
161
|
+
f(MRB_TT_ISTRUCT, struct RIStruct, "istruct") \
|
|
162
|
+
f(MRB_TT_BREAK, struct RBreak, "break") \
|
|
163
|
+
f(MRB_TT_COMPLEX, struct RComplex, "Complex") \
|
|
164
|
+
f(MRB_TT_RATIONAL, struct RRational, "Rational") \
|
|
165
|
+
f(MRB_TT_BIGINT, struct RBigint, "Integer") \
|
|
166
|
+
f(MRB_TT_BACKTRACE, struct RBacktrace, "backtrace") \
|
|
167
|
+
f(MRB_TT_SET, struct RSet, "Set")
|
|
168
|
+
|
|
169
|
+
enum mrb_vtype {
|
|
170
|
+
#define MRB_VTYPE_DEFINE(tt, type, name) tt,
|
|
171
|
+
MRB_VTYPE_FOREACH(MRB_VTYPE_DEFINE)
|
|
172
|
+
#undef MRB_VTYPE_DEFINE
|
|
173
|
+
MRB_TT_MAXDEFINE
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
/* obsolete name for MRB_TT_CDATA */
|
|
177
|
+
#define MRB_TT_DATA MRB_TT_CDATA
|
|
178
|
+
|
|
179
|
+
#define MRB_VTYPE_TYPEOF(tt) MRB_TYPEOF_##tt
|
|
180
|
+
|
|
181
|
+
#define MRB_VTYPE_TYPEDEF(tt, type, name) typedef type MRB_VTYPE_TYPEOF(tt);
|
|
182
|
+
MRB_VTYPE_FOREACH(MRB_VTYPE_TYPEDEF)
|
|
183
|
+
#undef MRB_VTYPE_TYPEDEF
|
|
184
|
+
|
|
185
|
+
/* for compatibility */
|
|
186
|
+
#define MRB_TT_FIXNUM MRB_TT_INTEGER
|
|
187
|
+
|
|
188
|
+
#include <mruby/object.h>
|
|
189
|
+
|
|
190
|
+
#ifdef MRB_DOCUMENTATION_BLOCK
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* @abstract
|
|
194
|
+
* mruby value boxing.
|
|
195
|
+
*
|
|
196
|
+
* Actual implementation depends on configured boxing type.
|
|
197
|
+
*
|
|
198
|
+
* @see mruby/boxing_word.h Word boxing representation (Default)
|
|
199
|
+
* @see mruby/boxing_no.h No boxing representation
|
|
200
|
+
* @see mruby/boxing_nan.h Boxed double representation
|
|
201
|
+
*/
|
|
202
|
+
typedef void mrb_value;
|
|
203
|
+
|
|
204
|
+
#endif
|
|
205
|
+
|
|
206
|
+
#if defined(MRB_WORD_BOXING) || (defined(MRB_NAN_BOXING) && defined(MRB_64BIT))
|
|
207
|
+
struct RCptr {
|
|
208
|
+
MRB_OBJECT_HEADER;
|
|
209
|
+
void *p;
|
|
210
|
+
};
|
|
211
|
+
#endif
|
|
212
|
+
|
|
213
|
+
#if defined(MRB_NAN_BOXING)
|
|
214
|
+
#include "boxing_nan.h"
|
|
215
|
+
#elif defined(MRB_WORD_BOXING)
|
|
216
|
+
#include "boxing_word.h"
|
|
217
|
+
#else
|
|
218
|
+
#include "boxing_no.h"
|
|
219
|
+
#endif
|
|
220
|
+
|
|
221
|
+
#if INTPTR_MAX < MRB_INT_MAX
|
|
222
|
+
typedef intptr_t mrb_ssize;
|
|
223
|
+
# define MRB_SSIZE_MAX INTPTR_MAX
|
|
224
|
+
#else
|
|
225
|
+
typedef mrb_int mrb_ssize;
|
|
226
|
+
# define MRB_SSIZE_MAX MRB_INT_MAX
|
|
227
|
+
#endif
|
|
228
|
+
|
|
229
|
+
#ifndef mrb_immediate_p
|
|
230
|
+
#define mrb_immediate_p(o) (mrb_type(o) <= MRB_TT_CPTR)
|
|
231
|
+
#endif
|
|
232
|
+
#ifndef mrb_integer_p
|
|
233
|
+
#define mrb_integer_p(o) (mrb_type(o) == MRB_TT_INTEGER)
|
|
234
|
+
#endif
|
|
235
|
+
#ifndef mrb_fixnum_p
|
|
236
|
+
#define mrb_fixnum_p(o) mrb_integer_p(o)
|
|
237
|
+
#endif
|
|
238
|
+
#ifndef mrb_symbol_p
|
|
239
|
+
#define mrb_symbol_p(o) (mrb_type(o) == MRB_TT_SYMBOL)
|
|
240
|
+
#endif
|
|
241
|
+
#ifndef mrb_undef_p
|
|
242
|
+
#define mrb_undef_p(o) (mrb_type(o) == MRB_TT_UNDEF)
|
|
243
|
+
#endif
|
|
244
|
+
#ifndef mrb_nil_p
|
|
245
|
+
#define mrb_nil_p(o) (mrb_type(o) == MRB_TT_FALSE && !mrb_fixnum(o))
|
|
246
|
+
#endif
|
|
247
|
+
#ifndef mrb_false_p
|
|
248
|
+
#define mrb_false_p(o) (mrb_type(o) == MRB_TT_FALSE && !!mrb_fixnum(o))
|
|
249
|
+
#endif
|
|
250
|
+
#ifndef mrb_true_p
|
|
251
|
+
#define mrb_true_p(o) (mrb_type(o) == MRB_TT_TRUE)
|
|
252
|
+
#endif
|
|
253
|
+
#ifndef mrb_float_p
|
|
254
|
+
#ifndef MRB_NO_FLOAT
|
|
255
|
+
#define mrb_float_p(o) (mrb_type(o) == MRB_TT_FLOAT)
|
|
256
|
+
#else
|
|
257
|
+
#define mrb_float_p(o) FALSE
|
|
258
|
+
#endif
|
|
259
|
+
#endif
|
|
260
|
+
#ifndef mrb_array_p
|
|
261
|
+
#define mrb_array_p(o) (mrb_type(o) == MRB_TT_ARRAY)
|
|
262
|
+
#endif
|
|
263
|
+
#ifndef mrb_string_p
|
|
264
|
+
#define mrb_string_p(o) (mrb_type(o) == MRB_TT_STRING)
|
|
265
|
+
#endif
|
|
266
|
+
#ifndef mrb_hash_p
|
|
267
|
+
#define mrb_hash_p(o) (mrb_type(o) == MRB_TT_HASH)
|
|
268
|
+
#endif
|
|
269
|
+
#ifndef mrb_cptr_p
|
|
270
|
+
#define mrb_cptr_p(o) (mrb_type(o) == MRB_TT_CPTR)
|
|
271
|
+
#endif
|
|
272
|
+
#ifndef mrb_exception_p
|
|
273
|
+
#define mrb_exception_p(o) (mrb_type(o) == MRB_TT_EXCEPTION)
|
|
274
|
+
#endif
|
|
275
|
+
#ifndef mrb_free_p
|
|
276
|
+
#define mrb_free_p(o) (mrb_type(o) == MRB_TT_FREE)
|
|
277
|
+
#endif
|
|
278
|
+
#ifndef mrb_object_p
|
|
279
|
+
#define mrb_object_p(o) (mrb_type(o) == MRB_TT_OBJECT)
|
|
280
|
+
#endif
|
|
281
|
+
#ifndef mrb_class_p
|
|
282
|
+
#define mrb_class_p(o) (mrb_type(o) == MRB_TT_CLASS)
|
|
283
|
+
#endif
|
|
284
|
+
#ifndef mrb_module_p
|
|
285
|
+
#define mrb_module_p(o) (mrb_type(o) == MRB_TT_MODULE)
|
|
286
|
+
#endif
|
|
287
|
+
#ifndef mrb_iclass_p
|
|
288
|
+
#define mrb_iclass_p(o) (mrb_type(o) == MRB_TT_ICLASS)
|
|
289
|
+
#endif
|
|
290
|
+
#ifndef mrb_sclass_p
|
|
291
|
+
#define mrb_sclass_p(o) (mrb_type(o) == MRB_TT_SCLASS)
|
|
292
|
+
#endif
|
|
293
|
+
#ifndef mrb_proc_p
|
|
294
|
+
#define mrb_proc_p(o) (mrb_type(o) == MRB_TT_PROC)
|
|
295
|
+
#endif
|
|
296
|
+
#ifndef mrb_range_p
|
|
297
|
+
#define mrb_range_p(o) (mrb_type(o) == MRB_TT_RANGE)
|
|
298
|
+
#endif
|
|
299
|
+
#ifndef mrb_env_p
|
|
300
|
+
#define mrb_env_p(o) (mrb_type(o) == MRB_TT_ENV)
|
|
301
|
+
#endif
|
|
302
|
+
#ifndef mrb_data_p
|
|
303
|
+
#define mrb_data_p(o) (mrb_type(o) == MRB_TT_CDATA)
|
|
304
|
+
#endif
|
|
305
|
+
#ifndef mrb_fiber_p
|
|
306
|
+
#define mrb_fiber_p(o) (mrb_type(o) == MRB_TT_FIBER)
|
|
307
|
+
#endif
|
|
308
|
+
#ifndef mrb_istruct_p
|
|
309
|
+
#define mrb_istruct_p(o) (mrb_type(o) == MRB_TT_ISTRUCT)
|
|
310
|
+
#endif
|
|
311
|
+
#ifndef mrb_break_p
|
|
312
|
+
#define mrb_break_p(o) (mrb_type(o) == MRB_TT_BREAK)
|
|
313
|
+
#endif
|
|
314
|
+
#ifndef mrb_bool
|
|
315
|
+
#define mrb_bool(o) (mrb_type(o) != MRB_TT_FALSE)
|
|
316
|
+
#endif
|
|
317
|
+
#define mrb_test(o) mrb_bool(o)
|
|
318
|
+
#ifndef mrb_bigint_p
|
|
319
|
+
#define mrb_bigint_p(o) (mrb_type(o) == MRB_TT_BIGINT)
|
|
320
|
+
#endif
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Returns a float in Ruby.
|
|
324
|
+
*
|
|
325
|
+
* Takes a float and boxes it into an mrb_value
|
|
326
|
+
*/
|
|
327
|
+
#ifndef MRB_NO_FLOAT
|
|
328
|
+
MRB_INLINE mrb_value
|
|
329
|
+
mrb_float_value(struct mrb_state *mrb, mrb_float f)
|
|
330
|
+
{
|
|
331
|
+
mrb_value v;
|
|
332
|
+
(void) mrb;
|
|
333
|
+
SET_FLOAT_VALUE(mrb, v, f);
|
|
334
|
+
return v;
|
|
335
|
+
}
|
|
336
|
+
#endif
|
|
337
|
+
|
|
338
|
+
MRB_INLINE mrb_value
|
|
339
|
+
mrb_cptr_value(struct mrb_state *mrb, void *p)
|
|
340
|
+
{
|
|
341
|
+
mrb_value v;
|
|
342
|
+
(void) mrb;
|
|
343
|
+
SET_CPTR_VALUE(mrb,v,p);
|
|
344
|
+
return v;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
/**
|
|
348
|
+
* Returns an integer in Ruby.
|
|
349
|
+
*/
|
|
350
|
+
MRB_INLINE mrb_value
|
|
351
|
+
mrb_int_value(struct mrb_state *mrb, mrb_int i)
|
|
352
|
+
{
|
|
353
|
+
mrb_value v;
|
|
354
|
+
SET_INT_VALUE(mrb, v, i);
|
|
355
|
+
return v;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
MRB_INLINE mrb_value
|
|
359
|
+
mrb_fixnum_value(mrb_int i)
|
|
360
|
+
{
|
|
361
|
+
mrb_value v;
|
|
362
|
+
SET_FIXNUM_VALUE(v, i);
|
|
363
|
+
return v;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
MRB_INLINE mrb_value
|
|
367
|
+
mrb_symbol_value(mrb_sym i)
|
|
368
|
+
{
|
|
369
|
+
mrb_value v;
|
|
370
|
+
SET_SYM_VALUE(v, i);
|
|
371
|
+
return v;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
MRB_INLINE mrb_value
|
|
375
|
+
mrb_obj_value(void *p)
|
|
376
|
+
{
|
|
377
|
+
mrb_value v;
|
|
378
|
+
SET_OBJ_VALUE(v, (struct RBasic*)p);
|
|
379
|
+
return v;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/**
|
|
383
|
+
* Get a nil mrb_value object.
|
|
384
|
+
*
|
|
385
|
+
* @return
|
|
386
|
+
* nil mrb_value object reference.
|
|
387
|
+
*/
|
|
388
|
+
MRB_INLINE mrb_value
|
|
389
|
+
mrb_nil_value(void)
|
|
390
|
+
{
|
|
391
|
+
mrb_value v;
|
|
392
|
+
SET_NIL_VALUE(v);
|
|
393
|
+
return v;
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
/**
|
|
397
|
+
* Returns false in Ruby.
|
|
398
|
+
*/
|
|
399
|
+
MRB_INLINE mrb_value
|
|
400
|
+
mrb_false_value(void)
|
|
401
|
+
{
|
|
402
|
+
mrb_value v;
|
|
403
|
+
SET_FALSE_VALUE(v);
|
|
404
|
+
return v;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* Returns true in Ruby.
|
|
409
|
+
*/
|
|
410
|
+
MRB_INLINE mrb_value
|
|
411
|
+
mrb_true_value(void)
|
|
412
|
+
{
|
|
413
|
+
mrb_value v;
|
|
414
|
+
SET_TRUE_VALUE(v);
|
|
415
|
+
return v;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
MRB_INLINE mrb_value
|
|
419
|
+
mrb_bool_value(mrb_bool boolean)
|
|
420
|
+
{
|
|
421
|
+
mrb_value v;
|
|
422
|
+
SET_BOOL_VALUE(v, boolean);
|
|
423
|
+
return v;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
MRB_INLINE mrb_value
|
|
427
|
+
mrb_undef_value(void)
|
|
428
|
+
{
|
|
429
|
+
mrb_value v;
|
|
430
|
+
SET_UNDEF_VALUE(v);
|
|
431
|
+
return v;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
#if defined(MRB_USE_CUSTOM_RO_DATA_P)
|
|
435
|
+
/* If you define `MRB_USE_CUSTOM_RO_DATA_P`, you must implement `mrb_ro_data_p()`. */
|
|
436
|
+
mrb_bool mrb_ro_data_p(const char *p);
|
|
437
|
+
#elif !defined(MRB_NO_DEFAULT_RO_DATA_P)
|
|
438
|
+
#if defined(MRB_USE_ETEXT_RO_DATA_P)
|
|
439
|
+
#define MRB_LINK_TIME_RO_DATA_P
|
|
440
|
+
extern char etext, edata;
|
|
441
|
+
static inline mrb_bool
|
|
442
|
+
mrb_ro_data_p(const char *p)
|
|
443
|
+
{
|
|
444
|
+
return &etext < p && p < &edata;
|
|
445
|
+
}
|
|
446
|
+
#elif defined(__APPLE__)
|
|
447
|
+
#define MRB_LINK_TIME_RO_DATA_P
|
|
448
|
+
#include <mach-o/getsect.h>
|
|
449
|
+
#include <crt_externs.h> // for _NSGetMachExecuteHeader
|
|
450
|
+
static inline mrb_bool
|
|
451
|
+
mrb_ro_data_p(const char *p)
|
|
452
|
+
{
|
|
453
|
+
#ifdef __LP64__
|
|
454
|
+
struct mach_header_64 *mhp;
|
|
455
|
+
#else
|
|
456
|
+
struct mach_header *mhp;
|
|
457
|
+
#endif
|
|
458
|
+
mhp = _NSGetMachExecuteHeader();
|
|
459
|
+
unsigned long textsize;
|
|
460
|
+
char *text = (char*)getsegmentdata(mhp, SEG_TEXT, &textsize);
|
|
461
|
+
return text <= p && p < text + textsize;
|
|
462
|
+
}
|
|
463
|
+
#endif /* Linux or macOS */
|
|
464
|
+
#endif /* MRB_NO_DEFAULT_RO_DATA_P */
|
|
465
|
+
#ifndef MRB_LINK_TIME_RO_DATA_P
|
|
466
|
+
# define mrb_ro_data_p(p) FALSE
|
|
467
|
+
#endif
|
|
468
|
+
|
|
469
|
+
MRB_END_DECL
|
|
470
|
+
|
|
471
|
+
#endif /* MRUBY_VALUE_H */
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
** @file mruby/variable.h - mruby variables
|
|
3
|
+
**
|
|
4
|
+
** See Copyright Notice in mruby.h
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#ifndef MRUBY_VARIABLE_H
|
|
8
|
+
#define MRUBY_VARIABLE_H
|
|
9
|
+
|
|
10
|
+
#if defined(__GNUC__) || defined(__clang__)
|
|
11
|
+
#define MRB_MEM_PREFETCH(addr) __builtin_prefetch(addr, 0, 1)
|
|
12
|
+
#else
|
|
13
|
+
#define MRB_MEM_PREFETCH(addr)
|
|
14
|
+
#endif
|
|
15
|
+
|
|
16
|
+
#include "common.h"
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Functions to access mruby variables.
|
|
20
|
+
*/
|
|
21
|
+
MRB_BEGIN_DECL
|
|
22
|
+
|
|
23
|
+
MRB_API mrb_value mrb_const_get(mrb_state*, mrb_value, mrb_sym);
|
|
24
|
+
MRB_API void mrb_const_set(mrb_state*, mrb_value, mrb_sym, mrb_value);
|
|
25
|
+
MRB_API mrb_bool mrb_const_defined(mrb_state*, mrb_value, mrb_sym);
|
|
26
|
+
MRB_API void mrb_const_remove(mrb_state*, mrb_value, mrb_sym);
|
|
27
|
+
|
|
28
|
+
MRB_API mrb_bool mrb_iv_name_sym_p(mrb_state *mrb, mrb_sym sym);
|
|
29
|
+
MRB_API void mrb_iv_name_sym_check(mrb_state *mrb, mrb_sym sym);
|
|
30
|
+
MRB_API mrb_value mrb_obj_iv_get(mrb_state *mrb, struct RObject *obj, mrb_sym sym);
|
|
31
|
+
MRB_API void mrb_obj_iv_set(mrb_state *mrb, struct RObject *obj, mrb_sym sym, mrb_value v);
|
|
32
|
+
MRB_API mrb_bool mrb_obj_iv_defined(mrb_state *mrb, struct RObject *obj, mrb_sym sym);
|
|
33
|
+
MRB_API mrb_value mrb_iv_get(mrb_state *mrb, mrb_value obj, mrb_sym sym);
|
|
34
|
+
MRB_API void mrb_iv_set(mrb_state *mrb, mrb_value obj, mrb_sym sym, mrb_value v);
|
|
35
|
+
MRB_API mrb_bool mrb_iv_defined(mrb_state*, mrb_value, mrb_sym);
|
|
36
|
+
MRB_API mrb_value mrb_iv_remove(mrb_state *mrb, mrb_value obj, mrb_sym sym);
|
|
37
|
+
MRB_API void mrb_iv_copy(mrb_state *mrb, mrb_value dst, mrb_value src);
|
|
38
|
+
MRB_API mrb_bool mrb_const_defined_at(mrb_state *mrb, mrb_value mod, mrb_sym id);
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Get a global variable. Will return nil if the var does not exist
|
|
42
|
+
*
|
|
43
|
+
* Example:
|
|
44
|
+
*
|
|
45
|
+
* !!!ruby
|
|
46
|
+
* # Ruby style
|
|
47
|
+
* var = $value
|
|
48
|
+
*
|
|
49
|
+
* !!!c
|
|
50
|
+
* // C style
|
|
51
|
+
* mrb_sym sym = mrb_intern_lit(mrb, "$value");
|
|
52
|
+
* mrb_value var = mrb_gv_get(mrb, sym);
|
|
53
|
+
*
|
|
54
|
+
* @param mrb The mruby state reference
|
|
55
|
+
* @param sym The name of the global variable
|
|
56
|
+
* @return The value of that global variable. May be nil
|
|
57
|
+
*/
|
|
58
|
+
MRB_API mrb_value mrb_gv_get(mrb_state *mrb, mrb_sym sym);
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* Set a global variable
|
|
62
|
+
*
|
|
63
|
+
* Example:
|
|
64
|
+
*
|
|
65
|
+
* !!!ruby
|
|
66
|
+
* # Ruby style
|
|
67
|
+
* $value = "foo"
|
|
68
|
+
*
|
|
69
|
+
* !!!c
|
|
70
|
+
* // C style
|
|
71
|
+
* mrb_sym sym = mrb_intern_lit(mrb, "$value");
|
|
72
|
+
* mrb_gv_set(mrb, sym, mrb_str_new_lit("foo"));
|
|
73
|
+
*
|
|
74
|
+
* @param mrb The mruby state reference
|
|
75
|
+
* @param sym The name of the global variable
|
|
76
|
+
* @param val The value of the global variable
|
|
77
|
+
*/
|
|
78
|
+
MRB_API void mrb_gv_set(mrb_state *mrb, mrb_sym sym, mrb_value val);
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Remove a global variable.
|
|
82
|
+
*
|
|
83
|
+
* Example:
|
|
84
|
+
*
|
|
85
|
+
* # Ruby style
|
|
86
|
+
* $value = nil
|
|
87
|
+
*
|
|
88
|
+
* // C style
|
|
89
|
+
* mrb_sym sym = mrb_intern_lit(mrb, "$value");
|
|
90
|
+
* mrb_gv_remove(mrb, sym);
|
|
91
|
+
*
|
|
92
|
+
* @param mrb The mruby state reference
|
|
93
|
+
* @param sym The name of the global variable
|
|
94
|
+
*/
|
|
95
|
+
MRB_API void mrb_gv_remove(mrb_state *mrb, mrb_sym sym);
|
|
96
|
+
|
|
97
|
+
MRB_API mrb_value mrb_cv_get(mrb_state *mrb, mrb_value mod, mrb_sym sym);
|
|
98
|
+
MRB_API void mrb_mod_cv_set(mrb_state *mrb, struct RClass * c, mrb_sym sym, mrb_value v);
|
|
99
|
+
MRB_API void mrb_cv_set(mrb_state *mrb, mrb_value mod, mrb_sym sym, mrb_value v);
|
|
100
|
+
MRB_API mrb_bool mrb_cv_defined(mrb_state *mrb, mrb_value mod, mrb_sym sym);
|
|
101
|
+
|
|
102
|
+
/* return non zero to break the loop */
|
|
103
|
+
typedef int (mrb_iv_foreach_func)(mrb_state*,mrb_sym,mrb_value,void*);
|
|
104
|
+
MRB_API void mrb_iv_foreach(mrb_state *mrb, mrb_value obj, mrb_iv_foreach_func *func, void *p);
|
|
105
|
+
|
|
106
|
+
MRB_END_DECL
|
|
107
|
+
|
|
108
|
+
#endif /* MRUBY_VARIABLE_H */
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
** @file mruby/version.h - mruby version definition
|
|
3
|
+
**
|
|
4
|
+
** See Copyright Notice in mruby.h
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#ifndef MRUBY_VERSION_H
|
|
8
|
+
#define MRUBY_VERSION_H
|
|
9
|
+
|
|
10
|
+
#include "common.h"
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* mruby version definition macros
|
|
14
|
+
*/
|
|
15
|
+
MRB_BEGIN_DECL
|
|
16
|
+
|
|
17
|
+
/*
|
|
18
|
+
* A passed in expression.
|
|
19
|
+
*/
|
|
20
|
+
#define MRB_STRINGIZE0(expr) #expr
|
|
21
|
+
|
|
22
|
+
/*
|
|
23
|
+
* Passes in an expression to MRB_STRINGIZE0.
|
|
24
|
+
*/
|
|
25
|
+
#define MRB_STRINGIZE(expr) MRB_STRINGIZE0(expr)
|
|
26
|
+
|
|
27
|
+
/*
|
|
28
|
+
* The version of Ruby used by mruby.
|
|
29
|
+
*/
|
|
30
|
+
#define MRUBY_RUBY_VERSION "3.4"
|
|
31
|
+
|
|
32
|
+
/*
|
|
33
|
+
* Ruby engine.
|
|
34
|
+
*/
|
|
35
|
+
#define MRUBY_RUBY_ENGINE "mruby"
|
|
36
|
+
|
|
37
|
+
/*
|
|
38
|
+
* Major release version number.
|
|
39
|
+
*/
|
|
40
|
+
#define MRUBY_RELEASE_MAJOR 3
|
|
41
|
+
|
|
42
|
+
/*
|
|
43
|
+
* Minor release version number.
|
|
44
|
+
*/
|
|
45
|
+
#define MRUBY_RELEASE_MINOR 4
|
|
46
|
+
|
|
47
|
+
/*
|
|
48
|
+
* Tiny release version number.
|
|
49
|
+
*/
|
|
50
|
+
#define MRUBY_RELEASE_TEENY 0
|
|
51
|
+
|
|
52
|
+
/*
|
|
53
|
+
* Patch level.
|
|
54
|
+
*/
|
|
55
|
+
#define MRUBY_PATCHLEVEL -1
|
|
56
|
+
|
|
57
|
+
/*
|
|
58
|
+
* Patch level string. (optional)
|
|
59
|
+
*/
|
|
60
|
+
#define MRUBY_PATCHLEVEL_STR ""
|
|
61
|
+
|
|
62
|
+
#ifndef MRUBY_PATCHLEVEL_STR
|
|
63
|
+
# if MRUBY_PATCHLEVEL < 0
|
|
64
|
+
# define MRUBY_PATCHLEVEL_STR "dev"
|
|
65
|
+
# else
|
|
66
|
+
# define MRUBY_PATCHLEVEL_STR "p"MRB_STRINGIZE(MRUBY_PATCHLEVEL)
|
|
67
|
+
# endif
|
|
68
|
+
#endif
|
|
69
|
+
|
|
70
|
+
/*
|
|
71
|
+
* The mruby version.
|
|
72
|
+
*/
|
|
73
|
+
#define MRUBY_VERSION MRB_STRINGIZE(MRUBY_RELEASE_MAJOR) "." MRB_STRINGIZE(MRUBY_RELEASE_MINOR) "." MRB_STRINGIZE(MRUBY_RELEASE_TEENY)
|
|
74
|
+
|
|
75
|
+
/*
|
|
76
|
+
* Release number.
|
|
77
|
+
*/
|
|
78
|
+
#define MRUBY_RELEASE_NO (MRUBY_RELEASE_MAJOR * 100 * 100 + MRUBY_RELEASE_MINOR * 100 + MRUBY_RELEASE_TEENY)
|
|
79
|
+
|
|
80
|
+
/*
|
|
81
|
+
* Release year.
|
|
82
|
+
*/
|
|
83
|
+
#define MRUBY_RELEASE_YEAR 2025
|
|
84
|
+
|
|
85
|
+
/*
|
|
86
|
+
* Release month.
|
|
87
|
+
*/
|
|
88
|
+
#define MRUBY_RELEASE_MONTH 4
|
|
89
|
+
|
|
90
|
+
/*
|
|
91
|
+
* Release day.
|
|
92
|
+
*/
|
|
93
|
+
#define MRUBY_RELEASE_DAY 20
|
|
94
|
+
|
|
95
|
+
/*
|
|
96
|
+
* Release date as a string.
|
|
97
|
+
*/
|
|
98
|
+
#define MRUBY_RELEASE_DATE \
|
|
99
|
+
MRUBY_RELEASE_YEAR_STR "-" \
|
|
100
|
+
MRUBY_RELEASE_MONTH_STR "-" \
|
|
101
|
+
MRUBY_RELEASE_DAY_STR
|
|
102
|
+
#define MRUBY_RELEASE_YEAR_STR MRB_STRINGIZE(MRUBY_RELEASE_YEAR)
|
|
103
|
+
#if MRUBY_RELEASE_MONTH < 10
|
|
104
|
+
#define MRUBY_RELEASE_MONTH_STR "0" MRB_STRINGIZE(MRUBY_RELEASE_MONTH)
|
|
105
|
+
#else
|
|
106
|
+
#define MRUBY_RELEASE_MONTH_STR MRB_STRINGIZE(MRUBY_RELEASE_MONTH)
|
|
107
|
+
#endif
|
|
108
|
+
#if MRUBY_RELEASE_DAY < 10
|
|
109
|
+
#define MRUBY_RELEASE_DAY_STR "0" MRB_STRINGIZE(MRUBY_RELEASE_DAY)
|
|
110
|
+
#else
|
|
111
|
+
#define MRUBY_RELEASE_DAY_STR MRB_STRINGIZE(MRUBY_RELEASE_DAY)
|
|
112
|
+
#endif
|
|
113
|
+
|
|
114
|
+
/*
|
|
115
|
+
* The year mruby was first created.
|
|
116
|
+
*/
|
|
117
|
+
#define MRUBY_BIRTH_YEAR 2010
|
|
118
|
+
|
|
119
|
+
/*
|
|
120
|
+
* mruby's authors.
|
|
121
|
+
*/
|
|
122
|
+
#define MRUBY_AUTHOR "mruby developers"
|
|
123
|
+
|
|
124
|
+
/*
|
|
125
|
+
* mruby's version, and release date.
|
|
126
|
+
*/
|
|
127
|
+
#define MRUBY_DESCRIPTION \
|
|
128
|
+
"mruby " MRUBY_VERSION \
|
|
129
|
+
MRUBY_PATCHLEVEL_STR \
|
|
130
|
+
" (" MRUBY_RELEASE_DATE ")" \
|
|
131
|
+
|
|
132
|
+
/*
|
|
133
|
+
* mruby's copyright information.
|
|
134
|
+
*/
|
|
135
|
+
#define MRUBY_COPYRIGHT \
|
|
136
|
+
"mruby - Copyright (c) " \
|
|
137
|
+
MRB_STRINGIZE(MRUBY_BIRTH_YEAR)"-" \
|
|
138
|
+
MRB_STRINGIZE(MRUBY_RELEASE_YEAR)" " \
|
|
139
|
+
MRUBY_AUTHOR \
|
|
140
|
+
|
|
141
|
+
MRB_END_DECL
|
|
142
|
+
|
|
143
|
+
#endif /* MRUBY_VERSION_H */
|