Refractor and cleanup binding logic

This commit is contained in:
2026-05-05 16:19:49 +01:00
parent 6a29c113e0
commit d362bbc114
7 changed files with 357 additions and 306 deletions
+15
View File
@@ -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;
}