OpenClonk
C4DefScriptHost Class Reference

#include <C4ScriptHost.h>

Inheritance diagram for C4DefScriptHost:
[legend]
Collaboration diagram for C4DefScriptHost:
[legend]

Public Member Functions

 C4DefScriptHost ()
 
void SetDef (C4Def *to_def)
 
bool Parse () override
 
C4PropListStaticGetPropList () override
 
virtual bool Delete ()
 
void Clear ()
 
virtual bool Load (C4Group &hGroup, const char *szFilename, const char *szLanguage, C4LangStringTable *pLocalTable)
 
bool Load (C4Group &hGroup, const char *szFilename, const char *szLanguage=nullptr)
 
bool Load (C4GroupSet &hGroupSet, const char *szFilename, const char *szLanguage=nullptr)
 
virtual bool LoadData (const char *szFilename, const char *szData, class C4LangStringTable *pLocalTable)
 
void Reg2List (C4AulScriptEngine *pEngine)
 
const C4PropListStaticGetPropList () const
 
const char * GetScript () const
 
bool IsReady ()
 
std::string Translate (const std::string &text) const
 
bool IsWarningEnabled (const char *pos, C4AulWarningId warning) const
 
const char * GetFilePath () const
 
const char * GetData () const
 
const StdStrBufGetDataBuf () const
 
size_t GetDataSize () const
 
bool GetLanguageString (const char *szLanguage, StdStrBuf &rTarget)
 

Public Attributes

std::deque< C4ScriptHost * > SourceScripts
 
StdCopyStrBuf ScriptName
 

Protected Member Functions

void Unreg ()
 
void MakeScript ()
 
virtual bool ReloadScript (const char *szPath, const char *szLanguage)
 
bool Preparse ()
 
virtual void UnLink ()
 
void UnlinkOwnedFunctions ()
 
void DeleteOwnedPropLists ()
 
void Warn (const char *pMsg,...) GNUC_FORMAT_ATTRIBUTE_O
 
virtual void AddEngineFunctions ()
 
void CopyPropList (C4Set< C4Property > &from, C4PropListStatic *to)
 
bool ResolveIncludes (C4DefList *rDefs)
 
bool ResolveAppends (C4DefList *rDefs)
 
void DoAppend (C4Def *def)
 
void EnableWarning (const char *pos, C4AulWarningId warning, bool enable=true)
 
virtual void OnLoad ()
 
void CopyFilePathFromGroup (const C4Group &hGroup)
 
void FinishLoad (const StdStrBuf &, C4Group &hGroup)
 

Protected Attributes

C4DefDef {nullptr}
 
C4AulScriptEngineEngine {nullptr}
 
C4ScriptHostPrev {nullptr}
 
C4ScriptHostNext {nullptr}
 
std::list< StdCopyStrBufIncludes
 
std::list< StdCopyStrBufAppends
 
bool Resolving
 
bool IncludesResolved
 
StdStrBuf Script
 
C4LangStringTablestringTable
 
C4Set< C4PropertyLocalValues
 
C4AulScriptState State {ASS_NONE}
 
std::vector< C4ValueownedFunctions
 
std::vector< C4ValueownedPropLists
 
StdCopyStrBuf Data
 
StdCopyStrBuf Filename
 
StdCopyStrBuf FilePath
 

Detailed Description

Definition at line 139 of file C4ScriptHost.h.

Constructor & Destructor Documentation

◆ C4DefScriptHost()

C4DefScriptHost::C4DefScriptHost ( )
inline

Definition at line 142 of file C4ScriptHost.h.

142 : C4ScriptHost() { }

Member Function Documentation

◆ AddEngineFunctions()

virtual void C4ScriptHost::AddEngineFunctions ( )
inlineprotectedvirtualinherited

Reimplemented in C4MapScriptHost.

Definition at line 83 of file C4ScriptHost.h.

83 {}; // add any engine functions specific to this script host

Referenced by C4ScriptHost::Preparse().

Here is the caller graph for this function:

◆ Clear()

void C4ScriptHost::Clear ( )
inherited

Definition at line 49 of file C4ScriptHost.cpp.

50 {
53  ast.reset();
54  Script.Clear();
57  SourceScripts.clear();
58  SourceScripts.push_back(this);
59  if (stringTable)
60  {
62  stringTable = nullptr;
63  }
64  // remove includes
65  Includes.clear();
66  Appends.clear();
67  // reset flags
68  State = ASS_NONE;
69  enabledWarnings.clear();
70 }
@ ASS_NONE
Definition: C4ScriptHost.h:33
C4Set< C4Property > LocalValues
Definition: C4ScriptHost.h:93
void DeleteOwnedPropLists()
C4AulScriptState State
Definition: C4ScriptHost.h:94
C4LangStringTable * stringTable
Definition: C4ScriptHost.h:92
void UnlinkOwnedFunctions()
StdStrBuf Script
Definition: C4ScriptHost.h:91
std::list< StdCopyStrBuf > Appends
Definition: C4ScriptHost.h:81
std::list< StdCopyStrBuf > Includes
Definition: C4ScriptHost.h:80
std::deque< C4ScriptHost * > SourceScripts
Definition: C4ScriptHost.h:57
void Clear()
void Clear()
Definition: StdBuf.h:466

References C4ScriptHost::Appends, ASS_NONE, C4ComponentHost::Clear(), StdStrBuf::Clear(), C4Set< T >::Clear(), C4ScriptHost::DeleteOwnedPropLists(), C4LangStringTable::DelRef(), C4ScriptHost::Includes, C4ScriptHost::LocalValues, C4ScriptHost::Script, C4ScriptHost::SourceScripts, C4ScriptHost::State, C4ScriptHost::stringTable, and C4ScriptHost::UnlinkOwnedFunctions().

Referenced by C4Def::C4Def(), C4MapScriptHost::Clear(), C4Def::Clear(), C4ExtraScriptHost::Clear(), C4GameScriptHost::Clear(), C4Def::Default(), C4Def::~C4Def(), and C4ScriptHost::~C4ScriptHost().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CopyFilePathFromGroup()

void C4ComponentHost::CopyFilePathFromGroup ( const C4Group hGroup)
protectedinherited

Definition at line 120 of file C4ComponentHost.cpp.

121 {
125 }
C4Config Config
Definition: C4Config.cpp:930
StdCopyStrBuf Filename
StdCopyStrBuf FilePath
const char * AtRelativePath(const char *filename)
Definition: C4Config.cpp:741
StdStrBuf GetFullName() const
Definition: C4Group.cpp:2638
const char * getData() const
Definition: StdBuf.h:442
void AppendBackslash()
Definition: StdBuf.cpp:248
void Copy()
Definition: StdBuf.h:467
void Append(const char *pnData, size_t iChars)
Definition: StdBuf.h:519

