14#ifndef MRBC_SRC_CLASS_H_
15#define MRBC_SRC_CLASS_H_
34#define MRBC_TRAVERSE_NEST_LEVEL 3
51#define MRBC_CLASS(cls) ((mrbc_class *)(&mrbc_class_##cls))
75#define MRBC_INSTANCE_DATA_PTR(v, t) ((t *)((v)->instance->data))
94#if defined(MRBC_DEBUG)
119#if defined(MRBC_DEBUG)
144#if defined(MRBC_DEBUG)
197#include "_autogen_builtin_class.h"
200#define mrbc_class_object ((struct RClass*)(&mrbc_class_Object))
248 assert(!
"Invalid value type.");
313 for(
int i = 0; i < list_size; i++ ) {
mrbc_value mrbc_instance_new(struct VM *vm, mrbc_class *cls, int size)
mrbc_class * mrbc_get_class_by_name(const char *name)
void mrbc_init_class(void)
mrbc_class * mrbc_define_module_under(struct VM *vm, const mrbc_class *outer, const char *name)
void c_ineffect(struct VM *vm, mrbc_value v[], int argc)
int mrbc_obj_is_kind_of(const mrbc_value *obj, const mrbc_class *tcls)
void mrbc_define_method(struct VM *vm, mrbc_class *cls, const char *name, mrbc_func_t cfunc)
mrbc_value mrbc_instance_getiv(mrbc_value *obj, mrbc_sym sym_id)
mrbc_class * mrbc_traverse_class_tree(mrbc_class *cls, mrbc_class *nest_buf[], int *nest_idx)
void mrbc_instance_delete(mrbc_value *v)
mrbc_class * mrbc_define_module(struct VM *vm, const char *name)
int mrbc_run_mrblib(const void *bytecode)
void mrbc_instance_setiv(mrbc_value *obj, mrbc_sym sym_id, mrbc_value *v)
mrbc_method * mrbc_find_method(mrbc_method *r_method, mrbc_class *cls, mrbc_sym sym_id)
mrbc_value mrbc_send(struct VM *vm, mrbc_value *v, int argc, mrbc_value *recv, const char *method_name, int n_params,...)
mrbc_class * mrbc_define_class_under(struct VM *vm, const mrbc_class *outer, const char *name, mrbc_class *super)
mrbc_class *const mrbc_class_tbl[MRBC_TT_MAXVAL+1]
mrbc_class * mrbc_define_class(struct VM *vm, const char *name, mrbc_class *super)
mrbc_class * mrbc_traverse_class_tree_skip(mrbc_class *nest_buf[], int *nest_idx)
static void mrbc_define_destructor(mrbc_class *cls, void(*destructor)(mrbc_value *))
struct RInstance mrbc_instance
Instance object.
struct RMethod mrbc_method
Method management structure.
static mrbc_value * mrbc_instance_getiv_p(mrbc_value *obj, mrbc_sym sym_id)
static mrbc_class * find_class_by_object(const mrbc_value *obj)
static void mrbc_define_method_list(struct VM *vm, mrbc_class *cls, const struct MRBC_DEFINE_METHOD_LIST list[], int list_size)
struct RInstance mrb_instance
struct RClass mrbc_class
Class object.
mrbc_value * mrbc_kv_get(mrbc_kv_handle *kvh, mrbc_sym sym_id)
mruby/c Key(Symbol) - Value store.
IREP Internal REPresentation.
for mrbc_define_method_list function.
const char * name
method name
const mrbc_func_t cfunc
pointer to method function
unsigned int flag_builtin
is built-in class? (= 1)
uint8_t num_builtin_method
num of built-in method.
unsigned int flag_module
is module?
mrbc_sym sym_id
class name's symbol ID
struct RClass * aliased
aliased class or module.
const mrbc_sym * method_symbols
built-in method sym-id table.
unsigned int flag_alias
is alias class?
struct RMethod * method_link
pointer to method link.
struct RClass * super
pointer to super class.
const mrbc_func_t * method_functions
built-in method function table.
Built-in No method class object.
unsigned int flag_alias
is alias class?
struct RClass * super
pointer to super class.
unsigned int flag_builtin
is built-in class? (= 1)
mrbc_sym sym_id
class name's symbol ID
struct RClass * aliased
aliased class or module.
uint8_t num_builtin_method
num of built-in method.
struct RMethod * method_link
pointer to method link.
unsigned int flag_module
is module?
struct RMethod * method_link
pointer to method link.
unsigned int flag_alias
is module alias?
struct RClass * super
pointer to super class.
struct RClass * aliased
aliased class or module.
unsigned int flag_builtin
is built-in class? (= 0)
mrbc_sym sym_id
class name's symbol ID
void(* destructor)(mrbc_value *)
specify a destructor if need.
uint8_t num_builtin_method
num of built-in method.
unsigned int flag_module
is module?
struct RClass * cls
exception class.
struct RClass * cls
pointer to class of this object.
struct RKeyValueHandle ivar
instance variable.
uint8_t data[]
extended data
Method management structure.
struct RClass * cls
return value for mrbc_find_method.
mrbc_sym sym_id
function names symbol ID
uint8_t type
M:OP_DEF or OP_ALIAS, m:mrblib or define_method()
struct IREP * irep
to IREP for ruby proc.
struct RMethod * next
link to next method.
uint8_t c_func
0:IREP, 1:C Func, 2:C Func (built-in)
mrbc_func_t func
to C function.
struct RException * exception
struct RInstance * instance
mruby/c value definitions
void(* mrbc_func_t)(struct VM *vm, struct RObject *v, int argc)
int16_t mrbc_sym
mruby/c symbol ID
@ MRBC_TT_EXCEPTION
Exception.
@ MRBC_TT_OBJECT
General instance.
struct RObject mrbc_value
Global configuration of mruby/c VM's.