mirror of https://github.com/mgba-emu/mgba.git
Scripting: Clean up function binding CPP
This commit is contained in:
parent
7fb7d53c5d
commit
2e00104d1a
|
@ -141,16 +141,7 @@ CXX_GUARD_START
|
||||||
.free = NULL, \
|
.free = NULL, \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define mSCRIPT_BIND_FUNCTION(NAME, RETURN, FUNCTION, NPARAMS, ...) \
|
#define _mSCRIPT_BIND_FUNCTION(NAME, NRET, RETURN, NPARAMS, ...) \
|
||||||
static bool _binding_ ## NAME(struct mScriptFrame* frame, void* ctx) { \
|
|
||||||
UNUSED(ctx); \
|
|
||||||
mSCRIPT_POP_ ## NPARAMS(&frame->arguments, __VA_ARGS__); \
|
|
||||||
if (mScriptListSize(&frame->arguments)) { \
|
|
||||||
return false; \
|
|
||||||
} \
|
|
||||||
_mSCRIPT_CALL(RETURN, FUNCTION, NPARAMS); \
|
|
||||||
return true; \
|
|
||||||
} \
|
|
||||||
static const struct mScriptType _type_ ## NAME = { \
|
static const struct mScriptType _type_ ## NAME = { \
|
||||||
.base = mSCRIPT_TYPE_FUNCTION, \
|
.base = mSCRIPT_TYPE_FUNCTION, \
|
||||||
.details = { \
|
.details = { \
|
||||||
|
@ -160,8 +151,8 @@ CXX_GUARD_START
|
||||||
.entries = { _mAPPLY(mSCRIPT_PREFIX_ ## NPARAMS(mSCRIPT_TYPE_MS_, __VA_ARGS__)) } \
|
.entries = { _mAPPLY(mSCRIPT_PREFIX_ ## NPARAMS(mSCRIPT_TYPE_MS_, __VA_ARGS__)) } \
|
||||||
}, \
|
}, \
|
||||||
.returnType = { \
|
.returnType = { \
|
||||||
.count = 1, \
|
.count = NRET, \
|
||||||
.entries = { mSCRIPT_TYPE_MS_ ## RETURN } \
|
.entries = { RETURN } \
|
||||||
}, \
|
}, \
|
||||||
}, \
|
}, \
|
||||||
} \
|
} \
|
||||||
|
@ -175,7 +166,19 @@ CXX_GUARD_START
|
||||||
.value = { \
|
.value = { \
|
||||||
.opaque = &_function_ ## NAME \
|
.opaque = &_function_ ## NAME \
|
||||||
} \
|
} \
|
||||||
};
|
}
|
||||||
|
|
||||||
|
#define mSCRIPT_BIND_FUNCTION(NAME, RETURN, FUNCTION, NPARAMS, ...) \
|
||||||
|
static bool _binding_ ## NAME(struct mScriptFrame* frame, void* ctx) { \
|
||||||
|
UNUSED(ctx); \
|
||||||
|
mSCRIPT_POP_ ## NPARAMS(&frame->arguments, __VA_ARGS__); \
|
||||||
|
if (mScriptListSize(&frame->arguments)) { \
|
||||||
|
return false; \
|
||||||
|
} \
|
||||||
|
_mSCRIPT_CALL(RETURN, FUNCTION, NPARAMS); \
|
||||||
|
return true; \
|
||||||
|
} \
|
||||||
|
_mSCRIPT_BIND_FUNCTION(NAME, 1, mSCRIPT_TYPE_MS_ ## RETURN, NPARAMS, __VA_ARGS__)
|
||||||
|
|
||||||
#define mSCRIPT_BIND_VOID_FUNCTION(NAME, FUNCTION, NPARAMS, ...) \
|
#define mSCRIPT_BIND_VOID_FUNCTION(NAME, FUNCTION, NPARAMS, ...) \
|
||||||
static bool _binding_ ## NAME(struct mScriptFrame* frame, void* ctx) { \
|
static bool _binding_ ## NAME(struct mScriptFrame* frame, void* ctx) { \
|
||||||
|
@ -187,30 +190,7 @@ CXX_GUARD_START
|
||||||
_mSCRIPT_CALL_VOID(FUNCTION, NPARAMS); \
|
_mSCRIPT_CALL_VOID(FUNCTION, NPARAMS); \
|
||||||
return true; \
|
return true; \
|
||||||
} \
|
} \
|
||||||
static const struct mScriptType _type_ ## NAME = { \
|
_mSCRIPT_BIND_FUNCTION(NAME, 0, , NPARAMS, __VA_ARGS__)
|
||||||
.base = mSCRIPT_TYPE_FUNCTION, \
|
|
||||||
.details = { \
|
|
||||||
.function = { \
|
|
||||||
.parameters = { \
|
|
||||||
.count = NPARAMS, \
|
|
||||||
.entries = { _mAPPLY(mSCRIPT_PREFIX_ ## NPARAMS(mSCRIPT_TYPE_MS_, __VA_ARGS__)) } \
|
|
||||||
}, \
|
|
||||||
.returnType = { \
|
|
||||||
.count = 0, \
|
|
||||||
}, \
|
|
||||||
}, \
|
|
||||||
} \
|
|
||||||
}; \
|
|
||||||
static struct mScriptFunction _function_ ## NAME = { \
|
|
||||||
.call = _binding_ ## NAME \
|
|
||||||
}; \
|
|
||||||
const struct mScriptValue NAME = { \
|
|
||||||
.type = &_type_ ## NAME, \
|
|
||||||
.refs = mSCRIPT_VALUE_UNREF, \
|
|
||||||
.value = { \
|
|
||||||
.opaque = &_function_ ## NAME \
|
|
||||||
} \
|
|
||||||
};
|
|
||||||
|
|
||||||
#define mSCRIPT_MAKE(TYPE, FIELD, VALUE) (struct mScriptValue) { \
|
#define mSCRIPT_MAKE(TYPE, FIELD, VALUE) (struct mScriptValue) { \
|
||||||
.type = (TYPE), \
|
.type = (TYPE), \
|
||||||
|
|
Loading…
Reference in New Issue