}
ENDCLASS(Mutator)
-const int MAX_MUTATORS = 15;
+const int MAX_MUTATORS = 30;
Mutator loaded_mutators[MAX_MUTATORS];
bool Mutator_Add(Mutator mut)
bool ret = MUTATORFUNCTION_##id##_hooks(mode); if (ret) return ret; \
} \
bool MUTATOR_##id##_check() { return dependence; } \
- REGISTER(RegisterMutators, MUTATOR, MUTATORS, MUTATORS_COUNT, id, m_id, NEW(Mutator, #id, MUTATORFUNCTION_##id)) \
+ REGISTER(RegisterMutators, MUTATOR, MUTATORS, id, m_id, NEW(Mutator, #id, MUTATORFUNCTION_##id)) \
{ this.mutatorcheck = MUTATOR_##id##_check; } \
[[accumulate]] bool MUTATORFUNCTION_##id(int mode)
RegisterHooks();
RegisterCallbacks();
RegisterMutators();
+}
+
+STATIC_INIT_LATE(Mutators) {
FOREACH(MUTATORS, it.mutatorcheck(), LAMBDA(Mutator_Add(it)));
}
[[accumulate]] void RegisterCallbacks() { CALLBACK_##name = NEW(Callback, func); }
#define MUTATOR_HOOKFUNCTION(...) \
- OVERLOAD(MUTATOR_HOOKFUNCTION, __VA_ARGS__)
+ EVAL(OVERLOAD(MUTATOR_HOOKFUNCTION, __VA_ARGS__))
#define MUTATOR_HOOKFUNCTION_1(name) \
_MUTATOR_CALLBACK(name, HOOKFUNCTION_##name) \
bool HOOKFUNCTION_##name()
#define MUTATOR_HOOKFUNCTION_2(mut, cb) \
- MUTATOR_HOOKFUNCTION(mut, cb, CBC_ORDER_ANY)
+ MUTATOR_HOOKFUNCTION_3(mut, cb, CBC_ORDER_ANY)
#define MUTATOR_HOOKFUNCTION_3(mut, cb, order) \
_MUTATOR_CALLBACK(mut##_##cb, mut##_##cb) \
#define MUTATOR_HOOK(cb, func, order) do { \
MUTATOR_ONADD { \
if (!CallbackChain_Add(HOOK_##cb, CALLBACK_##func, order)) { \
- print("HOOK FAILED: ", #cb, ":", #func, "\n"); \
+ LOG_INFO("HOOK FAILED: ", #cb, ":", #func, "\n"); \
return true; \
} \
} \