References StdStrBuf::Append(), StdStrBuf::AppendBackslash(), C4Config::AtRelativePath(), Config, StdStrBuf::Copy(), C4ComponentHost::Filename, C4ComponentHost::FilePath, StdStrBuf::getData(), and C4Group::GetFullName().

Referenced by C4ComponentHost::FinishLoad(), and C4ComponentHost::Load().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ CopyPropList()

void C4ScriptHost::CopyPropList ( C4Set< C4Property > &  from,
C4PropListStatic to 
)
protectedinherited

Definition at line 1690 of file C4AulParse.cpp.

1691 {
1692  // append all funcs and local variable initializations
1693  const C4Property * prop = from.First();
1694  while (prop)
1695  {
1696  switch(prop->Value.GetType())
1697  {
1698  case C4V_Function:
1699  {
1700  C4AulScriptFunc * sf = prop->Value.getFunction()->SFunc();
1701  if (sf)
1702  {
1703  C4AulScriptFunc *sfc;
1704  if (sf->pOrgScript != this)
1705  sfc = new C4AulScriptFunc(to, *sf);
1706  else
1707  sfc = sf;
1708  sfc->SetOverloaded(to->GetFunc(sf->Name));
1709  to->SetPropertyByS(prop->Key, C4VFunction(sfc));
1710  }
1711  else
1712  {
1713  // engine function
1714  to->SetPropertyByS(prop->Key, prop->Value);
1715  }
1716  }
1717  break;
1718  case C4V_PropList:
1719  {
1720  C4PropListStatic * p = prop->Value._getPropList()->IsStatic();
1721  assert(p);
1722  if (prop->Key != &::Strings.P[P_Prototype])
1723  if (!p || p->GetParent() != to)
1724  {
1725  p = C4PropList::NewStatic(nullptr, to, prop->Key);
1726  CopyPropList(prop->Value._getPropList()->Properties, p);
1727  }
1728  to->SetPropertyByS(prop->Key, C4VPropList(p));
1729  }
1730  break;
1731  case C4V_Array: // FIXME: copy the array if necessary
1732  default:
1733  to->SetPropertyByS(prop->Key, prop->Value);
1734  }
1735  prop = from.Next(prop);
1736  }
1737 }
C4StringTable Strings
Definition: C4Globals.cpp:42
@ P_Prototype
C4Value C4VFunction(C4AulFunc *pFn)
Definition: C4Value.h:247
@ C4V_Function
Definition: C4Value.h:31
@ C4V_PropList
Definition: C4Value.h:28
@ C4V_Array
Definition: C4Value.h:30
C4Value C4VPropList(C4PropList *p)
Definition: C4Value.h:242
C4RefCntPointer< C4String > Name
Definition: C4AulFunc.h:60
virtual C4AulScriptFunc * SFunc()
Definition: C4AulFunc.h:65
void SetOverloaded(C4AulFunc *)
C4ScriptHost * pOrgScript
C4AulFunc * GetFunc(C4PropertyName k) const
Definition: C4PropList.h:109
virtual class C4PropListStatic * IsStatic()
Definition: C4PropList.h:89
virtual void SetPropertyByS(C4String *k, const C4Value &to)
Definition: C4PropList.cpp:940
static C4PropListStatic * NewStatic(C4PropList *prototype, const C4PropListStatic *parent, C4String *key)
Definition: C4PropList.cpp:46
const C4PropListStatic * GetParent() const
Definition: C4PropList.h:275
C4Value Value
Definition: C4PropList.h:54
C4String * Key
Definition: C4PropList.h:53
friend class C4AulScriptFunc
Definition: C4ScriptHost.h:111
void CopyPropList(C4Set< C4Property > &from, C4PropListStatic *to)
T const * Next(T const *p) const
T const * First() const
C4String P[P_LAST]
C4PropList * _getPropList() const
Definition: C4Value.h:129
C4V_Type GetType() const
Definition: C4Value.h:161
C4AulFunc * getFunction() const
Definition: C4Value.h:119

References C4Value::_getPropList(), C4ScriptHost::C4AulScriptFunc, C4V_Array, C4V_Function, C4V_PropList, C4VFunction(), C4VPropList(), C4Set< T >::First(), C4PropList::GetFunc(), C4Value::getFunction(), C4PropListStatic::GetParent(), C4Value::GetType(), C4PropList::IsStatic(), C4Property::Key, C4AulFunc::Name, C4PropList::NewStatic(), C4Set< T >::Next(), C4StringTable::P, P_Prototype, C4AulScriptFunc::pOrgScript, C4AulScriptFunc::SetOverloaded(), C4PropList::SetPropertyByS(), C4AulFunc::SFunc(), Strings, and C4Property::Value.

Referenced by C4ScriptHost::Parse().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Delete()

virtual bool C4ScriptHost::Delete ( )
inlinevirtualinherited

Reimplemented in C4ExtraScriptHost.

Definition at line 44 of file C4ScriptHost.h.

44 { return false; } // do NOT delete this - it's just a class member!

Referenced by C4AulScriptEngine::Clear().

Here is the caller graph for this function:

◆ DeleteOwnedPropLists()

void C4ScriptHost::DeleteOwnedPropLists ( )
protectedinherited

Definition at line 120 of file C4ScriptHost.cpp.

121 {
122  // delete all static proplists associated to this script host.
123  // Note that just clearing the vector is not enough in case of
124  // cyclic references.
125  for (C4Value& value: ownedPropLists)
126  {
127  C4PropList* plist = value.getPropList();
128  if (plist)
129  {
130  if (plist->Delete()) delete plist;
131  else plist->Clear();
132  }
133  }
134  ownedPropLists.clear();
135 }
virtual bool Delete()
Definition: C4PropList.h:94
void Clear()
Definition: C4PropList.h:70
std::vector< C4Value > ownedPropLists
Definition: C4ScriptHost.h:102

References C4PropList::Clear(), C4PropList::Delete(), and C4ScriptHost::ownedPropLists.

Referenced by C4ScriptHost::Clear(), and C4ScriptHost::UnLink().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DoAppend()

void C4ScriptHost::DoAppend ( C4Def def)
protectedinherited

Definition at line 28 of file C4AulLink.cpp.

29 {
30  if (std::find(def->Script.SourceScripts.begin(), def->Script.SourceScripts.end(), this) == def->Script.SourceScripts.end())
31  {
32  def->Script.SourceScripts.push_back(this);
33  if (!Includes.empty())
34  {
35  Warn("#appendto contains #include");
36  // Try to fullfil #include, but it won't work properly: #appendtos
37  // are always appended, but #includes are prepended to the script.
38  def->Script.Includes.insert(def->Script.Includes.end(), Includes.begin(), Includes.end());
39  }
40 
41  }
42 }
C4DefScriptHost Script
Definition: C4Def.h:181
void Warn(const char *pMsg,...) GNUC_FORMAT_ATTRIBUTE_O
Definition: C4AulParse.cpp:124

References C4ScriptHost::Includes, C4Def::Script, C4ScriptHost::SourceScripts, and C4ScriptHost::Warn().

Referenced by C4ScriptHost::ResolveAppends().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ EnableWarning()

void C4ScriptHost::EnableWarning ( const char *  pos,
C4AulWarningId  warning,
bool  enable = true 
)
protectedinherited

Definition at line 1776 of file C4AulParse.cpp.

1777 {
1778  auto entry = enabledWarnings.emplace(pos, decltype(enabledWarnings)::mapped_type{});
1779  if (entry.second)
1780  {
1781  // If there was no earlier entry for this position, copy the previous
1782  // warning state
1783  assert(entry.first != enabledWarnings.begin());
1784  auto previous = entry.first;
1785  --previous;
1786  entry.first->second = previous->second;
1787  }
1788  entry.first->second.set(static_cast<size_t>(warning), enable);
1789 }

◆ FinishLoad()

void C4ComponentHost::FinishLoad ( const StdStrBuf name,
C4Group hGroup 
)
protectedinherited

Definition at line 99 of file C4ComponentHost.cpp.

100 {
101  // Store actual filename
102  hGroup.FindEntry(name.getData(), &Filename);
103  CopyFilePathFromGroup(hGroup);
104 
105  if (Data.EnsureUnicode())
106  {
107  LogF("WARNING: File is not encoded as UTF-8 (%s)", FilePath.getData());
108  }
109  // Skip those stupid "zero width no-break spaces" (also known as Byte Order Marks)
110  if (Data[0] == '\xEF' && Data[1] == '\xBB' && Data[2] == '\xBF')
111  {
112  Data.Move(3,Data.getSize()-3);
113  Data.Shrink(3);
114  }
115  // Notify
116  OnLoad();
117 }
bool LogF(const char *strMessage,...)
Definition: C4Log.cpp:262
void CopyFilePathFromGroup(const C4Group &hGroup)
virtual void OnLoad()
StdCopyStrBuf Data
bool FindEntry(const char *wildcard, StdStrBuf *filename=nullptr, size_t *size=nullptr)
Definition: C4Group.cpp:2211
size_t getSize() const
Definition: StdBuf.h:444
void Move(size_t iFrom, size_t inSize, size_t iTo=0)
Definition: StdBuf.h:471
void Shrink(size_t iShrink)
Definition: StdBuf.h:503
bool EnsureUnicode()
Definition: StdBuf.cpp:421

References C4ComponentHost::CopyFilePathFromGroup(), C4ComponentHost::Data, StdStrBuf::EnsureUnicode(), C4ComponentHost::Filename, C4ComponentHost::FilePath, C4Group::FindEntry(), StdStrBuf::getData(), StdStrBuf::getSize(), LogF(), StdStrBuf::Move(), C4ComponentHost::OnLoad(), and StdStrBuf::Shrink().

Referenced by C4ComponentHost::Load().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetData()

const char* C4ComponentHost::GetData ( ) const
inlineinherited

Definition at line 30 of file C4ComponentHost.h.

30 { return Data.getData(); }

References C4ComponentHost::Data, and StdStrBuf::getData().

Referenced by C4Game::CompileRuntimeData(), C4RankSystem::Load(), C4ScenarioListLoader::Entry::Load(), C4Player::LoadRuntimeData(), C4ObjectInfoList::New(), and C4Game::OpenScenario().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetDataBuf()

const StdStrBuf& C4ComponentHost::GetDataBuf ( ) const
inlineinherited

Definition at line 31 of file C4ComponentHost.h.

31 { return Data; }

References C4ComponentHost::Data.

Referenced by C4Game::CompileRuntimeData(), C4Language::HasStringTable(), and C4ScriptHost::MakeScript().

Here is the caller graph for this function:

◆ GetDataSize()

size_t C4ComponentHost::GetDataSize ( ) const
inlineinherited

Definition at line 32 of file C4ComponentHost.h.

32 { return Data.getLength(); }
size_t getLength() const
Definition: StdBuf.h:445

References C4ComponentHost::Data, and StdStrBuf::getLength().

Referenced by C4RankSystem::Load().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetFilePath()

const char* C4ComponentHost::GetFilePath ( ) const
inlineinherited

Definition at line 28 of file C4ComponentHost.h.

28 { return FilePath.getData(); }

References C4ComponentHost::FilePath, and StdStrBuf::getData().

Referenced by C4ScriptHost::Load(), C4Player::LoadRuntimeData(), C4ScriptHost::ReloadScript(), and C4LangStringTable::ReplaceStrings().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetLanguageString()

bool C4ComponentHost::GetLanguageString ( const char *  szLanguage,
StdStrBuf rTarget 
)
inherited

Definition at line 127 of file C4ComponentHost.cpp.

128 {
129  const char *cptr;
130  // No good parameters
131  if (!szLanguage || !Data) return false;
132  // Search for two-letter language identifier in text body, i.e. "DE:"
133  char langindex[4] = "";
134  for (int clseg=0; SCopySegment(szLanguage ? szLanguage : "", clseg, langindex, ',', 2); clseg++)
135  {
136  SAppend(":",langindex);
137  if ((cptr = SSearch(Data.getData(),langindex)))
138  {
139  // Return the according string
140  int iEndPos = SCharPos('\r', cptr);
141  if (iEndPos<0) iEndPos = SCharPos('\n', cptr);
142  if (iEndPos<0) iEndPos = strlen(cptr);
143  rTarget.Copy(cptr, iEndPos);
144  return true;
145  }
146  }
147  // Language string not found
148  return false;
149 }
const char * SSearch(const char *szString, const char *szIndex)
Definition: Standard.cpp:369
int SCharPos(char cTarget, const char *szInStr, int iIndex)
Definition: Standard.cpp:239
bool SCopySegment(const char *szString, int iSegment, char *sTarget, char cSeparator, int iMaxL, bool fSkipWhitespace)
Definition: Standard.cpp:279
void SAppend(const char *szSource, char *szTarget, int iMaxL)
Definition: Standard.cpp:263

References StdStrBuf::Copy(), C4ComponentHost::Data, StdStrBuf::getData(), SAppend(), SCharPos(), SCopySegment(), and SSearch().

Referenced by C4DefList::Load(), C4ScenarioListLoader::Entry::Load(), and C4Game::OpenScenario().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetPropList() [1/2]

