mirror of https://github.com/mgba-emu/mgba.git
Scripting: Add flag for freeing the value buffer
This commit is contained in:
parent
0c28e34a7e
commit
c296ea79ff
|
@ -135,6 +135,7 @@ CXX_GUARD_START
|
||||||
struct mScriptValue* _val = mScriptListAppend(STACK); \
|
struct mScriptValue* _val = mScriptListAppend(STACK); \
|
||||||
_val->type = mSCRIPT_TYPE_MS_ ## TYPE; \
|
_val->type = mSCRIPT_TYPE_MS_ ## TYPE; \
|
||||||
_val->refs = mSCRIPT_VALUE_UNREF; \
|
_val->refs = mSCRIPT_VALUE_UNREF; \
|
||||||
|
_val->flags = 0; \
|
||||||
_val->value.mSCRIPT_TYPE_FIELD_ ## TYPE = NAME; \
|
_val->value.mSCRIPT_TYPE_FIELD_ ## TYPE = NAME; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
@ -444,6 +445,10 @@ enum mScriptClassInitType {
|
||||||
mSCRIPT_CLASS_INIT_INHERIT,
|
mSCRIPT_CLASS_INIT_INHERIT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
mSCRIPT_VALUE_FLAG_FREE_BUFFER = 1
|
||||||
|
};
|
||||||
|
|
||||||
struct mScriptType;
|
struct mScriptType;
|
||||||
extern const struct mScriptType mSTVoid;
|
extern const struct mScriptType mSTVoid;
|
||||||
extern const struct mScriptType mSTSInt8;
|
extern const struct mScriptType mSTSInt8;
|
||||||
|
@ -522,6 +527,7 @@ struct mScriptType {
|
||||||
struct mScriptValue {
|
struct mScriptValue {
|
||||||
const struct mScriptType* type;
|
const struct mScriptType* type;
|
||||||
int refs;
|
int refs;
|
||||||
|
uint32_t flags;
|
||||||
union {
|
union {
|
||||||
int32_t s32;
|
int32_t s32;
|
||||||
uint32_t u32;
|
uint32_t u32;
|
||||||
|
|
|
@ -636,6 +636,7 @@ struct mScriptValue* mScriptValueAlloc(const struct mScriptType* type) {
|
||||||
struct mScriptValue* val = malloc(sizeof(*val));
|
struct mScriptValue* val = malloc(sizeof(*val));
|
||||||
val->refs = 1;
|
val->refs = 1;
|
||||||
val->type = type;
|
val->type = type;
|
||||||
|
val->flags = 0;
|
||||||
if (type->alloc) {
|
if (type->alloc) {
|
||||||
type->alloc(val);
|
type->alloc(val);
|
||||||
} else {
|
} else {
|
||||||
|
@ -662,6 +663,8 @@ void mScriptValueDeref(struct mScriptValue* val) {
|
||||||
}
|
}
|
||||||
if (val->type->free) {
|
if (val->type->free) {
|
||||||
val->type->free(val);
|
val->type->free(val);
|
||||||
|
} else if (val->flags & mSCRIPT_VALUE_FLAG_FREE_BUFFER) {
|
||||||
|
free(val->value.opaque);
|
||||||
}
|
}
|
||||||
free(val);
|
free(val);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue