Resolve macros and cleanup

This commit is contained in:
2026-05-05 23:10:14 +01:00
parent 7e9a5a7c4f
commit 08a642e07a
3 changed files with 445 additions and 252 deletions
-28
View File
@@ -31,34 +31,6 @@ struct Wrapper {
int id;
};
#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; \
} \
static const struct mrb_data_type NAME##_type = { \
#NAME, \
NAME##_free \
}; \
static mrb_value NAME##_init(mrb_state *mrb, mrb_value self) { \
UNUSED(mrb); \
Wrapper *old = (Wrapper *)DATA_PTR(self); \
if (old) \
mrb_free(mrb, old); \
mrb_data_init(self, nullptr, &NAME##_type); \
Wrapper *s = new Wrapper(); \
FN_INIT; \
mrb_data_init(self, s, &NAME##_type); \
return self; \
} \
inline int get_id_##NAME(mrb_state *mrb, mrb_value self) { \
Wrapper *wrapper; \
Data_Get_Struct(mrb, self, &NAME##_type, wrapper); \
return wrapper->id; \
}
#define ADD_METHOD(NAME, METHOD, FUNC, ARGS) \
mrb_define_method(Ruby::mrb, NAME##_class, METHOD, FUNC, ARGS);