add destroy_() for better support reference API
This commit is contained in:
parent
e5f3983952
commit
c1e4069706
2 changed files with 25 additions and 7 deletions
31
src/create.c
31
src/create.c
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue