Scripting: Separate object freeing and deiniting

This commit is contained in:
Vicki Pfau 2023-04-02 03:32:20 -07:00
parent 42527b4c5e
commit ed69b9f741
2 changed files with 5 additions and 2 deletions

View File

@ -164,7 +164,8 @@ enum mScriptClassInitType {
};
enum {
mSCRIPT_VALUE_FLAG_FREE_BUFFER = 1
mSCRIPT_VALUE_FLAG_FREE_BUFFER = 1,
mSCRIPT_VALUE_FLAG_DEINIT = 2,
};
struct mScriptType;

View File

@ -1568,7 +1568,7 @@ void mScriptObjectFree(struct mScriptValue* value) {
if (value->type->base != mSCRIPT_TYPE_OBJECT) {
return;
}
if (value->flags & mSCRIPT_VALUE_FLAG_FREE_BUFFER) {
if (value->flags & (mSCRIPT_VALUE_FLAG_DEINIT | mSCRIPT_VALUE_FLAG_FREE_BUFFER)) {
mScriptClassInit(value->type->details.cls);
if (value->type->details.cls->free) {
struct mScriptValue deinitMember;
@ -1584,6 +1584,8 @@ void mScriptObjectFree(struct mScriptValue* value) {
mScriptFrameDeinit(&frame);
}
}
}
if (value->flags & mSCRIPT_VALUE_FLAG_FREE_BUFFER) {
free(value->value.opaque);
}
}