Last active
January 5, 2022 14:06
-
-
Save lihaochen910/8069c3c912868309331b22ebc184009f to your computer and use it in GitHub Desktop.
The bindings for mruby(3.0.0) to Nim.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
#* mruby - An embeddable Ruby implementation | |
#* | |
#* Copyright (c) mruby developers 2010-2021 | |
#* | |
#* Permission is hereby granted, free of charge, to any person obtaining | |
#* a copy of this software and associated documentation files (the | |
#* "Software"), to deal in the Software without restriction, including | |
#* without limitation the rights to use, copy, modify, merge, publish, | |
#* distribute, sublicense, and/or sell copies of the Software, and to | |
#* permit persons to whom the Software is furnished to do so, subject to | |
#* the following conditions: | |
#* | |
#* The above copyright notice and this permission notice shall be | |
#* included in all copies or substantial portions of the Software. | |
#* | |
#* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
#* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
#* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. | |
#* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY | |
#* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, | |
#* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE | |
#* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
#* | |
#* [ MIT license: https://www.opensource.org/licenses/mit-license.php ] | |
# | |
type va_list {.importc: "va_list", header: "<stdarg.h>".} = object | |
{.passL: "-lmruby".} | |
{.pragma: h, header: "<mruby.h>".} | |
{.pragma: hc, header: "<mruby/compile.h>".} | |
type | |
mrb_code* {.importc,h.} = uint8 | |
mrb_aspec* {.importc,h.} = uint32 | |
type | |
mrb_irep* {.importc, header: "<mruby/irep.h>".} = object # mruby/irep.h | |
type | |
mrb_sym* {.importc,h.} = uint32 # cshort # mruby/value.h | |
type | |
mrb_bool {.importc,h.} = uint8 # mruby/value.h | |
when not(defined(MRB_GC_ARENA_SIZE)): | |
const | |
MRB_GC_ARENA_SIZE* = 100 | |
type | |
mrb_func_t* {.importc,h.} = proc (mrb: ptr mrb_state; a3: mrb_value): mrb_value | |
mrb_atexit_func* {.importc,h.} = proc (mrb: ptr mrb_state) | |
mrb_value* {.importc,h.} = object | |
iv_tbl {.importc,h.} = object # mruby/variable.c | |
# kh_mt {.importc,h.} = object | |
mt_tbl {.importc,h.} = object # mruby/class.c | |
# symbol_name {.importc, header: "<src/symbol.h>".} = object # src/symbol.c | |
# lit*: mrb_bool | |
# prew*: uint8 | |
# slen*: uint16 | |
# name*: cstring | |
RProc* {.importc,h.} = object | |
irep*: ptr mrb_irep # MRB_OBJECT_HEADER; | |
# union { | |
rfunc*: mrb_func_t # } body; | |
upper*: ref RProc | |
target_class*: ptr RClass # union { | |
env*: ptr REnv # } body; | |
mrb_allocf* = proc (mrb: ptr mrb_state; a3: pointer; a4: csize_t; ud: pointer): pointer {.cdecl.} | |
REnv* {.importc,h.} = object | |
stack*: ptr mrb_value # MRB_OBJECT_HEADER; | |
cxt*: mrb_context | |
mid*: mrb_sym | |
# cioff*: cint | |
RClass* {.importc,h.} = object | |
iv*: ptr iv_tbl # MRB_OBJECT_HEADER; | |
mt*: ptr mt_tbl | |
super*: ptr RClass | |
mrb_callinfo* {.importc,h.} = object | |
mid*: mrb_sym | |
argc*: cshort | |
acc*: cshort | |
rproc*: ptr RProc | |
stack*: ptr mrb_value | |
pc*: ptr mrb_code # current address on iseq of this proc | |
env*: ptr REnv # union { | |
target_class*: ptr RClass # } body; | |
mrb_fiber_state* {.importc,h.} = enum | |
MRB_FIBER_CREATED = 0, MRB_FIBER_RUNNING, MRB_FIBER_RESUMED, | |
MRB_FIBER_SUSPENDED, MRB_FIBER_TRANSFERRED, MRB_FIBER_TERMINATED | |
mrb_context* {.importc,h.} = object | |
prev*: ptr mrb_context | |
stbase*: ptr mrb_value # stack of virtual machine | |
stend*: ptr mrb_value | |
ci*: ptr mrb_callinfo | |
cibase*: ptr mrb_callinfo | |
ciend*: ptr mrb_callinfo | |
status*: mrb_fiber_state | |
vmexec*: mrb_bool | |
fib*: ptr RFiber | |
RObject* {.importc,h.} = object | |
iv*: ptr iv_tbl # MRB_OBJECT_HEADER; | |
RFiber* {.importc,h.} = object | |
cxt*: ptr mrb_context # MRB_OBJECT_HEADER; | |
RBasic* {.importc,h.} = object | |
mrb_gc_state* {.importc,h.} = enum | |
MRB_GC_STATE_ROOT = 0, MRB_GC_STATE_MARK, MRB_GC_STATE_SWEEP | |
mrb_heap_page = object | |
mrb_pool* {.importc,h.} = object | |
mrb_gc* {.importc,h.} = object | |
PState* = ptr mrb_state | |
mrb_state* {.importc,h.} = object | |
jmp*: pointer | |
allocf*: mrb_allocf # memory allocation function | |
allocf_ud*: pointer # auxiliary data of allocf | |
c*: ptr mrb_context | |
root_c*: ptr mrb_context | |
globals*: ptr iv_tbl # global variable table | |
exc*: ptr RObject # exception | |
top_self*: ptr RObject | |
object_class*: ptr RClass # Object class | |
class_class*: ptr RClass | |
module_class*: ptr RClass | |
proc_class*: ptr RClass | |
string_class*: ptr RClass | |
array_class*: ptr RClass | |
hash_class*: ptr RClass | |
range_class*: ptr RClass | |
when not(defined(MRB_NO_FLOAT)): | |
float_class*: ptr RClass | |
integer_class*: ptr RClass | |
true_class*: ptr RClass | |
false_class*: ptr RClass | |
nil_class*: ptr RClass | |
symbol_class*: ptr RClass | |
kernel_module*: ptr RClass | |
gc*: mrb_gc | |
heaps*: ptr mrb_heap_page # heaps for GC | |
sweeps*: ptr mrb_heap_page | |
free_heaps*: ptr mrb_heap_page | |
live*: csize_t # count of live objects | |
when defined(MRB_GC_FIXED_ARENA): | |
arena*: array[MRB_GC_ARENA_SIZE, ptr RBasic] # GC protection array | |
else: | |
arena*: ptr ptr RBasic # GC protection array | |
arena_capa*: cint ##endif | |
arena_idx*: cint | |
gc_state*: mrb_gc_state # state of gc | |
current_white_part*: cint # make white object by white_part | |
gray_list*: ptr RBasic # list of gray objects to be traversed incrementally | |
atomic_gray_list*: ptr RBasic # list of objects to be traversed atomically | |
gc_live_after_mark*: csize_t | |
gc_threshold*: csize_t | |
gc_interval_ratio*: cint | |
gc_step_ratio*: cint | |
gc_disabled*: mrb_bool #:1; | |
gc_full*: mrb_bool #:1; | |
is_generational_gc_mode*: mrb_bool #:1; | |
out_of_memory*: mrb_bool #:1; | |
majorgc_old_threshold*: csize_t | |
mems*: pointer | |
symidx*: mrb_sym | |
symtbl*: pointer # struct symbol_name* # symbol table | |
##ifdef MRB_USE_DEBUG_HOOK | |
code_fetch_hook*: proc (mrb: ptr mrb_state; irep: ptr mrb_irep; | |
pc: ptr mrb_code; regs: ptr mrb_value) {.cdecl.} | |
debug_op_hook*: proc (mrb: ptr mrb_state; irep: ptr mrb_irep; | |
pc: ptr mrb_code; regs: ptr mrb_value) {.cdecl.} | |
##endif | |
eException_class*: ptr RClass | |
eStandardError_class*: ptr RClass | |
nomem_err*: ptr RObject | |
stack_err*: ptr RObject | |
ud*: pointer # auxiliary data | |
atexit_stack_len*: uint16 | |
type | |
mrb_vtype* {.importc,h.} = enum | |
MRB_TT_FALSE = 1, # 1 | |
MRB_TT_TRUE, # 2 | |
MRB_TT_FLOAT, # 3 | |
MRB_TT_INTEGER, # 4 | |
MRB_TT_SYMBOL, # 5 | |
MRB_TT_UNDEF, # 6 | |
MRB_TT_CPTR, # 7 | |
MRB_TT_FREE, # 8 | |
MRB_TT_OBJECT, # 9 | |
MRB_TT_CLASS, # 10 | |
MRB_TT_MODULE, # 11 | |
MRB_TT_ICLASS, # 12 | |
MRB_TT_SCLASS, # 13 | |
MRB_TT_PROC, # 14 | |
MRB_TT_ARRAY, # 15 | |
MRB_TT_HASH, # 16 | |
MRB_TT_STRING, # 17 | |
MRB_TT_RANGE, # 18 | |
MRB_TT_EXCEPTION, # 19 | |
MRB_TT_ENV, # 20 | |
MRB_TT_DATA, # 21 | |
MRB_TT_FIBER, # 22 | |
MRB_TT_ISTRUCT, # 23 | |
MRB_TT_BREAK, # 24 | |
MRB_TT_MAXDEFINE # 25 | |
when defined(MRB_INT64): | |
type | |
mrb_int* = int64 # mruby/value.h | |
mrb_uint* = uint64 # mruby/value.h | |
const | |
mrb_int_bit* = 64 | |
#const | |
# MRB_INT_MIN* = int64.low | |
# MRB_INT_MAX* = INT64.high | |
# PRIdMRB_INT* = PRId64 | |
# PRIiMRB_INT* = PRIi64 | |
# PRIoMRB_INT* = PRIo64 | |
# PRIxMRB_INT* = PRIx64 | |
# PRIXMRB_INT* = PRIX64 | |
# elif defined(MRB_INT16): | |
# type | |
# mrb_int* = int16 | |
# #const | |
# # MRB_INT_MIN* = INT16.low | |
# # MRB_INT_MAX* = INT16.high | |
else: | |
type | |
mrb_int* = int32 | |
mrb_uint* = uint32 # mruby/value.h | |
const | |
mrb_int_bit* = 32 | |
const | |
mrb_int_min* = mrb_int.low | |
mrb_int_max* = mrb_int.high | |
#const | |
# MRB_INT_MIN* = INT32.low | |
# MRB_INT_MAX* = INT32.high | |
# PRIdMRB_INT* = PRId32 | |
# PRIiMRB_INT* = PRIi32 | |
# PRIoMRB_INT* = PRIo32 | |
# PRIxMRB_INT* = PRIx32 | |
# PRIXMRB_INT* = PRIX32 | |
when defined(MRB_USE_FLOAT32): | |
type | |
mrb_float* = cfloat # mruby/value.h | |
else: | |
type | |
mrb_float* = cdouble # mruby/value.h | |
type mrb_parser_state* {.importc,hc.} = object | |
{.push callconv: cdecl.} | |
{.push importc.} | |
{.push header:"<mruby.h>".} | |
proc mrb_define_class*(mrb: ptr mrb_state; name: cstring; super: ptr RClass): ptr RClass | |
proc mrb_define_class_id*(mrb: ptr mrb_state; name: mrb_sym; super: ptr RClass): ptr RClass | |
proc mrb_define_module*(mrb: ptr mrb_state; name: cstring): ptr RClass | |
proc mrb_define_module_id*(mrb: ptr mrb_state; name: mrb_sym): ptr RClass | |
proc mrb_singleton_class*(mrb: ptr mrb_state; val: mrb_value): mrb_value | |
proc mrb_singleton_class_ptr*(mrb: ptr mrb_state; val: mrb_value): ptr RClass | |
proc mrb_include_module*(mrb: ptr mrb_state; cla: ptr RClass; included: ptr RClass) | |
proc mrb_prepend_module*(mrb: ptr mrb_state; cla: ptr RClass; prepended: ptr RClass) | |
proc mrb_define_method*(mrb: ptr mrb_state; cla: ptr RClass; name: cstring; | |
f: mrb_func_t; aspec: mrb_aspec) | |
proc mrb_define_method_id*(mrb: ptr mrb_state; cla: ptr RClass; mid: mrb_sym; | |
f: mrb_func_t; aspec: mrb_aspec) | |
proc mrb_define_class_method*(mrb: ptr mrb_state; cla: ptr RClass; name: cstring; | |
fun: mrb_func_t; aspec: mrb_aspec) | |
proc mrb_define_class_method_id*(mrb: ptr mrb_state; cla: ptr RClass; name: mrb_sym; | |
fun: mrb_func_t; aspec: mrb_aspec) | |
proc mrb_define_singleton_method*(mrb: ptr mrb_state; cla: ptr RObject; name: cstring; | |
fun: mrb_func_t; aspec: mrb_aspec) | |
proc mrb_define_singleton_method_id*(mrb: ptr mrb_state; cla: ptr RClass; name: mrb_sym; | |
fun: mrb_func_t; aspec: mrb_aspec) | |
proc mrb_define_module_function*(mrb: ptr mrb_state; cla: ptr RClass; name: cstring; | |
fun: mrb_func_t; aspec: mrb_aspec) | |
proc mrb_define_module_function_id*(mrb: ptr mrb_state; cla: ptr RClass; name: mrb_sym; | |
fun: mrb_func_t; aspec: mrb_aspec) | |
proc mrb_define_const*(mrb: ptr mrb_state; cla: ptr RClass; name: cstring; | |
val: mrb_value) | |
proc mrb_define_const_id*(mrb: ptr mrb_state; cla: ptr RClass; name: mrb_sym; | |
val: mrb_value) | |
proc mrb_undef_method*(mrb: ptr mrb_state; cla: ptr RClass; name: cstring) | |
proc mrb_undef_method_id*(mrb: ptr mrb_state; cla: ptr RClass; name: mrb_sym) | |
proc mrb_undef_class_method*(mrb: ptr mrb_state; cla: ptr RClass; name: cstring) | |
proc mrb_undef_class_method_id*(mrb: ptr mrb_state; cla: ptr RClass; name: mrb_sym) | |
proc mrb_obj_new*(mrb: ptr mrb_state; c: ptr RClass; argc: cint; | |
argv: ptr mrb_value): mrb_value | |
template mrb_class_new_instance*(mrb, argc, argv, c: untyped): untyped = | |
mrb_obj_new(mrb, c, argc, argv) | |
proc mrb_class_new*(mrb: ptr mrb_state; super: ptr RClass): ptr RClass | |
proc mrb_module_new*(mrb: ptr mrb_state): ptr RClass | |
proc mrb_class_defined*(mrb: ptr mrb_state; name: cstring): mrb_bool | |
proc mrb_class_defined_id*(mrb: ptr mrb_state; name: mrb_sym): mrb_bool | |
proc mrb_class_get*(mrb: ptr mrb_state; name: cstring): ptr RClass | |
proc mrb_class_get_id*(mrb: ptr mrb_state; name: mrb_sym): ptr RClass | |
proc mrb_exc_get_id*(mrb: ptr mrb_state; name: cstring): ptr RClass | |
template mrb_exc_get*(mrb, name: untyped): untyped = | |
mrb_exc_get_id(mrb, mrb_intern_cstr(mrb, name)) | |
proc mrb_class_defined_under*(mrb: ptr mrb_state; outer: ptr RClass; name: cstring): mrb_bool | |
proc mrb_class_defined_under_id*(mrb: ptr mrb_state; outer: ptr RClass; name: mrb_sym): mrb_bool | |
proc mrb_class_get_under*(mrb: ptr mrb_state; outer: ptr RClass; name: cstring): ptr RClass | |
proc mrb_class_get_under_id*(mrb: ptr mrb_state; outer: ptr RClass; name: mrb_sym): ptr RClass | |
proc mrb_module_get*(mrb: ptr mrb_state; name: cstring): ptr RClass | |
proc mrb_module_get_id*(mrb: ptr mrb_state; name: mrb_sym): ptr RClass | |
proc mrb_module_get_under*(mrb: ptr mrb_state; outer: ptr RClass; name: cstring): ptr RClass | |
proc mrb_module_get_under_id*(mrb: ptr mrb_state; outer: ptr RClass; name: mrb_sym): ptr RClass | |
proc mrb_notimplement*(mrb: ptr mrb_state) | |
proc mrb_notimplement_m*(mrb: ptr mrb_state, m: mrb_value): mrb_value | |
proc mrb_obj_dup*(mrb: ptr mrb_state; obj: mrb_value): mrb_value | |
proc mrb_obj_respond_to*(mrb: ptr mrb_state; c: ptr RClass; mid: mrb_sym): mrb_bool | |
proc mrb_define_class_under*(mrb: ptr mrb_state; outer: ptr RClass; name: cstring; | |
super: ptr RClass): ptr RClass | |
proc mrb_define_class_under_id*(mrb: ptr mrb_state; outer: ptr RClass; name: mrb_sym; | |
super: ptr RClass): ptr RClass | |
proc mrb_define_module_under*(mrb: ptr mrb_state; outer: ptr RClass; name: cstring): ptr RClass | |
proc mrb_define_module_under_id*(mrb: ptr mrb_state; outer: ptr RClass; name: mrb_sym): ptr RClass | |
template MRB_ARGS_REQ*(n: untyped): untyped = | |
( mrb_aspec((n) and 0x1f) shl 18) | |
template MRB_ARGS_OPT*(n: untyped): untyped = | |
( mrb_aspec((n) and 0x1f) shl 13) | |
template MRB_ARGS_ARG*(n1, n2: untyped): untyped = | |
( MRB_ARGS_REQ(n1) or MRB_ARGS_OPT(n2) ) | |
template MRB_ARGS_REST*(): untyped = | |
mrb_aspec( 1 shl 12 ) | |
template MRB_ARGS_POST*(n: untyped): untyped = | |
( mrb_aspec((n) and 0x1f) shl 7 ) | |
template MRB_ARGS_KEY*(n1, n2: untyped): untyped = | |
# ( mrb_aspec( (((n1) and 0x1f) shl 2) or ((n2)?(1 shl 1):0) ) ) | |
( mrb_aspec( (((n1) and 0x1f) shl 2) or (if n2 != 0: (1 shl 1) else: 0) ) ) | |
template MRB_ARGS_BLOCK*(): untyped = | |
mrb_aspec(1) | |
template MRB_ARGS_ANY*(): untyped = | |
MRB_ARGS_REST() | |
template MRB_ARGS_NONE*(): untyped = | |
mrb_aspec(0) | |
type mrb_args_format* {.importc,h.} = cstring | |
proc mrb_get_args*(mrb: ptr mrb_state; format: mrb_args_format): cint | |
proc mrb_get_mid*(mrb: ptr mrb_state): mrb_sym | |
proc mrb_get_argc*(mrb: ptr mrb_state): mrb_int | |
proc mrb_get_argv*(mrb: ptr mrb_state): ptr mrb_value | |
proc mrb_get_arg1*(mrb: ptr mrb_state): mrb_value | |
proc mrb_funcall*(mrb: ptr mrb_state; val: mrb_value; name: cstring; argc: mrb_int): mrb_value {.varargs.} | |
proc mrb_funcall_id*(mrb: ptr mrb_state; val: mrb_value; mid: mrb_sym; argc: mrb_int): mrb_value {.varargs.} | |
proc mrb_funcall_argv*(mrb: ptr mrb_state; val: mrb_value; name: mrb_sym; | |
argc: mrb_int; argv: ptr mrb_value): mrb_value | |
proc mrb_funcall_with_block*(mrb: ptr mrb_state; val: mrb_value; name: mrb_sym; | |
argc: mrb_int; argv: ptr mrb_value; blk: mrb_value): mrb_value | |
proc mrb_intern_cstr*(mrb: ptr mrb_state; str: cstring): mrb_sym | |
proc mrb_intern*(mrb: ptr mrb_state; str: cstring; s: csize_t): mrb_sym | |
proc mrb_intern_static*(mrb: ptr mrb_state; str: cstring; s: csize_t): mrb_sym | |
template mrb_intern_lit*(mrb, lit: untyped): untyped = | |
mrb_intern_static(mrb, (lit), sizeof(lit) - 1) | |
proc mrb_intern_str*(mrb: ptr mrb_state; s: mrb_value): mrb_sym | |
proc mrb_intern_check_cstr*(mrb: ptr mrb_state; s: cstring): mrb_sym | |
proc mrb_intern_check*(mrb: ptr mrb_state; s: cstring; cs: csize_t): mrb_sym | |
proc mrb_intern_check_str*(mrb: ptr mrb_state; v: mrb_value): mrb_sym | |
proc mrb_check_intern_cstr*(mrb: ptr mrb_state; s: cstring): mrb_value | |
proc mrb_check_intern*(mrb: ptr mrb_state; s: cstring; cs: csize_t): mrb_value | |
proc mrb_check_intern_str*(mrb: ptr mrb_state; s: mrb_value): mrb_value | |
proc mrb_sym_name*(mrb: ptr mrb_state; s: mrb_sym): cstring | |
proc mrb_sym_name_len*(mrb: ptr mrb_state; s: mrb_sym; ss: ptr mrb_int): cstring | |
proc mrb_sym_dump*(mrb: ptr mrb_state; s: mrb_sym): cstring | |
proc mrb_sym_str*(mrb: ptr mrb_state; s: mrb_sym): mrb_value | |
proc mrb_sym2name*(mrb: ptr mrb_state; s: mrb_sym): cstring | |
proc mrb_sym2name_len*(mrb: ptr mrb_state; s: mrb_sym; ss: ptr csize_t): cstring | |
proc mrb_sym2str*(mrb: ptr mrb_state; s: mrb_sym): mrb_value | |
proc mrb_malloc*(mrb: ptr mrb_state; s: csize_t): pointer | |
proc mrb_calloc*(mrb: ptr mrb_state; s1: csize_t; s2: csize_t): pointer | |
proc mrb_realloc*(mrb: ptr mrb_state; a3: pointer; a4: csize_t): pointer | |
proc mrb_realloc_simple*(mrb: ptr mrb_state; a3: pointer; a4: csize_t): pointer | |
proc mrb_malloc_simple*(mrb: ptr mrb_state; a3: csize_t): pointer | |
proc mrb_obj_alloc*(mrb: ptr mrb_state; a3: mrb_vtype; a4: ptr RClass): ptr RBasic | |
proc mrb_free*(mrb: ptr mrb_state; a3: pointer) | |
proc mrb_str_new*(mrb: ptr mrb_state; p: cstring; len: csize_t): mrb_value | |
proc mrb_str_new_cstr*(mrb: ptr mrb_state; a3: cstring): mrb_value | |
proc mrb_str_new_static*(mrb: ptr mrb_state; p: cstring; len: csize_t): mrb_value | |
template mrb_str_new_lit*(mrb, lit: untyped): untyped = | |
mrb_str_new_static(mrb, (lit), sizeof(lit) - 1) | |
proc mrb_obj_freeze*(mrb: ptr mrb_state; v: mrb_value): mrb_value | |
template mrb_str_new_frozen*(mrb, p, l: untyped): untyped = | |
mrb_obj_freeze(mrb, mrb_str_new(mrb, p, l)) | |
template mrb_str_new_cstr_frozen*(mrb, p: untyped): untyped = | |
mrb_obj_freeze(mrb, mrb_str_new_cstr(mrb, p)) | |
template mrb_str_new_static_frozen*(mrb, p, l: untyped): untyped = | |
mrb_obj_freeze(mrb, mrb_str_new_static(mrb, p, l)) | |
template mrb_str_new_lit_frozen*(mrb, lit: untyped): untyped = | |
mrb_obj_freeze(mrb, mrb_str_new_lit(mrb, lit)) | |
discard """ proc mrb_define_class*(a2: ptr mrb_state; a3: cstring; a4: ptr RClass): ptr RClass {.importc.} | |
proc mrb_define_module*(a2: ptr mrb_state; a3: cstring): ptr RClass {.importc.} | |
proc mrb_singleton_class*(a2: ptr mrb_state; a3: mrb_value): mrb_value {.importc.} | |
proc mrb_include_module*(a2: ptr mrb_state; a3: ptr RClass; a4: ptr RClass) {.importc.} | |
proc mrb_define_method*(a2: ptr mrb_state; a3: ptr RClass; a4: cstring; | |
a5: mrb_func_t; a6: mrb_aspec) {.importc.} | |
proc mrb_define_class_method*(a2: ptr mrb_state; a3: ptr RClass; a4: cstring; | |
a5: mrb_func_t; a6: mrb_aspec) {.importc.} | |
proc mrb_define_singleton_method*(a2: ptr mrb_state; a3: ptr RObject; | |
a4: cstring; a5: mrb_func_t; a6: mrb_aspec) {.importc.} | |
proc mrb_define_module_function*(a2: ptr mrb_state; a3: ptr RClass; | |
a4: cstring; a5: mrb_func_t; a6: mrb_aspec) {.importc.} | |
proc mrb_define_const*(a2: ptr mrb_state; a3: ptr RClass; name: cstring; | |
a5: mrb_value) {.importc.} | |
proc mrb_undef_method*(a2: ptr mrb_state; a3: ptr RClass; a4: cstring) {.importc.} | |
proc mrb_undef_class_method*(a2: ptr mrb_state; a3: ptr RClass; a4: cstring) {.importc.} | |
proc mrb_obj_new*(mrb: ptr mrb_state; c: ptr RClass; argc: cint; | |
argv: ptr mrb_value): mrb_value {.importc.} | |
template mrb_class_new_instance*(mrb, argc, argv, c: expr): expr = | |
mrb_obj_new(mrb, c, argc, argv) | |
proc mrb_instance_new*(mrb: ptr mrb_state; cv: mrb_value): mrb_value {.importc.} | |
proc mrb_class_new*(mrb: ptr mrb_state; super: ptr RClass): ptr RClass {.importc.} | |
proc mrb_module_new*(mrb: ptr mrb_state): ptr RClass {.importc.} | |
proc mrb_class_defined*(mrb: ptr mrb_state; name: cstring): mrb_bool {.importc.} | |
proc mrb_class_get*(mrb: ptr mrb_state; name: cstring): ptr RClass {.importc.} | |
proc mrb_class_get_under*(mrb: ptr mrb_state; outer: ptr RClass; name: cstring): ptr RClass {.importc.} | |
proc mrb_module_get*(mrb: ptr mrb_state; name: cstring): ptr RClass {.importc.} | |
proc mrb_module_get_under*(mrb: ptr mrb_state; outer: ptr RClass; | |
name: cstring): ptr RClass {.importc.} | |
proc mrb_obj_dup*(mrb: ptr mrb_state; obj: mrb_value): mrb_value {.importc.} | |
proc mrb_check_to_integer*(mrb: ptr mrb_state; val: mrb_value; `method`: cstring): mrb_value {.importc.} | |
proc mrb_obj_respond_to*(mrb: ptr mrb_state; c: ptr RClass; mid: mrb_sym): mrb_bool {.importc.} | |
proc mrb_define_class_under*(mrb: ptr mrb_state; outer: ptr RClass; | |
name: cstring; super: ptr RClass): ptr RClass {.importc.} | |
proc mrb_define_module_under*(mrb: ptr mrb_state; outer: ptr RClass; | |
name: cstring): ptr RClass {.importc.} | |
# required arguments | |
##define MRB_ARGS_REQ(n) ((mrb_aspec)((n)&0x1f) << 18) | |
# optional arguments | |
##define MRB_ARGS_OPT(n) ((mrb_aspec)((n)&0x1f) << 13) | |
# mandatory and optinal arguments | |
template MRB_ARGS_ARG*(n1, n2: expr): expr = | |
(MRB_ARGS_REQ(n1) or MRB_ARGS_OPT(n2)) | |
# rest argument | |
##define MRB_ARGS_REST() ((mrb_aspec)(1 << 12)) | |
# required arguments after rest | |
##define MRB_ARGS_POST(n) ((mrb_aspec)((n)&0x1f) << 7) | |
# keyword arguments (n of keys, kdict) | |
##define MRB_ARGS_KEY(n1,n2) ((mrb_aspec)((((n1)&0x1f) << 2) | ((n2)?(1<<1):0))) | |
# block argument | |
template MRB_ARGS_BLOCK*(): expr = | |
mrb_aspec(1) | |
# accept any number of arguments | |
template MRB_ARGS_ANY*(): expr = | |
ARGS_REST() | |
# accept no arguments | |
template MRB_ARGS_NONE*(): expr = | |
cast[(mrb_aspec)](0) | |
# compatibility macros; will be removed | |
template ARGS_REQ*(n: expr): expr = | |
MRB_ARGS_REQ(n) | |
template ARGS_OPT*(n: expr): expr = | |
MRB_ARGS_OPT(n) | |
template ARGS_REST*(): expr = | |
MRB_ARGS_REST() | |
template ARGS_POST*(n: expr): expr = | |
MRB_ARGS_POST() | |
template ARGS_KEY*(n1, n2: expr): expr = | |
MRB_ARGS_KEY(n1, n2) | |
template ARGS_BLOCK*(): expr = | |
MRB_ARGS_BLOCK() | |
template ARGS_ANY*(): expr = | |
MRB_ARGS_ANY() | |
template ARGS_NONE*(): expr = | |
MRB_ARGS_NONE() | |
proc mrb_get_args*(mrb: ptr mrb_state; format: cstring): cint {.varargs,importc.} | |
proc mrb_funcall*(a2: ptr mrb_state; a3: mrb_value; a4: cstring; a5: cint): mrb_value {. | |
varargs,importc.} | |
proc mrb_funcall_argv*(a2: ptr mrb_state; a3: mrb_value; a4: mrb_sym; | |
a5: cint; a6: ptr mrb_value): mrb_value {.importc.} | |
proc mrb_funcall_with_block*(a2: ptr mrb_state; a3: mrb_value; a4: mrb_sym; | |
a5: cint; a6: ptr mrb_value; a7: mrb_value): mrb_value {.importc.} | |
proc mrb_intern_cstr*(a2: ptr mrb_state; a3: cstring): mrb_sym {.importc.} | |
proc mrb_intern*(a2: ptr mrb_state; a3: cstring; a4: csize_t): mrb_sym {.importc.} | |
proc mrb_intern_static*(a2: ptr mrb_state; a3: cstring; a4: csize): mrb_sym {.importc.} | |
template mrb_intern_lit*(mrb, lit: expr): expr = | |
mrb_intern_static(mrb, (lit), sizeof(lit) - 1) | |
proc mrb_intern_str*(a2: ptr mrb_state; a3: mrb_value): mrb_sym {.importc.} | |
proc mrb_check_intern_cstr*(a2: ptr mrb_state; a3: cstring): mrb_value {.importc.} | |
proc mrb_check_intern*(a2: ptr mrb_state; a3: cstring; a4: csize): mrb_value {.importc.} | |
proc mrb_check_intern_str*(a2: ptr mrb_state; a3: mrb_value): mrb_value {.importc.} | |
proc mrb_sym2name*(a2: ptr mrb_state; a3: mrb_sym): cstring {.importc.} | |
proc mrb_sym2name_len*(a2: ptr mrb_state; a3: mrb_sym; a4: ptr csize): cstring {.importc.} | |
proc mrb_sym2str*(a2: ptr mrb_state; a3: mrb_sym): mrb_value {.importc.} | |
proc mrb_malloc*(a2: ptr mrb_state; a3: csize): pointer {.importc.} | |
# raise RuntimeError if no mem | |
proc mrb_calloc*(a2: ptr mrb_state; a3: csize; a4: csize): pointer {.importc.} | |
# ditto | |
proc mrb_realloc*(a2: ptr mrb_state; a3: pointer; a4: csize): pointer {.importc.} | |
# ditto | |
proc mrb_realloc_simple*(a2: ptr mrb_state; a3: pointer; a4: csize): pointer {.importc.} | |
# return NULL if no memory available | |
proc mrb_malloc_simple*(a2: ptr mrb_state; a3: csize): pointer {.importc.} | |
# return NULL if no memory available | |
proc mrb_obj_alloc*(a2: ptr mrb_state; a3: mrb_vtype; a4: ptr RClass): ptr RBasic {.importc.} | |
proc mrb_free*(a2: ptr mrb_state; a3: pointer) {.importc.} | |
proc mrb_str_new*(mrb: ptr mrb_state; p: cstring; len: csize): mrb_value {.importc.} | |
proc mrb_str_new_cstr*(a2: ptr mrb_state; a3: cstring): mrb_value {.importc.} | |
proc mrb_str_new_static*(mrb: ptr mrb_state; p: cstring; len: csize): mrb_value {.importc.} | |
template mrb_str_new_lit*(mrb, lit: expr): expr = | |
mrb_str_new_static(mrb, (lit), sizeof(lit) - 1) | |
""" | |
proc mrb_open*(): PState | |
proc mrb_open_allocf*(f: mrb_allocf, ud: pointer): PState | |
proc mrb_open_core*(f: mrb_allocf, ud: pointer): PState | |
proc mrb_close*(mrb: ptr mrb_state) | |
proc mrb_default_allocf*(mrb: ptr mrb_state, ud: pointer, size: csize_t, ud2: pointer): pointer | |
proc mrb_top_self*(mrb: ptr mrb_state): mrb_value | |
proc mrb_top_run*(mrb: ptr mrb_state, rproc: ptr RProc, self: mrb_value, stack_keep: mrb_int): mrb_value | |
proc mrb_vm_run*(mrb: ptr mrb_state, rproc: ptr RProc, self: mrb_value, stack_keep: mrb_int): mrb_value | |
proc mrb_vm_exec*(mrb: ptr mrb_state, rproc: ptr RProc, iseq: ptr mrb_code): mrb_value | |
proc mrb_p*(a2: ptr mrb_state, a3: mrb_value) | |
proc mrb_obj_id*(obj: mrb_value): mrb_int | |
proc mrb_obj_to_sym*(mrb: ptr mrb_state, name: mrb_value): mrb_sym | |
proc mrb_obj_eq*(a2: ptr mrb_state, a3: mrb_value, a4: mrb_value): mrb_bool | |
proc mrb_obj_equal*(a2: ptr mrb_state; a3: mrb_value; a4: mrb_value): mrb_bool | |
proc mrb_equal*(mrb: ptr mrb_state; obj1: mrb_value; obj2: mrb_value): mrb_bool | |
proc mrb_convert_to_integer*(mrb: ptr mrb_state; val: mrb_value; base: mrb_int): mrb_value | |
proc mrb_Integer*(mrb: ptr mrb_state; val: mrb_value): mrb_value | |
# when not(defined(MRB_NO_FLOAT)): | |
# proc mrb_Float*(mrb: ptr mrb_state; val: mrb_value): mrb_value | |
proc mrb_inspect*(mrb: ptr mrb_state; obj: mrb_value): mrb_value | |
proc mrb_eql*(mrb: ptr mrb_state; obj1: mrb_value; obj2: mrb_value): mrb_bool | |
proc mrb_cmp*(mrb: ptr mrb_state; obj1: mrb_value; obj2: mrb_value): mrb_int | |
proc mrb_gc_arena_save*(mrb: ptr mrb_state): int | |
proc mrb_gc_arena_restore*(mrb: ptr mrb_state, idx: int) | |
proc mrb_garbage_collect*(mrb: ptr mrb_state) | |
proc mrb_full_gc*(mrb: ptr mrb_state) | |
proc mrb_incremental_gc*(mrb: ptr mrb_state) | |
proc mrb_gc_mark*(mrb: ptr mrb_state, b: ptr RBasic) | |
proc mrb_field_write_barrier*(mrb: ptr mrb_state, b1: ptr RBasic, b2: ptr RBasic) | |
proc mrb_write_barrier*(mrb: ptr mrb_state, b1: ptr RBasic) | |
proc mrb_type_convert*(mrb: ptr mrb_state; val: mrb_value; | |
typ: mrb_vtype; tmethod: mrb_sym): mrb_value | |
proc mrb_check_convert_type*(mrb: ptr mrb_state; val: mrb_value; | |
typ: mrb_vtype; tmethod: mrb_sym): mrb_value | |
proc mrb_any_to_s*(mrb: ptr mrb_state; obj: mrb_value): mrb_value | |
proc mrb_obj_classname*(mrb: ptr mrb_state; obj: mrb_value): cstring | |
proc mrb_obj_class*(mrb: ptr mrb_state; obj: mrb_value): ptr RClass | |
proc mrb_class_path*(mrb: ptr mrb_state; c: ptr RClass): mrb_value | |
proc mrb_obj_is_kind_of*(mrb: ptr mrb_state; obj: mrb_value; c: ptr RClass): mrb_bool | |
proc mrb_obj_inspect*(mrb: ptr mrb_state; self: mrb_value): mrb_value | |
proc mrb_obj_clone*(mrb: ptr mrb_state; self: mrb_value): mrb_value | |
discard """ | |
proc mrb_open_allocf*(a2: mrb_allocf; ud: pointer): ptr mrb_state {.importc.} | |
proc mrb_top_self*(a2: ptr mrb_state): mrb_value {.importc.} | |
proc mrb_run*(a2: ptr mrb_state; a3: ptr RProc; a4: mrb_value): mrb_value {.importc.} | |
proc mrb_context_run*(a2: ptr mrb_state; a3: ptr RProc; a4: mrb_value; | |
a5: cuint): mrb_value {.importc.} | |
proc mrb_p*(a2: ptr mrb_state; a3: mrb_value) {.importc.} | |
proc mrb_obj_id*(obj: mrb_value): mrb_int {.importc.} | |
proc mrb_obj_to_sym*(mrb: ptr mrb_state; name: mrb_value): mrb_sym {.importc.} | |
proc mrb_obj_eq*(a2: ptr mrb_state; a3: mrb_value; a4: mrb_value): mrb_bool {.importc.} | |
proc mrb_obj_equal*(a2: ptr mrb_state; a3: mrb_value; a4: mrb_value): mrb_bool {.importc.} | |
proc mrb_equal*(mrb: ptr mrb_state; obj1: mrb_value; obj2: mrb_value): mrb_bool {.importc.} | |
proc mrb_Integer*(mrb: ptr mrb_state; val: mrb_value): mrb_value {.importc.} | |
proc mrb_Float*(mrb: ptr mrb_state; val: mrb_value): mrb_value {.importc.} | |
proc mrb_inspect*(mrb: ptr mrb_state; obj: mrb_value): mrb_value {.importc.} | |
proc mrb_eql*(mrb: ptr mrb_state; obj1: mrb_value; obj2: mrb_value): mrb_bool {.importc.} | |
proc mrb_garbage_collect*(a2: ptr mrb_state) {.importc.} | |
proc mrb_full_gc*(a2: ptr mrb_state) {.importc.} | |
proc mrb_incremental_gc*(a2: ptr mrb_state) {.importc.} | |
proc mrb_gc_arena_save*(a2: ptr mrb_state): cint {.importc.} | |
proc mrb_gc_arena_restore*(a2: ptr mrb_state; a3: cint) {.importc.} | |
proc mrb_gc_mark*(a2: ptr mrb_state; a3: ptr RBasic) {.importc.} | |
template mrb_gc_mark_value*(mrb, val: expr): stmt = | |
if mrb_type(val) >= MRB_TT_HAS_BASIC: | |
mrb_gc_mark((mrb), mrb_basic_ptr(val)) | |
proc mrb_field_write_barrier*(a2: ptr mrb_state; a3: ptr RBasic; | |
a4: ptr RBasic) {.importc.} | |
template mrb_field_write_barrier_value*(mrb, obj, val: expr): stmt = | |
if (val.tt >= MRB_TT_HAS_BASIC): | |
mrb_field_write_barrier((mrb), (obj), mrb_basic_ptr(val)) | |
proc mrb_write_barrier*(a2: ptr mrb_state; a3: ptr RBasic) {.importc.} | |
proc mrb_check_convert_type*(mrb: ptr mrb_state; val: mrb_value; | |
typ: mrb_vtype; tname: cstring; methd: cstring): mrb_value {.importc.} | |
proc mrb_any_to_s*(mrb: ptr mrb_state; obj: mrb_value): mrb_value {.importc.} | |
proc mrb_obj_classname*(mrb: ptr mrb_state; obj: mrb_value): cstring {.importc.} | |
proc mrb_obj_class*(mrb: ptr mrb_state; obj: mrb_value): ptr RClass {.importc.} | |
proc mrb_class_path*(mrb: ptr mrb_state; c: ptr RClass): mrb_value {.importc.} | |
proc mrb_convert_type*(mrb: ptr mrb_state; val: mrb_value; typ: mrb_vtype; | |
tname: cstring; methd: cstring): mrb_value {.importc.} | |
proc mrb_obj_is_kind_of*(mrb: ptr mrb_state; obj: mrb_value; c: ptr RClass): mrb_bool {.importc.} | |
proc mrb_obj_inspect*(mrb: ptr mrb_state; self: mrb_value): mrb_value {.importc.} | |
proc mrb_obj_clone*(mrb: ptr mrb_state; self: mrb_value): mrb_value {.importc.} """ | |
# need to include <ctype.h> to use these macros | |
discard """ when not(defined(ISPRINT)): | |
##define ISASCII(c) isascii((int)(unsigned char)(c)) | |
template ISASCII*(c: expr): expr = | |
1 | |
template ISPRINT*(c: expr): expr = | |
(ISASCII(c) and isprint(cast[cint](cast[cuchar]((c))))) | |
template ISSPACE*(c: expr): expr = | |
(ISASCII(c) and isspace(cast[cint](cast[cuchar]((c))))) | |
template ISUPPER*(c: expr): expr = | |
(ISASCII(c) and isupper(cast[cint](cast[cuchar]((c))))) | |
template ISLOWER*(c: expr): expr = | |
(ISASCII(c) and islower(cast[cint](cast[cuchar]((c))))) | |
template ISALNUM*(c: expr): expr = | |
(ISASCII(c) and isalnum(cast[cint](cast[cuchar]((c))))) | |
template ISALPHA*(c: expr): expr = | |
(ISASCII(c) and isalpha(cast[cint](cast[cuchar]((c))))) | |
template ISDIGIT*(c: expr): expr = | |
(ISASCII(c) and isdigit(cast[cint](cast[cuchar]((c))))) | |
template ISXDIGIT*(c: expr): expr = | |
(ISASCII(c) and isxdigit(cast[cint](cast[cuchar]((c))))) | |
template TOUPPER*(c: expr): expr = | |
(if ISASCII(c): toupper(cast[cint](cast[cuchar]((c)))) else: (c)) | |
template TOLOWER*(c: expr): expr = | |
(if ISASCII(c): tolower(cast[cint](cast[cuchar]((c)))) else: (c)) """ | |
proc mrb_exc_new*(mrb: ptr mrb_state; c: ptr RClass; pointr: cstring; len: csize_t): mrb_value | |
proc mrb_exc_raise*(mrb: ptr mrb_state; exc: mrb_value) | |
proc mrb_raise*(mrb: ptr mrb_state; c: ptr RClass; msg: cstring) | |
proc mrb_raisef*(mrb: ptr mrb_state; c: ptr RClass; fmt: cstring) | |
proc mrb_name_error*(mrb: ptr mrb_state; id: mrb_sym; fmt: cstring) | |
proc mrb_frozen_error*(mrb: ptr mrb_state; frozen_obj: pointer) | |
proc mrb_argnum_error*(mrb: ptr mrb_state; argc: mrb_int; min: int; max: int) | |
proc mrb_warn*(mrb: ptr mrb_state; fmt: cstring) | |
proc mrb_bug*(mrb: ptr mrb_state; fmt: cstring) | |
proc mrb_print_backtrace*(mrb: ptr mrb_state) | |
proc mrb_print_error*(mrb: ptr mrb_state) | |
proc mrb_vformat*(mrb: ptr mrb_state; format: cstring; ap: va_list): mrb_value {.cdecl.} | |
discard """ proc mrb_exc_new*(mrb: ptr mrb_state; c: ptr RClass; pointr: cstring; len: clong): mrb_value {.importc.} | |
proc mrb_exc_raise*(mrb: ptr mrb_state; exc: mrb_value) {.importc.} | |
proc mrb_raise*(mrb: ptr mrb_state; c: ptr RClass; msg: cstring) {.importc.} | |
proc mrb_raisef*(mrb: ptr mrb_state; c: ptr RClass; fmt: cstring) {.varargs,importc.} | |
proc mrb_name_error*(mrb: ptr mrb_state; id: mrb_sym; fmt: cstring) {.varargs,importc.} | |
proc mrb_warn*(mrb: ptr mrb_state; fmt: cstring) {.varargs,importc.} | |
proc mrb_bug*(mrb: ptr mrb_state; fmt: cstring) {.varargs,importc.} | |
proc mrb_print_backtrace*(mrb: ptr mrb_state) {.importc.} | |
proc mrb_print_error*(mrb: ptr mrb_state) {.importc.} """ | |
# macros to get typical exception objects | |
# note: | |
# + those E_* macros requires mrb_state* variable named mrb. | |
# + exception objects obtained from those macros are local to mrb | |
discard """ # | |
template E_RUNTIME_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "RuntimeError")) | |
template E_TYPE_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "TypeError")) | |
template E_ARGUMENT_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "ArgumentError")) | |
template E_INDEX_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "IndexError")) | |
template E_RANGE_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "RangeError")) | |
template E_NAME_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "NameError")) | |
template E_NOMETHOD_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "NoMethodError")) | |
template E_SCRIPT_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "ScriptError")) | |
template E_SYNTAX_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "SyntaxError")) | |
template E_LOCALJUMP_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "LocalJumpError")) | |
template E_REGEXP_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "RegexpError")) | |
template E_NOTIMP_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "NotImplementedError")) | |
template E_FLOATDOMAIN_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "FloatDomainError")) | |
template E_KEY_ERROR* (mrb:expr): expr = (mrb_class_get(mrb, "KeyError")) | |
""" | |
proc mrb_yield*(mrb: ptr mrb_state; b: mrb_value; arg: mrb_value): mrb_value | |
proc mrb_yield_argv*(mrb: ptr mrb_state; b: mrb_value; argc: cint; | |
argv: ptr mrb_value): mrb_value | |
proc mrb_yield_with_class*(mrb: ptr mrb_state; b: mrb_value; argc: cint; | |
argv: ptr mrb_value; c: ptr RClass): mrb_value | |
proc mrb_yield_cont*(mrb: ptr mrb_state; b: mrb_value; self: mrb_value; | |
argc: cint; argv: ptr mrb_value): mrb_value | |
proc mrb_gc_protect*(mrb: ptr mrb_state; obj: mrb_value) | |
proc mrb_gc_register*(mrb: ptr mrb_state; obj: mrb_value) | |
proc mrb_gc_unregister*(mrb: ptr mrb_state; obj: mrb_value) | |
proc mrb_to_int*(mrb: ptr mrb_state; val: mrb_value): mrb_value | |
proc mrb_to_str*(mrb: ptr mrb_state; val: mrb_value): mrb_value | |
proc mrb_check_type*(mrb: ptr mrb_state; x: mrb_value; t: mrb_vtype) | |
proc mrb_check_frozen*(mrb: ptr mrb_state; o: pointer) | |
proc mrb_define_alias*(mrb: ptr mrb_state; c: ptr RClass; a: cstring; | |
b: cstring) | |
proc mrb_define_alias_id*(mrb: ptr mrb_state; c: ptr RClass; a: mrb_sym; | |
b: mrb_sym) | |
proc mrb_class_name*(mrb: ptr mrb_state; klass: ptr RClass): cstring | |
proc mrb_define_global_const*(mrb: ptr mrb_state; name: cstring; | |
val: mrb_value) | |
proc mrb_attr_get*(mrb: ptr mrb_state; obj: mrb_value; id: mrb_sym): mrb_value | |
proc mrb_respond_to*(mrb: ptr mrb_state; obj: mrb_value; mid: mrb_sym): mrb_bool | |
proc mrb_obj_is_instance_of*(mrb: ptr mrb_state; obj: mrb_value; c: ptr RClass): mrb_bool | |
proc mrb_func_basic_p*(mrb: ptr mrb_state; obj: mrb_value; mid: mrb_sym; f: mrb_func_t): mrb_bool | |
discard """ proc mrb_yield*(mrb: ptr mrb_state; b: mrb_value; arg: mrb_value): mrb_value {.importc.} | |
proc mrb_yield_argv*(mrb: ptr mrb_state; b: mrb_value; argc: cint; | |
argv: ptr mrb_value): mrb_value {.importc.} | |
proc mrb_gc_protect*(mrb: ptr mrb_state; obj: mrb_value) {.importc.} | |
proc mrb_to_int*(mrb: ptr mrb_state; val: mrb_value): mrb_value {.importc.} | |
proc mrb_check_type*(mrb: ptr mrb_state; x: mrb_value; t: mrb_vtype) {.importc.} | |
type | |
call_type* {.size: sizeof(cint).} = enum | |
CALL_PUBLIC, CALL_FCALL, CALL_VCALL, CALL_TYPE_MAX | |
proc mrb_define_alias*(mrb: ptr mrb_state; klass: ptr RClass; name1: cstring; | |
name2: cstring) {.importc.} | |
proc mrb_class_name*(mrb: ptr mrb_state; klass: ptr RClass): cstring {.importc.} | |
proc mrb_define_global_const*(mrb: ptr mrb_state; name: cstring; | |
val: mrb_value) {.importc.} | |
proc mrb_attr_get*(mrb: ptr mrb_state; obj: mrb_value; id: mrb_sym): mrb_value {.importc.} | |
proc mrb_respond_to*(mrb: ptr mrb_state; obj: mrb_value; mid: mrb_sym): mrb_bool {.importc.} | |
proc mrb_obj_is_instance_of*(mrb: ptr mrb_state; obj: mrb_value; c: ptr RClass): mrb_bool {.importc.} | |
# memory pool implementation | |
proc mrb_pool_open*(a2: ptr mrb_state): ptr mrb_pool {.importc.} | |
proc mrb_pool_close*(a2: ptr mrb_pool) {.importc.} | |
proc mrb_pool_alloc*(a2: ptr mrb_pool; a3: csize): pointer {.importc.} | |
proc mrb_pool_realloc*(a2: ptr mrb_pool; a3: pointer; oldlen: csize; | |
newlen: csize): pointer {.importc.} | |
proc mrb_pool_can_realloc*(a2: ptr mrb_pool; a3: pointer; a4: csize): mrb_bool {.importc.} | |
proc mrb_alloca*(mrb: ptr mrb_state; a3: csize): pointer {.importc.} | |
""" | |
proc mrb_fiber_resume*(mrb: ptr mrb_state; fib: mrb_value; argc: mrb_int; argv: ptr mrb_value): mrb_value | |
proc mrb_fiber_yield*(mrb: ptr mrb_state; argc: mrb_int; argv: ptr mrb_value): mrb_value | |
proc mrb_fiber_alive_p*(mrb: ptr mrb_state; fib: mrb_value): mrb_value | |
proc mrb_stack_extend*(mrb: ptr mrb_state; i: mrb_int) | |
proc mrb_pool_open*(mrb: ptr mrb_state): ptr mrb_pool | |
proc mrb_pool_close*(p: ptr mrb_pool) | |
proc mrb_pool_alloc*(p: ptr mrb_pool; a3: csize_t): pointer | |
proc mrb_pool_realloc*(a2: ptr mrb_pool; a3: pointer; oldlen: csize_t; | |
newlen: csize_t): pointer | |
proc mrb_pool_can_realloc*(a2: ptr mrb_pool; a3: pointer; a4: csize_t): mrb_bool | |
proc mrb_alloca*(mrb: ptr mrb_state; a3: csize_t): pointer | |
proc mrb_state_atexit*(mrb: ptr mrb_state; f: mrb_atexit_func) | |
proc mrb_show_version*(mrb: ptr mrb_state) | |
proc mrb_show_copyright*(mrb: ptr mrb_state) | |
proc mrb_format*(mrb: ptr mrb_state; format: cstring): mrb_value | |
# compile.h | |
{.pop.} | |
{.push header:"<mruby/compile.h>".} | |
#mrb_value mrb_load_string(mrb_state *mrb, const char *s); | |
proc mrb_load_string* (mrb:PState; s:cstring): mrb_value | |
{.pop.} # end <mruby/compile.h> | |
{.pop.} # end <mruby.h> | |
{.pop.} # end importc | |
############################################################ | |
when isMainModule: | |
var state: PState | |
state = mrb_open() | |
state.mrb_show_version() | |
state.mrb_show_copyright() | |
import os | |
if fileExists "main.rb": | |
let v: mrb_value = state.mrb_load_string readAll(open("main.rb")) | |
discard v | |
else: | |
echo "main.rb not found." | |
state.mrb_close() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--passC:"-I$HOME/GitWorkspace/mruby/include" | |
--passL:"-L$HOME/GitWorkspace/mruby/build/host/lib" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment