forked from Mirrors/openclonk
C4AulParseError: Enable creation from host and source pointer
Instead of having a C4AulParseError constructor read the location data from the parse state, allow explicit construction from a known location.liquid_container
parent
cfdb1142b8
commit
367f58b1cc
|
@ -44,8 +44,11 @@ public:
|
|||
// parse error
|
||||
class C4AulParseError : public C4AulError
|
||||
{
|
||||
C4AulParseError() = default;
|
||||
public:
|
||||
C4AulParseError(C4ScriptHost *pScript, const char *pMsg, const char *pIdtf = NULL, bool Warn = false); // constructor
|
||||
C4AulParseError(C4ScriptHost *pScript, const char *pMsg, const char *pIdtf = NULL, bool Warn = false);
|
||||
static C4AulParseError FromSPos(const C4ScriptHost *host, const char *SPos, C4AulScriptFunc *Fn, const char *msg, const char *Idtf = nullptr, bool Warn = false);
|
||||
// constructor
|
||||
C4AulParseError(class C4AulParse * state, const char *pMsg, const char *pIdtf = NULL, bool Warn = false); // constructor
|
||||
};
|
||||
|
||||
|
|
|
@ -179,6 +179,35 @@ void C4AulParse::Error(const char *pMsg, ...)
|
|||
throw C4AulParseError(this, Buf.getData());
|
||||
}
|
||||
|
||||
C4AulParseError C4AulParseError::FromSPos(const C4ScriptHost *host, const char *SPos, C4AulScriptFunc *Fn, const char *msg, const char *Idtf, bool Warn)
|
||||
{
|
||||
C4AulParseError e;
|
||||
e.sMessage.Format("%s: %s%s",
|
||||
Warn ? "WARNING" : "ERROR",
|
||||
msg,
|
||||
Idtf ? Idtf : "");
|
||||
|
||||
if (Fn && Fn->GetName())
|
||||
{
|
||||
e.sMessage.AppendFormat(" (in %s", Fn->GetName());
|
||||
if (host && SPos)
|
||||
e.sMessage.AppendFormat(", %s:%d:%d)",
|
||||
host->ScriptName.getData(),
|
||||
SGetLine(host->GetScript(), SPos),
|
||||
SLineGetCharacters(host->GetScript(), SPos));
|
||||
else
|
||||
e.sMessage.AppendChar(')');
|
||||
}
|
||||
else if (host && SPos)
|
||||
{
|
||||
e.sMessage.AppendFormat(" (%s:%d:%d)",
|
||||
host->ScriptName.getData(),
|
||||
SGetLine(host->GetScript(), SPos),
|
||||
SLineGetCharacters(host->GetScript(), SPos));
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
C4AulParseError::C4AulParseError(C4AulParse * state, const char *pMsg, const char *pIdtf, bool Warn)
|
||||
: C4AulError()
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue