Refractor and cleanup binding logic
This commit is contained in:
@@ -29,6 +29,7 @@ struct Wrapper {
|
||||
|
||||
#define DEF_RB(NAME, FN_FREE, FN_INIT) \
|
||||
static void NAME##_free(mrb_state *mrb, void *ptr) { \
|
||||
UNUSED(mrb); \
|
||||
int id = ((Wrapper *)ptr)->id; \
|
||||
FN_FREE; \
|
||||
delete (Wrapper *)ptr; \
|
||||
@@ -38,6 +39,7 @@ struct Wrapper {
|
||||
NAME##_free \
|
||||
}; \
|
||||
static mrb_value NAME##_init(mrb_state *mrb, mrb_value self) { \
|
||||
UNUSED(mrb); \
|
||||
Wrapper *s = new Wrapper(); \
|
||||
FN_INIT; \
|
||||
DATA_PTR(self) = s; \
|
||||
@@ -45,6 +47,19 @@ struct Wrapper {
|
||||
return self; \
|
||||
}
|
||||
|
||||
#define ADD_METHOD(NAME, METHOD, FUNC, ARGS) \
|
||||
mrb_define_method(Ruby::mrb, NAME##_class, METHOD, FUNC, ARGS);
|
||||
|
||||
#define DEF_CLASS(NAME, ARGS) \
|
||||
RClass *NAME##_class = mrb_define_class(Ruby::mrb, #NAME, Ruby::mrb->object_class); \
|
||||
ADD_METHOD(NAME, "initialize", NAME##_init, ARGS);
|
||||
|
||||
#define DEF_MODULE(NAME) \
|
||||
RClass *NAME##_module = mrb_define_module(Ruby::mrb, #NAME);
|
||||
|
||||
#define ADD_MODULE_METHOD(MODULE, METHOD, FUNC, ARGS) \
|
||||
mrb_define_class_method(Ruby::mrb, MODULE##_module, METHOD, FUNC, ARGS);
|
||||
|
||||
inline int get_id(mrb_value self) {
|
||||
return ((Wrapper *)DATA_PTR(self))->id;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user