const C4PropListStatic* C4ScriptHost::GetPropList ( ) const
inlineinherited

Definition at line 52 of file C4ScriptHost.h.

52 { return const_cast<C4ScriptHost*>(this)->GetPropList(); }
virtual C4PropListStatic * GetPropList()
Definition: C4ScriptHost.h:51

References C4ScriptHost::GetPropList().

Referenced by C4ScriptHost::GetPropList().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetPropList() [2/2]

C4PropListStatic * C4DefScriptHost::GetPropList ( )
overridevirtual

Reimplemented from C4ScriptHost.

Definition at line 324 of file C4ScriptHost.cpp.

324 { return Def; }

References Def.

◆ GetScript()

const char* C4ScriptHost::GetScript ( ) const
inlineinherited

Definition at line 53 of file C4ScriptHost.h.

53 { return Script.getData(); }

References StdStrBuf::getData(), and C4ScriptHost::Script.

Referenced by C4AulParseError::C4AulParseError(), C4AulScriptFunc::GetLineOfCode(), and C4AulScriptContext::ReturnDump().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ IsReady()

bool C4ScriptHost::IsReady ( )
inlineinherited

Definition at line 54 of file C4ScriptHost.h.

54 { return State == ASS_PARSED; } // whether script calls may be done
@ ASS_PARSED
Definition: C4ScriptHost.h:36

References ASS_PARSED, and C4ScriptHost::State.

Referenced by C4GUI::FrameDecoration::SetByDef().

Here is the caller graph for this function:

◆ IsWarningEnabled()

bool C4ScriptHost::IsWarningEnabled ( const char *  pos,
C4AulWarningId  warning 
) const
inherited

Definition at line 1791 of file C4AulParse.cpp.

1792 {
1793  assert(!enabledWarnings.empty());
1794  if (enabledWarnings.empty())
1795  return false;
1796 
1797  // find nearest set of warnings at or before the current position
1798  auto entry = enabledWarnings.upper_bound(pos);
1799  assert(entry != enabledWarnings.begin());
1800  if (entry != enabledWarnings.begin())
1801  {
1802  --entry;
1803  }
1804 
1805  return entry->second.test(static_cast<size_t>(warning));
1806 }

◆ Load() [1/3]

bool C4ScriptHost::Load ( C4Group hGroup,
const char *  szFilename,
const char *  szLanguage,
C4LangStringTable pLocalTable 
)
virtualinherited

Reimplemented in C4GameScriptHost, and C4MapScriptHost.

Definition at line 164 of file C4ScriptHost.cpp.

166 {
167  // Base load
168  bool fSuccess = C4ComponentHost::Load(hGroup,szFilename,szLanguage);
169  // String Table
170  if (stringTable != pLocalTable)
171  {
173  stringTable = pLocalTable;
175  }
176  // set name
178  // preparse script
179  MakeScript();
180  // Success
181  return fSuccess;
182 }
bool Load(C4Group &hGroup, const char *szFilename, const char *szLanguage=nullptr)
const char * GetFilePath() const
StdCopyStrBuf ScriptName
Definition: C4ScriptHost.h:58
void Ref(const char *pnData)
Definition: StdBuf.h:455

References C4LangStringTable::AddRef(), C4LangStringTable::DelRef(), C4ComponentHost::GetFilePath(), C4ComponentHost::Load(), C4ScriptHost::MakeScript(), StdStrBuf::Ref(), C4ScriptHost::ScriptName, and C4ScriptHost::stringTable.

Referenced by C4Game::InitScriptEngine(), C4MapScriptHost::Load(), C4GameScriptHost::Load(), C4Def::Load(), C4Game::LoadAdditionalSystemGroup(), C4ScriptHost::ReloadScript(), and C4ScenarioSection::ScenarioLoad().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Load() [2/3]

bool C4ComponentHost::Load ( C4Group hGroup,
const char *  szFilename,
const char *  szLanguage = nullptr 
)
inherited

Definition at line 23 of file C4ComponentHost.cpp.

