diff --git a/include/mgba-util/macros.h b/include/mgba-util/macros.h index d9f208df9..1ab494709 100644 --- a/include/mgba-util/macros.h +++ b/include/mgba-util/macros.h @@ -8,7 +8,8 @@ #define _mCPP_CAT(A, B) A ## B -#define _mCALL(FN, ...) FN(__VA_ARGS__) +#define _mIDENT(...) __VA_ARGS__ +#define _mCALL(FN, ...) _mIDENT(FN(__VA_ARGS__)) #define _mCAT(A, B) _mCPP_CAT(A, B) #define _mSTRINGIFY(X, ...) #X @@ -36,25 +37,25 @@ #define _mEVEN_0(...) #define _mEVEN_1(A, B, ...) A -#define _mEVEN_2(A, B, ...) A, _mEVEN_1(__VA_ARGS__) -#define _mEVEN_3(A, B, ...) A, _mEVEN_2(__VA_ARGS__) -#define _mEVEN_4(A, B, ...) A, _mEVEN_3(__VA_ARGS__) -#define _mEVEN_5(A, B, ...) A, _mEVEN_4(__VA_ARGS__) -#define _mEVEN_6(A, B, ...) A, _mEVEN_5(__VA_ARGS__) -#define _mEVEN_7(A, B, ...) A, _mEVEN_6(__VA_ARGS__) -#define _mEVEN_8(A, B, ...) A, _mEVEN_7(__VA_ARGS__) -#define _mEVEN_9(A, B, ...) A, _mEVEN_7(__VA_ARGS__) +#define _mEVEN_2(A, B, ...) A, _mIDENT(_mEVEN_1(__VA_ARGS__)) +#define _mEVEN_3(A, B, ...) A, _mIDENT(_mEVEN_2(__VA_ARGS__)) +#define _mEVEN_4(A, B, ...) A, _mIDENT(_mEVEN_3(__VA_ARGS__)) +#define _mEVEN_5(A, B, ...) A, _mIDENT(_mEVEN_4(__VA_ARGS__)) +#define _mEVEN_6(A, B, ...) A, _mIDENT(_mEVEN_5(__VA_ARGS__)) +#define _mEVEN_7(A, B, ...) A, _mIDENT(_mEVEN_6(__VA_ARGS__)) +#define _mEVEN_8(A, B, ...) A, _mIDENT(_mEVEN_7(__VA_ARGS__)) +#define _mEVEN_9(A, B, ...) A, _mIDENT(_mEVEN_7(__VA_ARGS__)) #define _mODD_0(...) #define _mODD_1(A, B, ...) B -#define _mODD_2(A, B, ...) B, _mODD_1(__VA_ARGS__) -#define _mODD_3(A, B, ...) B, _mODD_2(__VA_ARGS__) -#define _mODD_4(A, B, ...) B, _mODD_3(__VA_ARGS__) -#define _mODD_5(A, B, ...) B, _mODD_4(__VA_ARGS__) -#define _mODD_6(A, B, ...) B, _mODD_5(__VA_ARGS__) -#define _mODD_7(A, B, ...) B, _mODD_6(__VA_ARGS__) -#define _mODD_8(A, B, ...) B, _mODD_7(__VA_ARGS__) -#define _mODD_9(A, B, ...) B, _mODD_7(__VA_ARGS__) +#define _mODD_2(A, B, ...) B, _mIDENT(_mODD_1(__VA_ARGS__)) +#define _mODD_3(A, B, ...) B, _mIDENT(_mODD_2(__VA_ARGS__)) +#define _mODD_4(A, B, ...) B, _mIDENT(_mODD_3(__VA_ARGS__)) +#define _mODD_5(A, B, ...) B, _mIDENT(_mODD_4(__VA_ARGS__)) +#define _mODD_6(A, B, ...) B, _mIDENT(_mODD_5(__VA_ARGS__)) +#define _mODD_7(A, B, ...) B, _mIDENT(_mODD_6(__VA_ARGS__)) +#define _mODD_8(A, B, ...) B, _mIDENT(_mODD_7(__VA_ARGS__)) +#define _mODD_9(A, B, ...) B, _mIDENT(_mODD_7(__VA_ARGS__)) #define _mSUCC_0 1 #define _mSUCC_1 2 diff --git a/include/mgba/script/macros.h b/include/mgba/script/macros.h index 1a82d85b4..79b9ed611 100644 --- a/include/mgba/script/macros.h +++ b/include/mgba/script/macros.h @@ -275,7 +275,7 @@ CXX_GUARD_START #define mSCRIPT_DECLARE_STRUCT_VOID_METHOD(TYPE, NAME, FUNCTION, NPARAMS, ...) \ _mSCRIPT_DECLARE_STRUCT_METHOD_SIGNATURE(TYPE, void, NAME, , NPARAMS, _mEVEN_ ## NPARAMS(__VA_ARGS__)); \ - _mSCRIPT_DECLARE_STRUCT_METHOD(TYPE, NAME, S, 0, , NPARAMS, NULL, __VA_ARGS__) \ + _mSCRIPT_DECLARE_STRUCT_METHOD(TYPE, NAME, S, 0, 0, NPARAMS, NULL, __VA_ARGS__) \ _mSCRIPT_DECLARE_STRUCT_VOID_METHOD_BINDING(TYPE, NAME, FUNCTION, S, NPARAMS, __VA_ARGS__) #define mSCRIPT_DECLARE_STRUCT_C_METHOD(TYPE, RETURN, NAME, FUNCTION, NPARAMS, ...) \ @@ -285,31 +285,31 @@ CXX_GUARD_START #define mSCRIPT_DECLARE_STRUCT_VOID_C_METHOD(TYPE, NAME, FUNCTION, NPARAMS, ...) \ _mSCRIPT_DECLARE_STRUCT_METHOD_SIGNATURE(TYPE, void, NAME, const, NPARAMS, _mEVEN_ ## NPARAMS(__VA_ARGS__)); \ - _mSCRIPT_DECLARE_STRUCT_METHOD(TYPE, NAME, CS, 0, , NPARAMS, NULL, __VA_ARGS__) \ + _mSCRIPT_DECLARE_STRUCT_METHOD(TYPE, NAME, CS, 0, 0, NPARAMS, NULL, __VA_ARGS__) \ _mSCRIPT_DECLARE_STRUCT_VOID_METHOD_BINDING(TYPE, NAME, FUNCTION, CS, NPARAMS, __VA_ARGS__) #define mSCRIPT_DECLARE_STRUCT_METHOD_WITH_DEFAULTS(TYPE, RETURN, NAME, FUNCTION, NPARAMS, ...) \ - static const struct mScriptValue _mSTStructBindingDefaults_ ## TYPE ## NAME[mSCRIPT_PARAMS_MAX]; \ + static const struct mScriptValue _mSTStructBindingDefaults_ ## TYPE ## _ ## NAME[mSCRIPT_PARAMS_MAX]; \ _mSCRIPT_DECLARE_STRUCT_METHOD_SIGNATURE(TYPE, mSCRIPT_TYPE_C_ ## RETURN, NAME, , NPARAMS, _mEVEN_ ## NPARAMS(__VA_ARGS__)); \ - _mSCRIPT_DECLARE_STRUCT_METHOD(TYPE, NAME, S, 1, mSCRIPT_TYPE_MS_ ## RETURN, NPARAMS, _mSTStructBindingDefaults_ ## TYPE ## NAME, __VA_ARGS__) \ + _mSCRIPT_DECLARE_STRUCT_METHOD(TYPE, NAME, S, 1, mSCRIPT_TYPE_MS_ ## RETURN, NPARAMS, _mIDENT(_mSTStructBindingDefaults_ ## TYPE ## _ ## NAME), __VA_ARGS__) \ _mSCRIPT_DECLARE_STRUCT_METHOD_BINDING(TYPE, RETURN, NAME, FUNCTION, S, NPARAMS, __VA_ARGS__) #define mSCRIPT_DECLARE_STRUCT_VOID_METHOD_WITH_DEFAULTS(TYPE, NAME, FUNCTION, NPARAMS, ...) \ - static const struct mScriptValue _mSTStructBindingDefaults_ ## TYPE ## NAME[mSCRIPT_PARAMS_MAX]; \ + static const struct mScriptValue _mSTStructBindingDefaults_ ## TYPE ## _ ## NAME[mSCRIPT_PARAMS_MAX]; \ _mSCRIPT_DECLARE_STRUCT_METHOD_SIGNATURE(TYPE, void, NAME, , NPARAMS, _mEVEN_ ## NPARAMS(__VA_ARGS__)); \ - _mSCRIPT_DECLARE_STRUCT_METHOD(TYPE, NAME, S, 0, , NPARAMS, _mSTStructBindingDefaults_ ## TYPE ## NAME, __VA_ARGS__) \ + _mSCRIPT_DECLARE_STRUCT_METHOD(TYPE, NAME, S, 0, 0, NPARAMS, _mIDENT(_mSTStructBindingDefaults_ ## TYPE ## _ ## NAME), __VA_ARGS__) \ _mSCRIPT_DECLARE_STRUCT_VOID_METHOD_BINDING(TYPE, NAME, FUNCTION, S, NPARAMS, __VA_ARGS__) #define mSCRIPT_DECLARE_STRUCT_C_METHOD_WITH_DEFAULTS(TYPE, RETURN, NAME, FUNCTION, NPARAMS, ...) \ - static const struct mScriptValue _mSTStructBindingDefaults_ ## TYPE ## NAME[mSCRIPT_PARAMS_MAX]; \ + static const struct mScriptValue _mSTStructBindingDefaults_ ## TYPE ## _ ## NAME[mSCRIPT_PARAMS_MAX]; \ _mSCRIPT_DECLARE_STRUCT_METHOD_SIGNATURE(TYPE, mSCRIPT_TYPE_C_ ## RETURN, NAME, const, NPARAMS, _mEVEN_ ## NPARAMS(__VA_ARGS__)); \ - _mSCRIPT_DECLARE_STRUCT_METHOD(TYPE, NAME, CS, 1, mSCRIPT_TYPE_MS_ ## RETURN, NPARAMS, _mSTStructBindingDefaults_ ## TYPE ## NAME, __VA_ARGS__) \ + _mSCRIPT_DECLARE_STRUCT_METHOD(TYPE, NAME, CS, 1, mSCRIPT_TYPE_MS_##RETURN, NPARAMS, _mIDENT(_mSTStructBindingDefaults_ ## TYPE ## _ ## NAME), __VA_ARGS__) \ _mSCRIPT_DECLARE_STRUCT_METHOD_BINDING(TYPE, RETURN, NAME, FUNCTION, CS, NPARAMS, __VA_ARGS__) #define mSCRIPT_DECLARE_STRUCT_VOID_C_METHOD_WITH_DEFAULTS(TYPE, NAME, FUNCTION, NPARAMS, ...) \ - static const struct mScriptValue _mSTStructBindingDefaults_ ## TYPE ## NAME[mSCRIPT_PARAMS_MAX]; \ + static const struct mScriptValue _mSTStructBindingDefaults_ ## TYPE ## _ ## NAME[mSCRIPT_PARAMS_MAX]; \ _mSCRIPT_DECLARE_STRUCT_METHOD_SIGNATURE(TYPE, void, NAME, const, NPARAMS, _mEVEN_ ## NPARAMS(__VA_ARGS__)); \ - _mSCRIPT_DECLARE_STRUCT_METHOD(TYPE, NAME, CS, 0, , NPARAMS, _mSTStructBindingDefaults_ ## TYPE ## NAME, __VA_ARGS__) \ + _mSCRIPT_DECLARE_STRUCT_METHOD(TYPE, NAME, CS, 0, 0, NPARAMS, _mIDENT(_mSTStructBindingDefaults_ ## TYPE ## _ ## NAME, __VA_ARGS__) \ _mSCRIPT_DECLARE_STRUCT_VOID_METHOD_BINDING(TYPE, NAME, FUNCTION, CS, NPARAMS, __VA_ARGS__) #define mSCRIPT_DECLARE_STRUCT_D_METHOD(TYPE, RETURN, NAME, NPARAMS, ...) \ @@ -337,7 +337,7 @@ CXX_GUARD_START mSCRIPT_DECLARE_STRUCT_VOID_C_METHOD_WITH_DEFAU(TYPE, NAME, p0->NAME, NPARAMS, __VA_ARGS__) #define mSCRIPT_DEFINE_STRUCT_BINDING_DEFAULTS(TYPE, NAME) \ - static const struct mScriptValue _mSTStructBindingDefaults_ ## TYPE ## NAME[mSCRIPT_PARAMS_MAX] = { \ + static const struct mScriptValue _mSTStructBindingDefaults_ ## TYPE ## _ ## NAME[mSCRIPT_PARAMS_MAX] = { \ mSCRIPT_NO_DEFAULT, #define mSCRIPT_DEFINE_DEFAULTS_END } @@ -441,6 +441,14 @@ CXX_GUARD_START }, \ } \ +#define mSCRIPT_VAL(TYPE, VALUE) { \ + .type = (mSCRIPT_TYPE_MS_ ## TYPE), \ + .refs = mSCRIPT_VALUE_UNREF, \ + .value = { \ + .mSCRIPT_TYPE_FIELD_ ## TYPE = (VALUE) \ + }, \ + } \ + #define mSCRIPT_MAKE_S8(VALUE) mSCRIPT_MAKE(S8, VALUE) #define mSCRIPT_MAKE_U8(VALUE) mSCRIPT_MAKE(U8, VALUE) #define mSCRIPT_MAKE_S16(VALUE) mSCRIPT_MAKE(S16, VALUE) @@ -455,6 +463,20 @@ CXX_GUARD_START #define mSCRIPT_MAKE_S(STRUCT, VALUE) mSCRIPT_MAKE(S(STRUCT), VALUE) #define mSCRIPT_MAKE_CS(STRUCT, VALUE) mSCRIPT_MAKE(CS(STRUCT), VALUE) +#define mSCRIPT_S8(VALUE) mSCRIPT_VAL(S8, VALUE) +#define mSCRIPT_U8(VALUE) mSCRIPT_VAL(U8, VALUE) +#define mSCRIPT_S16(VALUE) mSCRIPT_VAL(S16, VALUE) +#define mSCRIPT_U16(VALUE) mSCRIPT_VAL(U16, VALUE) +#define mSCRIPT_S32(VALUE) mSCRIPT_VAL(S32, VALUE) +#define mSCRIPT_U32(VALUE) mSCRIPT_VAL(U32, VALUE) +#define mSCRIPT_F32(VALUE) mSCRIPT_VAL(F32, VALUE) +#define mSCRIPT_S64(VALUE) mSCRIPT_VAL(S64, VALUE) +#define mSCRIPT_U64(VALUE) mSCRIPT_VAL(U64, VALUE) +#define mSCRIPT_F64(VALUE) mSCRIPT_VAL(F64, VALUE) +#define mSCRIPT_CHARP(VALUE) mSCRIPT_VAL(CHARP, VALUE) +#define mSCRIPT_S(STRUCT, VALUE) mSCRIPT_VAL(S(STRUCT), VALUE) +#define mSCRIPT_CS(STRUCT, VALUE) mSCRIPT_VAL(CS(STRUCT), VALUE) + #define mSCRIPT_NO_DEFAULT { \ .type = NULL, \ .refs = mSCRIPT_VALUE_UNREF, \