forked from Mirrors/openclonk
Fix #include-in-#appendto, but discourage with a warning
parent
dcd8d9676a
commit
791315a54e
|
@ -25,6 +25,22 @@
|
|||
#include "game/C4Game.h"
|
||||
#include "object/C4GameObjects.h"
|
||||
|
||||
void C4ScriptHost::DoAppend(C4Def *def)
|
||||
{
|
||||
if (std::find(def->Script.SourceScripts.begin(), def->Script.SourceScripts.end(), this) == def->Script.SourceScripts.end())
|
||||
{
|
||||
def->Script.SourceScripts.push_back(this);
|
||||
if (!Includes.empty())
|
||||
{
|
||||
Warn("#appendto %s contains #include", def->id.ToString());
|
||||
// Try to fullfil #include, but it won't work properly: #appendtos
|
||||
// are always appended, but #includes are prepended to the script.
|
||||
def->Script.Includes.insert(def->Script.Includes.end(), Includes.begin(), Includes.end());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// ResolveAppends and ResolveIncludes must be called both
|
||||
// for each script. ResolveAppends has to be called first!
|
||||
bool C4ScriptHost::ResolveAppends(C4DefList *rDefs)
|
||||
|
@ -38,8 +54,7 @@ bool C4ScriptHost::ResolveAppends(C4DefList *rDefs)
|
|||
C4Def *Def = rDefs ? rDefs->GetByName(*a) : NULL;
|
||||
if (Def)
|
||||
{
|
||||
if (std::find(Def->Script.SourceScripts.begin(), Def->Script.SourceScripts.end(), this) == Def->Script.SourceScripts.end())
|
||||
Def->Script.SourceScripts.push_back(this);
|
||||
DoAppend(Def);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -58,8 +73,7 @@ bool C4ScriptHost::ResolveAppends(C4DefList *rDefs)
|
|||
if (!pDef) break;
|
||||
if (pDef == GetPropList()) continue;
|
||||
// append
|
||||
if (std::find(pDef->Script.SourceScripts.begin(), pDef->Script.SourceScripts.end(), this) == pDef->Script.SourceScripts.end())
|
||||
pDef->Script.SourceScripts.push_back(this);
|
||||
DoAppend(pDef);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -75,8 +75,9 @@ protected:
|
|||
|
||||
virtual void AddEngineFunctions() {}; // add any engine functions specific to this script host
|
||||
void CopyPropList(C4Set<C4Property> & from, C4PropListStatic * to);
|
||||
virtual bool ResolveIncludes(C4DefList *rDefs); // resolve includes
|
||||
virtual bool ResolveAppends(C4DefList *rDefs); // resolve appends
|
||||
bool ResolveIncludes(C4DefList *rDefs); // resolve includes
|
||||
bool ResolveAppends(C4DefList *rDefs); // resolve appends
|
||||
void DoAppend(C4Def *def);
|
||||
bool Resolving; // set while include-resolving, to catch circular includes
|
||||
bool IncludesResolved;
|
||||
|
||||
|
|
Loading…
Reference in New Issue