26 {
27  // Clear any old stuff
28  Clear();
29  // Store filename
30  if (fname)
31  Filename.Copy(fname);
32  // Load component - try all segmented filenames
33  char strEntry[_MAX_FNAME_LEN];
34  StdStrBuf strEntryWithLanguage;
35  for (int iFilename = 0; SCopySegment(Filename.getData(), iFilename, strEntry, '|'); iFilename++)
36  {
37  // Try to insert all language codes provided into the filename
38  char strCode[3] = "";
39  for (int iLang = 0; SCopySegment(szLanguage ? szLanguage : "", iLang, strCode, ',', 2); iLang++)
40  {
41  // Insert language code
42  strEntryWithLanguage.Format(strEntry, strCode);
43  if (hGroup.LoadEntryString(strEntryWithLanguage, &Data))
44  {
45  FinishLoad(strEntryWithLanguage, hGroup);
46  // Got it
47  return true;
48  }
49  // Couldn't insert language code anyway - no point in trying other languages
50  if (!SSearch(strEntry, "%s")) break;
51  }
52  }
53  // Truncate any additional segments from stored filename
54  SReplaceChar(Filename.getMData(), '|', 0);
55  CopyFilePathFromGroup(hGroup);
56  // Not loaded
57  return false;
58 }
#define _MAX_FNAME_LEN
void SReplaceChar(char *str, char fc, char tc)
Definition: Standard.cpp:354
void FinishLoad(const StdStrBuf &, C4Group &hGroup)
bool LoadEntryString(const char *entry_name, StdStrBuf *buffer)
Definition: C4Group.cpp:2430
char * getMData()
Definition: StdBuf.h:443
void Format(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE_O
Definition: StdBuf.cpp:174

References _MAX_FNAME_LEN, C4ComponentHost::Clear(), StdStrBuf::Copy(), C4ComponentHost::CopyFilePathFromGroup(), C4ComponentHost::Data, C4ComponentHost::Filename, C4ComponentHost::FinishLoad(), StdStrBuf::Format(), StdStrBuf::getData(), StdStrBuf::getMData(), C4Group::LoadEntryString(), SCopySegment(), SReplaceChar(), and SSearch().

Referenced by C4Game::CompileRuntimeData(), C4Game::InitScriptEngine(), C4ScriptHost::Load(), C4ScenarioListLoader::Entry::Load(), C4Language::LoadComponentHost(), and C4Game::LoadScenarioComponents().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Load() [3/3]

bool C4ComponentHost::Load ( C4GroupSet hGroupSet,
const char *  szFilename,
const char *  szLanguage = nullptr 
)
inherited

Definition at line 60 of file C4ComponentHost.cpp.

63 {
64  // Clear any old stuff
65  Clear();
66  // Store filename
67  if (fname)
68  Filename.Copy(fname);
69  // Load component - try all segmented filenames
70  char strEntry[_MAX_FNAME_LEN];
71  StdStrBuf strEntryWithLanguage;
72  for (int iFilename = 0; SCopySegment(Filename.getData(), iFilename, strEntry, '|'); iFilename++)
73  {
74  // Try to insert all language codes provided into the filename
75  char strCode[3] = "";
76  for (int iLang = 0; SCopySegment(szLanguage ? szLanguage : "", iLang, strCode, ',', 2); iLang++)
77  {
78  // Insert language code
79  strEntryWithLanguage.Format(strEntry, strCode);
80  if (hGroupSet.LoadEntryString(strEntryWithLanguage, &Data))
81  {
82  C4Group *pGroup = hGroupSet.FindEntry(strEntryWithLanguage.getData());
83  FinishLoad(strEntryWithLanguage, *pGroup);
84  // Got it
85  return true;
86  }
87  // Couldn't insert language code anyway - no point in trying other languages
88  if (!SSearch(strEntry, "%s")) break;
89  }
90  }
91  // Truncate any additional segments from stored filename
92  SReplaceChar(Filename.getMData(), '|', 0);
93  // for error message purposes, the first group failed to provide the desired file
94  CopyFilePathFromGroup(*hGroupSet.GetGroup(0));
95  // Not loaded
96  return false;
97 }
bool LoadEntryString(const char *szEntryName, StdStrBuf *rBuf)
Definition: C4GroupSet.cpp:225
C4Group * GetGroup(int32_t iIndex)
Definition: C4GroupSet.cpp:259
C4Group * FindEntry(const char *szWildcard, int32_t *pPriority=nullptr, int32_t *pID=nullptr)
Definition: C4GroupSet.cpp:175

References _MAX_FNAME_LEN, C4ComponentHost::Clear(), StdStrBuf::Copy(), C4ComponentHost::CopyFilePathFromGroup(), C4ComponentHost::Data, C4ComponentHost::Filename, C4GroupSet::FindEntry(), C4ComponentHost::FinishLoad(), StdStrBuf::Format(), StdStrBuf::getData(), C4GroupSet::GetGroup(), StdStrBuf::getMData(), C4GroupSet::LoadEntryString(), SCopySegment(), SReplaceChar(), and SSearch().

Here is the call graph for this function:

◆ LoadData()

bool C4ScriptHost::LoadData ( const char *  szFilename,
const char *  szData,
class C4LangStringTable pLocalTable 
)
virtualinherited

Reimplemented in C4GameScriptHost, and C4MapScriptHost.

Definition at line 184 of file C4ScriptHost.cpp.

185 {
186  // String Table
187  if (stringTable != pLocalTable)
188  {
190  stringTable = pLocalTable;
192  }
193  ScriptName.Copy(szFilename);
194 
195  StdStrBuf tempScript;
196  tempScript.Copy(szData);
197 
198  Script.Clear();
199  if(stringTable)
200  stringTable->ReplaceStrings(tempScript, Script);
201  else
202  Script.Take(tempScript);
203 
204  Preparse();
205  return true;
206 }
void ReplaceStrings(StdStrBuf &rBuf)
bool Preparse()
Definition: C4AulParse.cpp:693
void Take(char *pnData)
Definition: StdBuf.h:457

References C4LangStringTable::AddRef(), StdStrBuf::Clear(), StdStrBuf::Copy(), C4LangStringTable::DelRef(), C4ScriptHost::Preparse(), C4LangStringTable::ReplaceStrings(), C4ScriptHost::Script, C4ScriptHost::ScriptName, C4ScriptHost::stringTable, and StdStrBuf::Take().

Referenced by C4MapScriptHost::LoadData(), and C4GameScriptHost::LoadData().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ MakeScript()

void C4ScriptHost::MakeScript ( )
protectedinherited

Definition at line 208 of file C4ScriptHost.cpp.

209 {
210  // clear prev
211  Script.Clear();
212 
213  // create script
214  if (stringTable)
215  {
217  }
218  else
219  {
220  Script.Ref(GetDataBuf());
221  }
222 
223  // preparse script
224  Preparse();
225 }
const StdStrBuf & GetDataBuf() const

References StdStrBuf::Clear(), C4ComponentHost::GetDataBuf(), C4ScriptHost::Preparse(), StdStrBuf::Ref(), C4LangStringTable::ReplaceStrings(), C4ScriptHost::Script, and C4ScriptHost::stringTable.

Referenced by C4ScriptHost::Load().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ OnLoad()

virtual void C4ComponentHost::OnLoad ( )
inlineprotectedvirtualinherited

Reimplemented in C4LangStringTable.

Definition at line 39 of file C4ComponentHost.h.

39 {}

Referenced by C4ComponentHost::Clear(), and C4ComponentHost::FinishLoad().

Here is the caller graph for this function:

◆ Parse()

bool C4DefScriptHost::Parse ( )
overridevirtual

Reimplemented from C4ScriptHost.

Definition at line 283 of file C4ScriptHost.cpp.

284 {
285  bool r = C4ScriptHost::Parse();
286  assert(Def);
287 
288  // Check category
289  if (!Def->GetPlane() && Def->Category & C4D_SortLimit)
290  {
291  int Plane; bool gotplane = true;
292  switch (Def->Category & C4D_SortLimit)
293  {
294  case C4D_StaticBack: Plane = 100; break;
295  case C4D_Structure: Plane = C4Plane_Structure; break;
296  case C4D_Vehicle: Plane = 300; break;
297  case C4D_Living: Plane = 400; break;
298  case C4D_Object: Plane = 500; break;
299  case C4D_StaticBack | C4D_Background: Plane = -500; break;
300  case C4D_Structure | C4D_Background: Plane = -400; break;
301  case C4D_Vehicle | C4D_Background: Plane = -300; break;
302  case C4D_Living | C4D_Background: Plane = -200; break;
303  case C4D_Object | C4D_Background: Plane = -100; break;
304  case C4D_StaticBack | C4D_Foreground: Plane = 1100; break;
305  case C4D_Structure | C4D_Foreground: Plane = 1200; break;
306  case C4D_Vehicle | C4D_Foreground: Plane = 1300; break;
307  case C4D_Living | C4D_Foreground: Plane = 1400; break;
308  case C4D_Object | C4D_Foreground: Plane = 1500; break;
309  default:
310  Warn("Def %s (%s) has invalid category", Def->GetName(), Def->GetDataString().getData());
311  gotplane = false;
312  break;
313  }
314  if (gotplane) Def->SetProperty(P_Plane, C4VInt(Plane));
315  }
316  if (!Def->GetPlane())
317  {
318  Warn("Def %s (%s) has invalid Plane", Def->GetName(), Def->GetDataString().getData());
320  }
321  return r;
322 }
const int32_t C4D_Foreground
Definition: C4Def.h:53
const int32_t C4D_SortLimit
Definition: C4Def.h:57
const int32_t C4D_Background
Definition: C4Def.h:50
const int32_t C4D_Structure
Definition: C4Def.h:41
const int32_t C4D_Living
Definition: C4Def.h:43
const int32_t C4D_StaticBack
Definition: C4Def.h:40
const int32_t C4Plane_Structure
Definition: C4Def.h:60
const int32_t C4D_Object
Definition: C4Def.h:44
const int32_t C4D_Vehicle
Definition: C4Def.h:42
@ P_Plane
C4Value C4VInt(int32_t i)
Definition: C4Value.h:239
int32_t Category
Definition: C4Def.h:117
int32_t GetPlane()
Definition: C4Def.h:211
void SetProperty(C4PropertyName k, const C4Value &to)
Definition: C4PropList.h:124
StdStrBuf GetDataString() const
Definition: C4PropList.cpp:229
const char * GetName() const override
Definition: C4PropList.cpp:243
virtual bool Parse()

References C4D_Background, C4D_Foreground, C4D_Living, C4D_Object, C4D_SortLimit, C4D_StaticBack, C4D_Structure, C4D_Vehicle, C4Plane_Structure, C4VInt(), C4Def::Category, Def, StdStrBuf::getData(), C4PropListStatic::GetDataString(), C4PropListStatic::GetName(), C4Def::GetPlane(), P_Plane, C4ScriptHost::Parse(), C4PropList::SetProperty(), and C4ScriptHost::Warn().

Here is the call graph for this function:

◆ Preparse()

bool C4ScriptHost::Preparse ( )
protectedinherited

Definition at line 693 of file C4AulParse.cpp.

694 {
695  // handle easiest case first
696  if (State < ASS_NONE) return false;
697 
698  // clear stuff
699  Includes.clear(); Appends.clear();
700 
701  GetPropList()->C4PropList::Clear();
703  LocalValues.Clear();
704 
705  // Add any engine functions specific to this script
707 
708  // Insert default warnings
709  assert(enabledWarnings.empty());
710  auto &warnings = enabledWarnings[Script.getData()];
711 #define DIAG(id, text, enabled) warnings.set(static_cast<size_t>(C4AulWarningId::id), enabled);
712 #include "C4AulWarnings.h"
713 #undef DIAG
714 
715  C4AulParse parser(this);
716  ast = parser.Parse_Script(this);
717 
718  C4AulCompiler::Preparse(this, this, ast.get());
719 
720  // #include will have to be resolved now...
721  IncludesResolved = false;
722 
723  // Parse will write the properties back after the ones from included scripts
724  GetPropList()->Properties.Swap(&LocalValues);
725 
726  // return success
727  this->State = ASS_PREPARSED;
728  return true;
729 }
@ ASS_PREPARSED
Definition: C4ScriptHost.h:34
static void Preparse(C4ScriptHost *out, C4ScriptHost *source, const ::aul::ast::Script *s)
C4PropListStatic * GetPropList()
Definition: C4Aul.h:151
C4AulScriptEngine * Engine
Definition: C4ScriptHost.h:77
virtual void AddEngineFunctions()
Definition: C4ScriptHost.h:83
bool IncludesResolved
Definition: C4ScriptHost.h:89

References C4ScriptHost::AddEngineFunctions(), C4ScriptHost::Appends, ASS_NONE, ASS_PREPARSED, C4VPropList(), C4Set< T >::Clear(), C4ScriptHost::Engine, StdStrBuf::getData(), C4AulScriptEngine::GetPropList(), C4ScriptHost::GetPropList(), C4ScriptHost::Includes, C4ScriptHost::IncludesResolved, C4ScriptHost::LocalValues, P_Prototype, C4AulParse::Parse_Script(), C4AulCompiler::Preparse(), C4ScriptHost::Script, C4PropList::SetProperty(), and C4ScriptHost::State.

Referenced by C4ScriptHost::LoadData(), and C4ScriptHost::MakeScript().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Reg2List()

void C4ScriptHost::Reg2List ( C4AulScriptEngine pEngine)
inherited

Definition at line 146 of file C4ScriptHost.cpp.

147 {
148  // already regged? (def reloaded)
149  if (Engine) return;
150  // reg to list
151  if ((Engine = pEngine))
152  {
153  if ((Prev = Engine->ChildL))
154  Prev->Next = this;
155  else
156  Engine->Child0 = this;
157  Engine->ChildL = this;
158  }
159  else
160  Prev = nullptr;
161  Next = nullptr;
162 }
C4ScriptHost * ChildL
Definition: C4Aul.h:121
C4ScriptHost * Child0
Definition: C4Aul.h:121
C4ScriptHost * Next
Definition: C4ScriptHost.h:78
C4ScriptHost * Prev
Definition: C4ScriptHost.h:78

References C4AulScriptEngine::Child0, C4AulScriptEngine::ChildL, C4ScriptHost::Engine, C4ScriptHost::Next, and C4ScriptHost::Prev.

Referenced by C4MapScriptHost::InitFunctionMap(), C4Game::InitScriptEngine(), C4GameScriptHost::Load(), C4Def::Load(), C4Game::LoadAdditionalSystemGroup(), C4GameScriptHost::LoadData(), and C4ScenarioSection::ScenarioLoad().

Here is the caller graph for this function:

◆ ReloadScript()

bool C4ScriptHost::ReloadScript ( const char *  szPath,
const char *  szLanguage 
)
protectedvirtualinherited

Definition at line 227 of file C4ScriptHost.cpp.

228 {
229  // this?
230  if (SEqualNoCase(szPath, GetFilePath()) || (stringTable && SEqualNoCase(szPath, stringTable->GetFilePath())))
231  {
232  // try reload
233  char szParentPath[_MAX_PATH_LEN]; C4Group ParentGrp;
234  if (GetParentPath(szPath, szParentPath))
235  if (ParentGrp.Open(szParentPath))
236  if (Load(ParentGrp, nullptr, szLanguage, stringTable))
237  return true;
238  }
239  return false;
240 }
#define _MAX_PATH_LEN
bool SEqualNoCase(const char *szStr1, const char *szStr2, int iLen)
Definition: Standard.cpp:213
bool GetParentPath(const char *szFilename, char *szBuffer)
Definition: StdFile.cpp:186
bool Open(const char *group_name, bool do_create=false)
Definition: C4Group.cpp:660
virtual bool Load(C4Group &hGroup, const char *szFilename, const char *szLanguage, C4LangStringTable *pLocalTable)

References _MAX_PATH_LEN, C4ComponentHost::GetFilePath(), GetParentPath(), C4ScriptHost::Load(), C4Group::Open(), SEqualNoCase(), and C4ScriptHost::stringTable.

Here is the call graph for this function:

◆ ResolveAppends()

bool C4ScriptHost::ResolveAppends ( C4DefList rDefs)
protectedinherited

Definition at line 46 of file C4AulLink.cpp.

47 {
48  // resolve local appends
49  if (State != ASS_PREPARSED) return false;
50  for (auto & Append : Appends)
51  {
52  if (Append != "*" || !rDefs)
53  {
54  C4Def *Def = rDefs ? rDefs->GetByName(Append) : nullptr;
55  if (Def)
56  {
57  DoAppend(Def);
58  }
59  else
60  {
61  // save id in buffer because AulWarn will use the buffer of C4IdText
62  // to get the id of the object in which the error occurs...
63  // (stupid static buffers...)
64  Warn("#appendto %s not found", Append.getData());
65  }
66  }
67  else
68  {
69  // append to all defs
70  for (int i = 0; i < rDefs->GetDefCount(); i++)
71  {
72  C4Def *pDef = rDefs->GetDef(i);
73  if (!pDef) break;
74  if (pDef == GetPropList()) continue;
75  // append
76  DoAppend(pDef);
77  }
78  }
79  }
80  return true;
81 }
Definition: C4Def.h:99
int32_t GetDefCount()
C4Def * GetDef(int32_t Index)
C4Def * GetByName(const StdStrBuf &)
void DoAppend(C4Def *def)
Definition: C4AulLink.cpp:28

References C4ScriptHost::Appends, ASS_PREPARSED, C4ScriptHost::DoAppend(), C4DefList::GetByName(), C4DefList::GetDef(), C4DefList::GetDefCount(), C4ScriptHost::GetPropList(), C4ScriptHost::State, and C4ScriptHost::Warn().

Here is the call graph for this function:

◆ ResolveIncludes()

bool C4ScriptHost::ResolveIncludes ( C4DefList rDefs)
protectedinherited

Definition at line 83 of file C4AulLink.cpp.

84 {
85  // Had been preparsed?
86  if (State != ASS_PREPARSED) return false;
87  // has already been resolved?
88  if (IncludesResolved) return true;
89  // catch circular includes
90  if (Resolving)
91  {
92  Engine->GetErrorHandler()->OnError(C4AulParseError(this, "Circular include chain detected - ignoring all includes!").what());
93  IncludesResolved = true;
94  State = ASS_LINKED;
95  return false;
96  }
97  Resolving=true;
98  // append all includes to local script
99  for (std::list<StdCopyStrBuf>::reverse_iterator i = Includes.rbegin(); i != Includes.rend(); ++i)
100  {
101  C4Def *Def = rDefs ? rDefs->GetByName(*i) : nullptr;
102  if (Def)
103  {
104  // resolve #includes in included script first (#include-chains :( )
105  if (!Def->Script.IncludesResolved)
106  if (!Def->Script.ResolveIncludes(rDefs))
107  continue; // skip this #include
108 
109  for (auto s = Def->Script.SourceScripts.rbegin(); s != Def->Script.SourceScripts.rend(); ++s)
110  {
111  if (std::find(SourceScripts.begin(), SourceScripts.end(), *s) == SourceScripts.end())
112  SourceScripts.push_front(*s);
113  }
114  }
115  else
116  {
117  // save id in buffer because AulWarn will use the buffer of C4IdText
118  // to get the id of the object in which the error occurs...
119  // (stupid static buffers...)
120  Warn("#include %s not found", i->getData());
121  }
122  }
123  IncludesResolved = true;
124  // includes/appends are resolved now (for this script)
125  Resolving=false;
126  State = ASS_LINKED;
127  return true;
128 }
#define s
@ ASS_LINKED
Definition: C4ScriptHost.h:35
virtual void OnError(const char *msg)=0
C4AulErrorHandler * GetErrorHandler() const
Definition: C4Aul.h:173
bool ResolveIncludes(C4DefList *rDefs)
Definition: C4AulLink.cpp:83

References ASS_LINKED, ASS_PREPARSED, C4ScriptHost::Engine, C4DefList::GetByName(), C4AulScriptEngine::GetErrorHandler(), C4ScriptHost::Includes, C4ScriptHost::IncludesResolved, C4AulErrorHandler::OnError(), C4ScriptHost::ResolveIncludes(), C4ScriptHost::Resolving, s, C4Def::Script, C4ScriptHost::SourceScripts, C4ScriptHost::State, and C4ScriptHost::Warn().

Referenced by C4ScriptHost::ResolveIncludes().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ SetDef()

void C4DefScriptHost::SetDef ( C4Def to_def)
inline

Definition at line 144 of file C4ScriptHost.h.

144 { Def=to_def; }

References Def.

Referenced by C4Def::C4Def().

Here is the caller graph for this function:

◆ Translate()

std::string C4ScriptHost::Translate ( const std::string &  text) const
inherited

Definition at line 242 of file C4ScriptHost.cpp.

243 {
244  if (stringTable)
245  return stringTable->Translate(text);
247 }
const std::string & Translate(const std::string &text) const

References C4ScriptHost::stringTable, C4ScriptGuiWindowPropertyName::text, and C4LangStringTable::Translate().

Here is the call graph for this function:

◆ UnLink()

void C4ScriptHost::UnLink ( )
protectedvirtualinherited

Definition at line 130 of file C4AulLink.cpp.

131 {
132  C4PropList * p = GetPropList();
133  if (p)
134  {
135  p->C4PropList::Clear();
137  }
138 
139  // Delete cyclic references of owned proplists
141 
142  // includes will have to be re-resolved now
143  IncludesResolved = false;
144 
146 }

References ASS_PREPARSED, C4VPropList(), C4ScriptHost::DeleteOwnedPropLists(), C4ScriptHost::Engine, C4AulScriptEngine::GetPropList(), C4ScriptHost::GetPropList(), C4ScriptHost::IncludesResolved, P_Prototype, C4PropList::SetProperty(), and C4ScriptHost::State.

Here is the call graph for this function:

◆ UnlinkOwnedFunctions()

void C4ScriptHost::UnlinkOwnedFunctions ( )
protectedinherited

Definition at line 72 of file C4ScriptHost.cpp.

73 {
74  // Remove owned functions from their parents. This solves a problem
75  // where overloading a definition would unload the C4ScriptHost, but
76  // keep around global functions, which then contained dangling pointers.
77  for (const auto &box : ownedFunctions)
78  {
79  assert(box.GetType() == C4V_Function);
80  C4AulScriptFunc *func = box._getFunction()->SFunc();
81  C4PropList *parent = func->Parent;
82  if (parent == GetPropList())
83  continue;
84  assert(parent == &::ScriptEngine);
85  C4Value v;
86  parent->GetPropertyByS(func->Name, &v);
87  if (v.getFunction() == func)
88  {
89  // If the function we're deleting is the top-level function in
90  // the inheritance chain, promote the next one in its stead;
91  // if there is no overloaded function, remove the property.
92  parent->Thaw();
93  if (func->OwnerOverloaded)
94  parent->SetPropertyByS(func->Name, C4VFunction(func->OwnerOverloaded));
95  else
96  parent->ResetProperty(func->Name);
97  }
98  else
99  {
100  C4AulScriptFunc *func_chain = v.getFunction()->SFunc();
101  assert(func_chain != func);
102  while (func_chain)
103  {
104  // Unlink the removed function from the inheritance chain
105  if (func_chain->OwnerOverloaded == func)
106  {
107  func_chain->OwnerOverloaded = func->OwnerOverloaded;
108  func->OwnerOverloaded = nullptr; // func_chain now takes care of this.
109  func->DecRef(); // decrease rc because func_chain no longer has a reference to func.
110  break;
111  }
112  assert(func_chain->OwnerOverloaded && "Removed function not found in inheritance chain");
113  func_chain = func_chain->OwnerOverloaded->SFunc();
114  }
115  }
116  }
117  ownedFunctions.clear();
118 }
C4AulScriptEngine ScriptEngine
Definition: C4Globals.cpp:43
C4PropListStatic * Parent
Definition: C4AulFunc.h:55
C4AulFunc * OwnerOverloaded
C4AulScriptFunc * SFunc() override
void Thaw()
Definition: C4PropList.h:133
virtual bool GetPropertyByS(const C4String *k, C4Value *pResult) const
Definition: C4PropList.cpp:726
virtual void ResetProperty(C4String *k)
Definition: C4PropList.cpp:961
void DecRef()
Definition: C4StringTable.h:28
std::vector< C4Value > ownedFunctions
Definition: C4ScriptHost.h:97

References C4V_Function, C4VFunction(), C4RefCnt::DecRef(), C4Value::getFunction(), C4PropList::GetPropertyByS(), C4ScriptHost::GetPropList(), C4AulFunc::Name, C4ScriptHost::ownedFunctions, C4AulScriptFunc::OwnerOverloaded, C4AulFunc::Parent, C4PropList::ResetProperty(), ScriptEngine, C4PropList::SetPropertyByS(), C4AulFunc::SFunc(), C4AulScriptFunc::SFunc(), and C4PropList::Thaw().

Referenced by C4ScriptHost::Clear().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Unreg()

void C4ScriptHost::Unreg ( )
protectedinherited

Definition at line 137 of file C4ScriptHost.cpp.

138 {
139  // remove from list
140  if (Prev) Prev->Next = Next; else if (Engine) Engine->Child0 = Next;
141  if (Next) Next->Prev = Prev; else if (Engine) Engine->ChildL = Prev;
142  Prev = Next = nullptr;
143  Engine = nullptr;
144 }

References C4AulScriptEngine::Child0, C4AulScriptEngine::ChildL, C4ScriptHost::Engine, C4ScriptHost::Next, and C4ScriptHost::Prev.

Referenced by C4AulScriptEngine::Clear(), and C4ScriptHost::~C4ScriptHost().

Here is the caller graph for this function:

◆ Warn()

void C4ScriptHost::Warn ( const char *  pMsg,
  ... 
)
protectedinherited

Definition at line 124 of file C4AulParse.cpp.

125 {
126  va_list args; va_start(args, pMsg);
127  StdStrBuf Buf = FormatStringV(pMsg, args);
128  Buf.AppendFormat(" (%s)", ScriptName.getData());
130  va_end(args);
131 }
StdStrBuf FormatStringV(const char *szFmt, va_list args)
Definition: StdBuf.cpp:276
virtual void OnWarning(const char *msg)=0
void AppendFormat(const char *szFmt,...) GNUC_FORMAT_ATTRIBUTE_O
Definition: StdBuf.cpp:190

References StdStrBuf::AppendFormat(), C4ScriptHost::Engine, FormatStringV(), StdStrBuf::getData(), C4AulScriptEngine::GetErrorHandler(), C4AulErrorHandler::OnWarning(), and C4ScriptHost::ScriptName.

Referenced by C4ScriptHost::DoAppend(), Parse(), C4ScriptHost::ResolveAppends(), and C4ScriptHost::ResolveIncludes().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ Appends

◆ Data

◆ Def

C4Def* C4DefScriptHost::Def {nullptr}
protected

Definition at line 148 of file C4ScriptHost.h.

Referenced by GetPropList(), Parse(), and SetDef().

◆ Engine

◆ Filename

StdCopyStrBuf C4ComponentHost::Filename
protectedinherited

◆ FilePath

StdCopyStrBuf C4ComponentHost::FilePath
protectedinherited

◆ Includes

◆ IncludesResolved

bool C4ScriptHost::IncludesResolved
protectedinherited

◆ LocalValues

C4Set<C4Property> C4ScriptHost::LocalValues
protectedinherited

Definition at line 93 of file C4ScriptHost.h.

Referenced by C4ScriptHost::Clear(), and C4ScriptHost::Preparse().

◆ Next

C4ScriptHost * C4ScriptHost::Next {nullptr}
protectedinherited

Definition at line 78 of file C4ScriptHost.h.

Referenced by C4ScriptHost::Reg2List(), and C4ScriptHost::Unreg().

◆ ownedFunctions

std::vector<C4Value> C4ScriptHost::ownedFunctions
protectedinherited

◆ ownedPropLists

std::vector<C4Value> C4ScriptHost::ownedPropLists
protectedinherited

Definition at line 102 of file C4ScriptHost.h.

Referenced by C4ScriptHost::DeleteOwnedPropLists().

◆ Prev

C4ScriptHost* C4ScriptHost::Prev {nullptr}
protectedinherited

Definition at line 78 of file C4ScriptHost.h.

Referenced by C4ScriptHost::Reg2List(), and C4ScriptHost::Unreg().

◆ Resolving

bool C4ScriptHost::Resolving
protectedinherited

Definition at line 88 of file C4ScriptHost.h.

Referenced by C4ScriptHost::C4ScriptHost(), and C4ScriptHost::ResolveIncludes().

◆ Script

◆ ScriptName

◆ SourceScripts

std::deque<C4ScriptHost *> C4ScriptHost::SourceScripts
inherited

◆ State

◆ stringTable


The documentation for this class was generated from the following files: