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.
Files changed (57) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +195 -0
  3. data/exe/portable-mruby +6 -0
  4. data/lib/portable_mruby/binary_manager.rb +225 -0
  5. data/lib/portable_mruby/builder.rb +97 -0
  6. data/lib/portable_mruby/bytecode_compiler.rb +19 -0
  7. data/lib/portable_mruby/c_generator.rb +94 -0
  8. data/lib/portable_mruby/cli.rb +136 -0
  9. data/lib/portable_mruby/version.rb +6 -0
  10. data/lib/portable_mruby.rb +15 -0
  11. data/vendor/mruby/bin/mrbc.com +0 -0
  12. data/vendor/mruby/include/mrbconf.h +230 -0
  13. data/vendor/mruby/include/mruby/array.h +303 -0
  14. data/vendor/mruby/include/mruby/boxing_nan.h +169 -0
  15. data/vendor/mruby/include/mruby/boxing_no.h +59 -0
  16. data/vendor/mruby/include/mruby/boxing_word.h +251 -0
  17. data/vendor/mruby/include/mruby/class.h +104 -0
  18. data/vendor/mruby/include/mruby/common.h +118 -0
  19. data/vendor/mruby/include/mruby/compile.h +185 -0
  20. data/vendor/mruby/include/mruby/data.h +76 -0
  21. data/vendor/mruby/include/mruby/debug.h +75 -0
  22. data/vendor/mruby/include/mruby/dump.h +159 -0
  23. data/vendor/mruby/include/mruby/endian.h +44 -0
  24. data/vendor/mruby/include/mruby/error.h +132 -0
  25. data/vendor/mruby/include/mruby/gc.h +72 -0
  26. data/vendor/mruby/include/mruby/gems/mruby-dir/include/dir_hal.h +79 -0
  27. data/vendor/mruby/include/mruby/gems/mruby-io/include/io_hal.h +451 -0
  28. data/vendor/mruby/include/mruby/gems/mruby-io/include/mruby/ext/io.h +76 -0
  29. data/vendor/mruby/include/mruby/gems/mruby-socket/include/socket_hal.h +83 -0
  30. data/vendor/mruby/include/mruby/gems/mruby-time/include/mruby/time.h +27 -0
  31. data/vendor/mruby/include/mruby/hash.h +234 -0
  32. data/vendor/mruby/include/mruby/internal.h +274 -0
  33. data/vendor/mruby/include/mruby/irep.h +142 -0
  34. data/vendor/mruby/include/mruby/istruct.h +50 -0
  35. data/vendor/mruby/include/mruby/khash.h +455 -0
  36. data/vendor/mruby/include/mruby/mempool.h +19 -0
  37. data/vendor/mruby/include/mruby/numeric.h +174 -0
  38. data/vendor/mruby/include/mruby/object.h +45 -0
  39. data/vendor/mruby/include/mruby/opcode.h +69 -0
  40. data/vendor/mruby/include/mruby/ops.h +120 -0
  41. data/vendor/mruby/include/mruby/presym/disable.h +72 -0
  42. data/vendor/mruby/include/mruby/presym/enable.h +39 -0
  43. data/vendor/mruby/include/mruby/presym/id.h +1423 -0
  44. data/vendor/mruby/include/mruby/presym/scanning.h +81 -0
  45. data/vendor/mruby/include/mruby/presym/table.h +2847 -0
  46. data/vendor/mruby/include/mruby/presym.h +41 -0
  47. data/vendor/mruby/include/mruby/proc.h +186 -0
  48. data/vendor/mruby/include/mruby/range.h +77 -0
  49. data/vendor/mruby/include/mruby/re.h +16 -0
  50. data/vendor/mruby/include/mruby/string.h +428 -0
  51. data/vendor/mruby/include/mruby/throw.h +57 -0
  52. data/vendor/mruby/include/mruby/value.h +471 -0
  53. data/vendor/mruby/include/mruby/variable.h +108 -0
  54. data/vendor/mruby/include/mruby/version.h +143 -0
  55. data/vendor/mruby/include/mruby.h +1614 -0
  56. data/vendor/mruby/lib/libmruby.a +0 -0
  57. 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 */