mirror of
https://github.com/OpenTTD/OpenTTD
synced 2026-01-17 01:12:39 +01:00
Codechange: Remove manual param count for constructors too
This commit is contained in:
@@ -34,7 +34,7 @@ template <> SQInteger PushClassName<AIInfo, ScriptType::AI>(HSQUIRRELVM vm) { sq
|
||||
/* Create the AIInfo class, and add the RegisterAI function */
|
||||
DefSQClass<AIInfo, ScriptType::AI> SQAIInfo("AIInfo");
|
||||
SQAIInfo.PreRegister(engine);
|
||||
SQAIInfo.AddConstructor<void (AIInfo::*)(), 1>(engine, "x");
|
||||
SQAIInfo.AddConstructor<void (AIInfo::*)()>(engine, "x");
|
||||
SQAIInfo.DefSQAdvancedMethod(engine, &AIInfo::AddSetting, "AddSetting");
|
||||
SQAIInfo.DefSQAdvancedMethod(engine, &AIInfo::AddLabels, "AddLabels");
|
||||
SQAIInfo.DefSQConst(engine, ScriptConfigFlags{}.base(), "CONFIG_NONE");
|
||||
|
||||
@@ -32,7 +32,7 @@ template <> SQInteger PushClassName<GameInfo, ScriptType::GS>(HSQUIRRELVM vm) {
|
||||
/* Create the GSInfo class, and add the RegisterGS function */
|
||||
DefSQClass<GameInfo, ScriptType::GS> SQGSInfo("GSInfo");
|
||||
SQGSInfo.PreRegister(engine);
|
||||
SQGSInfo.AddConstructor<void (GameInfo::*)(), 1>(engine, "x");
|
||||
SQGSInfo.AddConstructor<void (GameInfo::*)()>(engine, "x");
|
||||
SQGSInfo.DefSQAdvancedMethod(engine, &GameInfo::AddSetting, "AddSetting");
|
||||
SQGSInfo.DefSQAdvancedMethod(engine, &GameInfo::AddLabels, "AddLabels");
|
||||
SQGSInfo.DefSQConst(engine, ScriptConfigFlags{}.base(), "CONFIG_NONE");
|
||||
|
||||
@@ -108,11 +108,11 @@ public:
|
||||
engine.AddClassBegin(this->classname, parent_class);
|
||||
}
|
||||
|
||||
template <typename Func, int Tnparam>
|
||||
template <typename Func>
|
||||
void AddConstructor(Squirrel &engine, std::string_view params)
|
||||
{
|
||||
using namespace SQConvert;
|
||||
engine.AddMethod("constructor", DefSQConstructorCallback<CL, Func, Tnparam>, params);
|
||||
engine.AddMethod("constructor", DefSQConstructorCallback<CL, Func>, params);
|
||||
}
|
||||
|
||||
void AddSQAdvancedConstructor(Squirrel &engine)
|
||||
|
||||
@@ -376,14 +376,17 @@ namespace SQConvert {
|
||||
* params. It creates the instance in C++, and it sets all the needed
|
||||
* settings in SQ to register the instance.
|
||||
*/
|
||||
template <typename Tcls, typename Tmethod, int Tnparam>
|
||||
template <typename Tcls, typename Tmethod>
|
||||
inline SQInteger DefSQConstructorCallback(HSQUIRRELVM vm)
|
||||
{
|
||||
try {
|
||||
/* Find the amount of params we got */
|
||||
int nparam = sq_gettop(vm);
|
||||
|
||||
/* Create the real instance */
|
||||
Tcls *instance = HelperT<Tmethod>::SQConstruct((Tcls *)nullptr, (Tmethod)nullptr, vm);
|
||||
sq_setinstanceup(vm, -Tnparam, instance);
|
||||
sq_setreleasehook(vm, -Tnparam, DefSQDestructorCallback<Tcls>);
|
||||
sq_setinstanceup(vm, -nparam, instance);
|
||||
sq_setreleasehook(vm, -nparam, DefSQDestructorCallback<Tcls>);
|
||||
instance->AddRef();
|
||||
return 0;
|
||||
} catch (SQInteger &e) {
|
||||
|
||||
Reference in New Issue
Block a user