add destroy_() for better support reference API

This commit is contained in:
Rongsong Shen 2026-02-14 10:26:22 +08:00
parent e5f3983952
commit c1e4069706
2 changed files with 25 additions and 7 deletions

View file

@ -56,10 +56,32 @@ var makeInstance(typeinfo_t* type, ...)
return obj->data;
}
static void objDestroy_(meta_obj_t* obj, obj_destroy_fn_t killer)
{
void* p = NULL;
if (killer != NULL) {
killer(obj);
}
p = RTTI_OBJ_TO_PRIV(obj);
free(p);
}
void destroy_(var v, obj_destroy_fn_t killer)
{
meta_obj_t* obj = RTTI_DATA_TO_OBJ(v);
if (RTTI_OBJ_INVALID(obj)) {
return;
}
objDestroy_(obj, killer);
}
void destroy(var v)
{
typeinfo_t* type = NULL;
void* p = NULL;
meta_obj_t* obj = NULL;
obj = RTTI_DATA_TO_OBJ(v);
@ -72,12 +94,7 @@ void destroy(var v)
return;
}
if (type->destroy != NULL) {
type->destroy(obj);
}
p = RTTI_OBJ_TO_PRIV(obj);
free(p);
objDestroy_(obj, type->destroy);
return;
}