36#define __STDC_LIMIT_MACROS
37#define __STDC_CONSTANT_MACROS
38#define __STDC_FORMAT_MACROS
48#error Must be placed `#include <mruby.h>` before `#include <stdint.h>`
52#define SIZE_MAX __SIZE_MAX__
54#define SIZE_MAX std::numeric_limits<size_t>::max()
60# define __func__ __FUNCTION__
65#define mrb_assert(p) assert(p)
66#define mrb_assert_int_fit(t1,n,t2,max) assert((n)>=0 && ((sizeof(n)<=sizeof(t2))||(n<=(t1)(max))))
68#define mrb_assert(p) ((void)0)
69#define mrb_assert_int_fit(t1,n,t2,max) ((void)0)
72#if (defined __cplusplus && __cplusplus >= 201703L)
73# define mrb_static_assert(...) static_assert(__VA_ARGS__)
74# define mrb_static_assert1(exp) static_assert(exp)
75# define mrb_static_assert2(exp, str) static_assert(exp, str)
76#elif (defined __cplusplus && __cplusplus >= 201103L) || \
77 (defined _MSC_VER) || \
78 (defined __GXX_EXPERIMENTAL_CXX0X__)
79# define mrb_static_assert2(exp, str) static_assert(exp, str)
80#elif defined __STDC_VERSION__ && \
81 ((__STDC_VERSION__ >= 201112L) || \
82 (defined __GNUC__ && __GNUC__ * 100 + __GNUC_MINOR__ >= 406))
83# define mrb_static_assert2(exp, str) _Static_assert(exp, str)
86# define _mrb_static_assert_cat0(a, b) a##b
87# define _mrb_static_assert_cat(a, b) _mrb_static_assert_cat0(a, b)
89# define _mrb_static_assert_id(prefix) _mrb_static_assert_cat(prefix, __COUNTER__)
91# define _mrb_static_assert_id(prefix) _mrb_static_assert_cat(prefix, __LINE__)
93# define mrb_static_assert2(exp, str) \
94 struct _mrb_static_assert_id(_mrb_static_assert_) { char x[(exp) ? 1 : -1]; }
97#ifndef mrb_static_assert
98# define mrb_static_assert1(exp) mrb_static_assert2(exp, #exp)
99# define mrb_static_assert_expand(...) __VA_ARGS__
100# define mrb_static_assert_selector(a, b, name, ...) name
108# define mrb_static_assert(...) \
109 mrb_static_assert_expand(mrb_static_assert_selector(__VA_ARGS__, mrb_static_assert2, mrb_static_assert1, _)(__VA_ARGS__))
112#define mrb_static_assert_powerof2(num) mrb_static_assert((num) > 0 && (num) == ((num) & -(num)), "need power of 2 for " #num)
125#define FLT_EPSILON (1.19209290e-07f)
128#define DBL_EPSILON ((double)2.22044604925031308085e-16L)
131#define LDBL_EPSILON (1.08420217248550443401e-19L)
134#ifdef MRB_USE_FLOAT32
135#define MRB_FLOAT_EPSILON FLT_EPSILON
137#define MRB_FLOAT_EPSILON DBL_EPSILON
169typedef void* (*mrb_allocf) (
struct mrb_state *mrb,
void *ptr,
size_t size,
void *ud);
171#ifndef MRB_FIXED_STATE_ATEXIT_STACK_SIZE
172#define MRB_FIXED_STATE_ATEXIT_STACK_SIZE 5
180 const struct RProc *proc;
186 struct RClass *target_class;
190enum mrb_fiber_state {
191 MRB_FIBER_CREATED = 0,
195 MRB_FIBER_TRANSFERRED,
196 MRB_FIBER_TERMINATED,
207 enum mrb_fiber_state status : 4;
212#ifdef MRB_METHOD_CACHE_SIZE
213# undef MRB_NO_METHOD_CACHE
214mrb_static_assert_powerof2(MRB_METHOD_CACHE_SIZE);
218# define MRB_METHOD_CACHE_SIZE (1<<8)
232#ifndef MRB_USE_METHOD_T_STRUCT
233typedef uintptr_t mrb_method_t;
244#ifndef MRB_NO_METHOD_CACHE
254typedef void (*mrb_atexit_func)(
struct mrb_state*);
269 struct RClass *object_class;
270 struct RClass *class_class;
271 struct RClass *module_class;
272 struct RClass *proc_class;
273 struct RClass *string_class;
274 struct RClass *array_class;
275 struct RClass *hash_class;
276 struct RClass *range_class;
279 struct RClass *float_class;
281 struct RClass *integer_class;
282 struct RClass *true_class;
283 struct RClass *false_class;
285 struct RClass *symbol_class;
286 struct RClass *kernel_module;
290#ifndef MRB_NO_METHOD_CACHE
300#ifndef MRB_USE_ALL_SYMBOLS
304#ifdef MRB_USE_DEBUG_HOOK
309#ifdef MRB_BYTECODE_DECODE_OPTION
313 struct RClass *eException_class;
314 struct RClass *eStandardError_class;
317#ifdef MRB_GC_FIXED_ARENA
323#ifdef MRB_FIXED_STATE_ATEXIT_STACK
324 mrb_atexit_func atexit_stack[MRB_FIXED_STATE_ATEXIT_STACK_SIZE];
326 mrb_atexit_func *atexit_stack;
328 uint16_t atexit_stack_len;
734#define mrb_exc_get(mrb, name) mrb_exc_get_id(mrb, mrb_intern_cstr(mrb, name))
877#define MRB_ARGS_REQ(n) ((mrb_aspec)((n)&0x1f) << 18)
885#define MRB_ARGS_OPT(n) ((mrb_aspec)((n)&0x1f) << 13)
895#define MRB_ARGS_ARG(n1,n2) (MRB_ARGS_REQ(n1)|MRB_ARGS_OPT(n2))
898#define MRB_ARGS_REST() ((mrb_aspec)(1 << 12))
901#define MRB_ARGS_POST(n) ((mrb_aspec)((n)&0x1f) << 7)
904#define MRB_ARGS_KEY(n1,n2) ((mrb_aspec)((((n1)&0x1f) << 2) | ((n2)?(1<<1):0)))
909#define MRB_ARGS_BLOCK() ((mrb_aspec)1)
914#define MRB_ARGS_ANY() MRB_ARGS_REST()
919#define MRB_ARGS_NONE() ((mrb_aspec)0)
1039 return mrb->c->ci->mid;
1075#define mrb_strlen_lit(lit) (sizeof(lit "") - 1)
1164#define mrb_intern_lit(mrb, lit) mrb_intern_static(mrb, (lit ""), mrb_strlen_lit(lit))
1179#define mrb_sym2name(mrb,sym) mrb_sym_name(mrb,sym)
1180#define mrb_sym2name_len(mrb,sym,len) mrb_sym_name_len(mrb,sym,len)
1181#define mrb_sym2str(mrb,sym) mrb_sym_str(mrb,sym)
1200#define MRB_OBJ_ALLOC(mrb, tt, klass) ((MRB_VTYPE_TYPEOF(tt)*)mrb_obj_alloc(mrb, tt, klass))
1209#define mrb_str_new_lit(mrb, lit) mrb_str_new_static(mrb, (lit), mrb_strlen_lit(lit))
1212#define mrb_str_new_frozen(mrb,p,len) mrb_obj_freeze(mrb,mrb_str_new(mrb,p,len))
1213#define mrb_str_new_cstr_frozen(mrb,p) mrb_obj_freeze(mrb,mrb_str_new_cstr(mrb,p))
1214#define mrb_str_new_static_frozen(mrb,p,len) mrb_obj_freeze(mrb,mrb_str_new_static(mrb,p,len))
1215#define mrb_str_new_lit_frozen(mrb,lit) mrb_obj_freeze(mrb,mrb_str_new_lit(mrb,lit))
1218MRB_API char* mrb_utf8_from_locale(
const char *p,
int len);
1219MRB_API char* mrb_locale_from_utf8(
const char *p,
int len);
1220#define mrb_locale_free(p) free(p)
1221#define mrb_utf8_free(p) free(p)
1223#define mrb_utf8_from_locale(p, l) ((char*)(p))
1224#define mrb_locale_from_utf8(p, l) ((char*)(p))
1225#define mrb_locale_free(p)
1226#define mrb_utf8_free(p)
1284#define mrb_toplevel_run_keep(m,p,k) mrb_top_run((m),(p),mrb_top_self(m),(k))
1285#define mrb_toplevel_run(m,p) mrb_toplevel_run_keep((m),(p),0)
1286#define mrb_context_run(m,p,s,k) mrb_vm_run((m),(p),(s),(k))
1297#define mrb_as_float(mrb, x) mrb_float(mrb_ensure_float_type(mrb, x))
1299#define mrb_to_float(mrb, val) mrb_ensure_float_type(mrb, val)
1306#define mrb_gc_arena_save(mrb) ((mrb)->gc.arena_idx)
1307#define mrb_gc_arena_restore(mrb, idx) ((mrb)->gc.arena_idx = (idx))
1313#define mrb_gc_mark_value(mrb,val) do {\
1314 if (!mrb_immediate_p(val)) mrb_gc_mark((mrb), mrb_basic_ptr(val)); \
1317#define mrb_field_write_barrier_value(mrb, obj, val) do{\
1318 if (!mrb_immediate_p(val)) mrb_field_write_barrier((mrb), (obj), mrb_basic_ptr(val)); \
1323#define mrb_convert_type(mrb, val, type, tname, method) mrb_type_convert(mrb, val, type, mrb_intern_lit(mrb, method))
1325#define mrb_check_convert_type(mrb, val, type, tname, method) mrb_type_convert_check(mrb, val, type, mrb_intern_lit(mrb, method))
1336#define ISASCII(c) ((unsigned)(c) <= 0x7f)
1337#define ISPRINT(c) (((unsigned)(c) - 0x20) < 0x5f)
1338#define ISSPACE(c) ((c) == ' ' || (unsigned)(c) - '\t' < 5)
1339#define ISUPPER(c) (((unsigned)(c) - 'A') < 26)
1340#define ISLOWER(c) (((unsigned)(c) - 'a') < 26)
1341#define ISALPHA(c) ((((unsigned)(c) | 0x20) - 'a') < 26)
1342#define ISDIGIT(c) (((unsigned)(c) - '0') < 10)
1343#define ISXDIGIT(c) (ISDIGIT(c) || ((unsigned)(c) | 0x20) - 'a' < 6)
1344#define ISALNUM(c) (ISALPHA(c) || ISDIGIT(c))
1345#define ISBLANK(c) ((c) == ' ' || (c) == '\t')
1346#define ISCNTRL(c) ((unsigned)(c) < 0x20 || (c) == 0x7f)
1347#define TOUPPER(c) (ISLOWER(c) ? ((c) & 0x5f) : (c))
1348#define TOLOWER(c) (ISUPPER(c) ? ((c) | 0x20) : (c))
1371#define MRB_ERROR_SYM(sym) mrb_intern_lit(mrb, #sym)
1372#define E_EXCEPTION mrb->eException_class
1373#define E_STANDARD_ERROR mrb->eStandardError_class
1374#define E_RUNTIME_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(RuntimeError))
1375#define E_TYPE_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(TypeError))
1376#define E_ZERODIV_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(ZeroDivisionError))
1377#define E_ARGUMENT_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(ArgumentError))
1378#define E_INDEX_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(IndexError))
1379#define E_RANGE_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(RangeError))
1380#define E_NAME_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(NameError))
1381#define E_NOMETHOD_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(NoMethodError))
1382#define E_SCRIPT_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(ScriptError))
1383#define E_SYNTAX_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(SyntaxError))
1384#define E_LOCALJUMP_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(LocalJumpError))
1385#define E_REGEXP_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(RegexpError))
1386#define E_FROZEN_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(FrozenError))
1387#define E_NOTIMP_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(NotImplementedError))
1388#define E_KEY_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(KeyError))
1390# define E_FLOATDOMAIN_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(FloatDomainError))
1417#define mrb_string_type(mrb, str) mrb_ensure_string_type(mrb,str)
1418#define mrb_to_str(mrb, str) mrb_ensure_string_type(mrb,str)
1420#define mrb_str_to_str(mrb, str) mrb_obj_as_string(mrb, str)
1425#define mrb_as_int(mrb, val) mrb_integer(mrb_ensure_int_type(mrb, val))
1427#define mrb_to_integer(mrb, val) mrb_ensure_int_type(mrb, val)
1428#define mrb_to_int(mrb, val) mrb_ensure_int_type(mrb, val)
1446#define mrb_int(mrb, val) mrb_as_int(mrb, val)
1492#define E_FIBER_ERROR mrb_exc_get_id(mrb, MRB_ERROR_SYM(FiberError))
1500MRB_API void* mrb_pool_realloc(
struct mrb_pool*,
void*,
size_t oldlen,
size_t newlen);
1512#ifdef MRB_PRESYM_SCANNING
1513# include <mruby/presym/scanning.h>
1522mrbmemcpy(
void *dst,
const void *src,
size_t n)
1524 char *d = (
char*)dst;
1525 const char *s = (
const char*)src;
1530#define memcpy(a,b,c) mrbmemcpy(a,b,c)
1533mrbmemset(
void *s,
int c,
size_t n)
1540#define memset(a,b,c) mrbmemset(a,b,c)
Specifies the number of arguments a function takes.
mruby common platform definition"
#define MRB_INLINE
Declare a function as always inlined.
Definition common.h:68
#define MRB_END_DECL
End declarations in C mode.
Definition common.h:28
#define MRB_BEGIN_DECL
Start declarations in C mode.
Definition common.h:26
#define MRB_API
Declare a public mruby API function.
Definition common.h:79
#define mrb_noreturn
Shared compiler macros.
Definition common.h:50
garbage collector for mruby
mrb_state * mrb_open_core(mrb_allocf f, void *ud)
Create new mrb_state with just the mruby core.
Definition state.c:39
void mrb_prepend_module(mrb_state *mrb, struct RClass *cla, struct RClass *prepended)
Prepends a module in another class or module.
Definition class.c:1528
mrb_value mrb_fiber_new(mrb_state *mrb, const struct RProc *proc)
Create a new Fiber from proc object.
mrb_value mrb_fiber_alive_p(mrb_state *mrb, mrb_value fib)
Check if a Fiber is alive.
mrb_int mrb_get_argc(mrb_state *mrb)
Retrieve number of arguments from mrb_state.
Definition class.c:856
void *(* mrb_allocf)(struct mrb_state *mrb, void *ptr, size_t size, void *ud)
Function pointer type of custom allocator used in.
Definition mruby.h:169
void * mrb_default_allocf(mrb_state *, void *, size_t, void *)
The default allocation function.
Definition allocf.c:19
mrb_value mrb_fiber_yield(mrb_state *mrb, mrb_int argc, const mrb_value *argv)
Yield a Fiber.
mrb_value mrb_funcall(mrb_state *mrb, mrb_value val, const char *name, mrb_int argc,...)
Call existing ruby functions.
Definition vm.c:495
struct RClass * mrb_module_new(mrb_state *mrb)
Creates a new module, Module.
Definition class.c:2221
mrb_state * mrb_open_allocf(mrb_allocf f, void *ud)
Create new mrb_state with custom allocators.
Definition state.c:78
struct RClass * mrb_define_module(mrb_state *mrb, const char *name)
Defines a new module.
Definition class.c:483
mrb_value mrb_obj_dup(mrb_state *mrb, mrb_value obj)
Duplicate an object.
Definition class.c:2867
mrb_value mrb_funcall_argv(mrb_state *mrb, mrb_value val, mrb_sym name, mrb_int argc, const mrb_value *argv)
Call existing ruby functions.
Definition vm.c:726
mrb_value mrb_obj_new(mrb_state *mrb, struct RClass *c, mrb_int argc, const mrb_value *argv)
Initialize a new object instance of c class.
Definition class.c:1992
void mrb_define_const(mrb_state *mrb, struct RClass *cla, const char *name, mrb_value val)
Defines a constant.
Definition variable.c:871
const mrb_value * mrb_get_argv(mrb_state *mrb)
Retrieve an array of arguments from mrb_state.
Definition class.c:869
void mrb_undef_method(mrb_state *mrb, struct RClass *cla, const char *name)
Undefines a method.
Definition class.c:2348
uint8_t mrb_code
mruby C API entry point
Definition mruby.h:146
mrb_int mrb_get_args_a(mrb_state *mrb, mrb_args_format format, void **ptr)
Array version of mrb_get_args()
Definition class.c:1376
void mrb_define_alias(mrb_state *mrb, struct RClass *c, const char *a, const char *b)
Definition class.c:2277
mrb_bool mrb_class_defined_under(mrb_state *mrb, struct RClass *outer, const char *name)
Returns an mrb_bool.
Definition class.c:643
mrb_value mrb_get_arg1(mrb_state *mrb)
Retrieve the first and only argument from mrb_state.
Definition class.c:882
mrb_value mrb_fiber_resume(mrb_state *mrb, mrb_value fib, mrb_int argc, const mrb_value *argv)
Resume a Fiber.
struct RClass * mrb_define_class(mrb_state *mrb, const char *name, struct RClass *super)
Defines a new class.
Definition class.c:560
mrb_int mrb_get_args(mrb_state *mrb, mrb_args_format format,...)
Retrieve arguments from mrb_state.
Definition class.c:1366
mrb_state * mrb_open(void)
Creates new mrb_state.
Definition state.c:62
void mrb_include_module(mrb_state *mrb, struct RClass *cla, struct RClass *included)
Include a module in another class or module.
Definition class.c:1487
struct RClass * mrb_class_get_under(mrb_state *mrb, struct RClass *outer, const char *name)
Gets a child class.
Definition class.c:657
struct RClass * mrb_class_new(mrb_state *mrb, struct RClass *super)
Creates a new instance of Class, Class.
Definition class.c:2200
mrb_bool mrb_block_given_p(mrb_state *mrb)
Check if a block argument is given from mrb_state.
Definition class.c:905
void mrb_define_module_function(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t fun, mrb_aspec aspec)
Defines a module function.
Definition class.c:1736
void mrb_close(mrb_state *mrb)
Closes and frees a mrb_state.
Definition state.c:179
mrb_value mrb_str_new_cstr(mrb_state *, const char *)
Turns a C string into a Ruby string value.
Definition string.c:190
static mrb_value mrb_class_new_instance(mrb_state *mrb, mrb_int argc, const mrb_value *argv, struct RClass *c)
Definition mruby.h:647
void mrb_define_singleton_method(mrb_state *mrb, struct RObject *cla, const char *name, mrb_func_t fun, mrb_aspec aspec)
Defines a singleton method.
Definition class.c:1703
mrb_bool mrb_class_defined(mrb_state *mrb, const char *name)
Returns an mrb_bool.
Definition class.c:629
void mrb_define_method(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t func, mrb_aspec aspec)
Defines a global function in ruby.
Definition class.c:820
struct RClass * mrb_exc_get_id(mrb_state *mrb, mrb_sym name)
Gets a exception class.
Definition class.c:681
mrb_value mrb_singleton_class(mrb_state *mrb, mrb_value val)
Returns the singleton class of an object.
Definition class.c:1692
struct RClass * mrb_define_class_under(mrb_state *mrb, struct RClass *outer, const char *name, struct RClass *super)
Defines a new class under a given module.
Definition class.c:755
struct RClass * mrb_singleton_class_ptr(mrb_state *mrb, mrb_value val)
Returns the singleton class of an object.
Definition class.c:1664
mrb_value mrb_funcall_with_block(mrb_state *mrb, mrb_value val, mrb_sym name, mrb_int argc, const mrb_value *argv, mrb_value block)
Call existing ruby functions with a block.
Definition vm.c:656
struct RClass * mrb_module_get_under(mrb_state *mrb, struct RClass *outer, const char *name)
Gets a module defined under another module.
Definition class.c:700
const char * mrb_args_format
Format specifiers for {mrb_get_args} function.
Definition mruby.h:958
mrb_bool mrb_obj_respond_to(mrb_state *mrb, struct RClass *c, mrb_sym mid)
Returns true if obj responds to the given method.
Definition class.c:2111
void mrb_undef_class_method(mrb_state *mrb, struct RClass *cls, const char *name)
Undefine a class method.
Definition class.c:2360
struct RClass * mrb_module_get(mrb_state *mrb, const char *name)
Gets a module.
Definition class.c:712
struct RClass * mrb_class_get(mrb_state *mrb, const char *name)
Gets a class.
Definition class.c:669
struct RClass * mrb_define_class_under_id(mrb_state *mrb, struct RClass *outer, mrb_sym name, struct RClass *super)
Definition class.c:740
mrb_sym mrb_intern_cstr(mrb_state *mrb, const char *str)
Create a symbol from C string.
Definition symbol.c:250
void mrb_define_class_method(mrb_state *mrb, struct RClass *cla, const char *name, mrb_func_t fun, mrb_aspec aspec)
Defines a class method.
Definition class.c:1717
mrb_value(* mrb_func_t)(struct mrb_state *mrb, mrb_value self)
Function pointer type for a function callable by mruby.
Definition mruby.h:230
Class class.
Definition class.h:17
Proc class.
Definition proc.h:18
Definition boxing_nan.h:40