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 { enum {
mSCRIPT_VALUE_FLAG_FREE_BUFFER = 1 mSCRIPT_VALUE_FLAG_FREE_BUFFER = 1,
mSCRIPT_VALUE_FLAG_DEINIT = 2,
}; };
struct mScriptType; struct mScriptType;

View File

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