mirror of https://github.com/mgba-emu/mgba.git
Scripting: Separate object freeing and deiniting
This commit is contained in:
parent
42527b4c5e
commit
ed69b9f741
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue