[*] Not a day goes by without Roman Medvedev giving me grief

(Updated fmtlib after 3 years lol)
This commit is contained in:
Reece Wilson 2024-02-16 13:07:28 +00:00
parent ae17ad13fe
commit 260e33fd91
17 changed files with 184 additions and 127 deletions

View File

@ -30,7 +30,8 @@
#if !(defined(AU_CFG_ID_SHIP) || defined(AURORA_ASSERTIONS_FORCE_SHIP))
/// @private
template<typename ... T>
static auline void SysAssertFileEx(const char *file, int fileno, const char *func, bool tru, T... args)
static auline void SysAssertFileEx(const char *file, int fileno, const char *func, bool tru,
fmt::format_string<T...> msg, T&& ... args)
{
if (tru)
{
@ -43,16 +44,25 @@
"Fatal",
"Expression address: {} {}:{}", func, file, fileno);
if constexpr (sizeof...(T) == 0)
{
SysPanic2(fileno, "That's all folks");
}
else
{
SysPanic2(fileno, args...);
}
SysPanic2<T...>(fileno, msg, AuForward<T>(args)...);
}
template<typename ... T>
static auline void SysAssertFileEx(const char *file, int fileno, const char *func, bool tru)
{
if (tru)
{
return;
}
Aurora::Logging::WriteLinef(
static_cast<AuUInt8>(Aurora::Logging::ELogLevel::eError),
Aurora::Console::EAnsiColor::eBoldRed,
"Fatal",
"Expression address: {} {}:{}", func, file, fileno);
SysPanic2(fileno, "That's all folks");
}
/**
@ -75,21 +85,14 @@
/// @private
template<typename ... T>
static auline void SysAssertEx(bool tru, int filenoOpt, T... args)
static auline void SysAssertEx(bool tru, int filenoOpt, fmt::format_string<T...> msg, T&& ... args)
{
if (tru)
{
return;
}
if constexpr (sizeof...(T) == 0)
{
SysPanic2(filenoOpt, "That's all folks");
}
else
{
SysPanic2(filenoOpt, args...);
}
SysPanic2(filenoOpt, msg, args...);
}
/**
@ -114,7 +117,7 @@
#if !(defined(AU_CFG_ID_SHIP) || defined(AURORA_ASSERTIONS_FORCE_SHIP))
/// @private
template<typename ... T>
static auline void SysAssertFileExpEx(const char *file, int fileno, const char *func, const char *exp, bool tru, T... args)
static auline void SysAssertFileExpEx(const char *file, int fileno, const char *func, const char *exp, bool tru, fmt::format_string<T...> msg, T&& ... args)
{
if (tru)
{
@ -133,16 +136,32 @@
"Fatal",
"Expression failed: {}", exp);
if constexpr (sizeof...(T) == 0)
{
SysPanic2(fileno, "That's all folks");
}
else
{
SysPanic2(fileno, args...);
}
SysPanic2<T...>(fileno, msg, AuForward<T>(args)...);
}
/// @private
template<typename ... T>
static auline void SysAssertFileExpEx(const char *file, int fileno, const char *func, const char *exp, bool tru)
{
if (tru)
{
return;
}
Aurora::Logging::WriteLinef(
static_cast<AuUInt8>(Aurora::Logging::ELogLevel::eError),
Aurora::Console::EAnsiColor::eBoldRed,
"Fatal",
"Expression address: {} {}:{}", func, file, fileno);
Aurora::Logging::WriteLinef(
static_cast<AuUInt8>(Aurora::Logging::ELogLevel::eError),
Aurora::Console::EAnsiColor::eBoldRed,
"Fatal",
"Expression failed: {}", exp);
SysPanic2(fileno, "That's all folks");
}
/**
@ -165,7 +184,7 @@
#else
/// @private
template<typename ... T>
static auline void SysAssertExpEx(const char *exp, int filenoOpt, bool tru, T... args)
static auline void SysAssertExpEx(const char *exp, int filenoOpt, bool tru, fmt::format_string<T...> msg, T&& ... args)
{
if (tru)
{
@ -180,14 +199,7 @@
"Expression failed: {}", exp);
#endif
if constexpr (sizeof...(T) == 0)
{
SysPanic2(filenoOpt, "That's all folks");
}
else
{
SysPanic2(filenoOpt, args...);
}
SysPanic2(filenoOpt, msg, args...);
}

View File

@ -45,27 +45,27 @@ namespace Aurora::Debug
_PushError(GetIPNoBackend(), EFailureCategory::kFailureNested, nullptr);
}
template<typename ... T>
AU_INLINE void ErrorMakeNested(const AuString &msg, T&& ... args)
template<typename ... Args>
AU_INLINE void ErrorMakeNested(fmt::format_string<Args...> msg, Args&& ... args)
{
if constexpr (sizeof...(T) == 0)
if constexpr (sizeof...(Args) == 0)
{
_PushError(GetIPNoBackend(), EFailureCategory::kFailureNested, msg.c_str());
_PushError(GetIPNoBackend(), EFailureCategory::kFailureNested, msg.get().data());
}
else
{
#if defined(_AUHAS_FMT)
AUROXTL_COMMODITY_TRY
{
auto tempString = fmt::format(msg, AuForward<T>(args)...);
auto tempString = fmt::format(msg, AuForward<Args>(args)...);
_PushError(GetIPNoBackend(), EFailureCategory::kFailureNested, tempString.c_str());
}
AUROXTL_COMMODITY_CATCH
{
_PushError(GetIPNoBackend(), EFailureCategory::kFailureNested, msg.c_str());
_PushError(GetIPNoBackend(), EFailureCategory::kFailureNested, msg.get().data());
}
#else
_PushError(GetIPNoBackend(), EFailureCategory::kFailureNested, msg.c_str());
_PushError(GetIPNoBackend(), EFailureCategory::kFailureNested, msg.get().data());
#endif
}
}
@ -75,37 +75,47 @@ namespace Aurora::Debug
_PushError(GetIPNoBackend(), EFailureCategory::kFailureNested, msg);
}
template<typename ... T>
AU_INLINE void SysPushError(EFailureCategory category, const AuString &msg, T&& ... args)
template<typename ... Args>
AU_INLINE void SysPushError(EFailureCategory category, fmt::format_string<Args...> msg, Args&& ... args)
{
if constexpr (sizeof...(T) == 0)
if constexpr (sizeof...(Args) == 0)
{
_PushError(GetIPNoBackend(), category, msg.c_str());
_PushError(GetIPNoBackend(), category, msg.get().data());
}
else
{
#if defined(_AUHAS_FMT)
AUROXTL_COMMODITY_TRY
{
auto tempString = fmt::format(msg, AuForward<T>(args)...);
auto tempString = fmt::format(msg.get().data(), AuForward<Args>(args)...);
_PushError(GetIPNoBackend(), category, tempString.c_str());
}
AUROXTL_COMMODITY_CATCH
{
_PushError(GetIPNoBackend(), category, msg.c_str());
_PushError(GetIPNoBackend(), category, msg.get().data());
}
#else
_PushError(GetIPNoBackend(), category, msg.c_str());
_PushError(GetIPNoBackend(), category, msg.get().data());
#endif
}
}
template<typename ... T>
AU_INLINE void SysPushError(EFailureCategory category, AuUInt16 uLineHint, const AuString &msg, T&& ... args)
AU_INLINE void SysPushError(EFailureCategory category, const AuString &str)
{
if constexpr (sizeof...(T) == 0)
_PushError(GetIPNoBackend(), category, str.c_str());
}
AU_INLINE void SysPushError(EFailureCategory category, AuUInt16 uLineHint, const AuString &str)
{
_PushError(GetIPNoBackend(), category, str.c_str(), uLineHint);
}
template<typename ... Args>
AU_INLINE void SysPushError(EFailureCategory category, AuUInt16 uLineHint, fmt::format_string<Args...> msg, Args&& ... args)
{
if constexpr (sizeof...(Args) == 0)
{
_PushError(GetIPNoBackend(), category, msg.c_str());
_PushError(GetIPNoBackend(), category, msg.get().data());
}
else
{
@ -113,15 +123,15 @@ namespace Aurora::Debug
#if defined(_AUHAS_FMT)
AUROXTL_COMMODITY_TRY
{
auto tempString = fmt::format(msg, AuForward<T>(args)...);
auto tempString = fmt::format(msg, AuForward<Args>(args)...);
_PushError(GetIPNoBackend(), category, tempString.c_str(), uLineHint);
}
AUROXTL_COMMODITY_CATCH
{
_PushError(GetIPNoBackend(), category, msg.c_str(), uLineHint);
_PushError(GetIPNoBackend(), category, msg.get().data(), uLineHint);
}
#else
_PushError(GetIPNoBackend(), category, msg.c_str(), uLineHint);
_PushError(GetIPNoBackend(), category, msg.get().data(), uLineHint);
#endif
Aurora::Debug::DecMemoryCrunch();
}

View File

@ -14,21 +14,18 @@ namespace Aurora
#if defined(_AUHAS_FMT)
template<typename ... T>
static inline void AU_NORETURN SysPanic(T... args)
static inline void AU_NORETURN SysPanic(fmt::format_string<T...> msg, T&& ... args)
{
if (Aurora::RuntimeHasStarted())
{
if constexpr (sizeof...(T) != 0)
Aurora::Debug::AddMemoryCrunch();
try
{
Aurora::Logging::WriteLinef(static_cast<AuUInt8>(Aurora::Logging::ELogLevel::eError), Aurora::Console::EAnsiColor::eBoldRed, "Fatal", msg, AuForward<T>(args)...);
}
catch (...)
{
Aurora::Debug::AddMemoryCrunch();
try
{
Aurora::Logging::WriteLinef(static_cast<AuUInt8>(Aurora::Logging::ELogLevel::eError), Aurora::Console::EAnsiColor::eBoldRed, "Fatal", AuForward<T>(args)...);
}
catch (...)
{
}
}
}
Aurora::Debug::Panic();
@ -36,26 +33,64 @@ static inline void AU_NORETURN SysPanic(T... args)
template<typename ... T>
static inline void AU_NORETURN SysPanic2(AuUInt uLineHintInNonshipBinary,
T... args)
fmt::format_string<T...> msg, T&& ... args)
{
if (Aurora::RuntimeHasStarted())
{
if constexpr (sizeof...(T) != 0)
Aurora::Debug::AddMemoryCrunch();
try
{
Aurora::Logging::WriteLinef(static_cast<AuUInt8>(Aurora::Logging::ELogLevel::eError), Aurora::Console::EAnsiColor::eBoldRed, "Fatal", msg, AuForward<T>(args)...);
}
catch (...)
{
Aurora::Debug::AddMemoryCrunch();
try
{
Aurora::Logging::WriteLinef(static_cast<AuUInt8>(Aurora::Logging::ELogLevel::eError), Aurora::Console::EAnsiColor::eBoldRed, "Fatal", AuForward<T>(args)...);
}
catch (...)
{
}
}
}
Aurora::Debug::Panic2(uLineHintInNonshipBinary);
}
template<typename ... T>
static inline void AU_NORETURN SysPanic()
{
if (Aurora::RuntimeHasStarted())
{
Aurora::Debug::AddMemoryCrunch();
try
{
Aurora::Logging::WriteLinef(static_cast<AuUInt8>(Aurora::Logging::ELogLevel::eError), Aurora::Console::EAnsiColor::eBoldRed, "Fatal");
}
catch (...)
{
}
}
Aurora::Debug::Panic();
}
template<typename ... T>
static inline void AU_NORETURN SysPanic2(AuUInt uLineHintInNonshipBinary)
{
if (Aurora::RuntimeHasStarted())
{
Aurora::Debug::AddMemoryCrunch();
try
{
Aurora::Logging::WriteLinef(static_cast<AuUInt8>(Aurora::Logging::ELogLevel::eError), Aurora::Console::EAnsiColor::eBoldRed, "Fatal");
}
catch (...)
{
}
}
Aurora::Debug::Panic2(uLineHintInNonshipBinary);
}
static inline AU_NORETURN void SysPanic(const char *pMsg)
{
SysPanic("{}", pMsg);
}
static inline AU_NORETURN void SysUnreachable_(int uLineHintInNonshipBinary)
{
Aurora::Debug::Panic2(uLineHintInNonshipBinary);

View File

@ -34,8 +34,8 @@ namespace Aurora::Logging
#if defined(_AUHAS_FMT)
template<typename Line_t, typename ... T>
inline void WriteLinef(AuUInt8 level, const AuString &tag, const Line_t &msg, T&& ... args)
template<typename ... T>
inline void WriteLinef(AuUInt8 level, const AuString &tag, fmt::format_string<T...> msg, T&& ... args)
{
AU_DEBUG_MEMCRUNCH;
@ -49,8 +49,8 @@ namespace Aurora::Logging
}
}
template<typename Line_t, typename ... T>
inline void WriteLinef(AuUInt8 level, EAnsiColor color, const AuString &tag, const Line_t &msg, T&& ... args)
template<typename ... T>
inline void WriteLinef(AuUInt8 level, EAnsiColor color, const AuString &tag, fmt::format_string<T...> msg, T&& ... args)
{
AU_DEBUG_MEMCRUNCH;
@ -64,21 +64,21 @@ namespace Aurora::Logging
}
}
template<typename Line_t, typename ... T>
inline void LogVerbose(const Line_t &line, T&& ... args)
template<typename ... T>
inline void LogVerbose(fmt::format_string<T...> line, T&& ... args)
{
WriteLinef(static_cast<AuUInt8>(ELogLevel::eVerbose), EAnsiColor::eYellow, "Verbose", line, AuForward<T>(args)...);
}
#if defined(STAGING) || defined(DEBUG)
template<typename Line_t, typename ... T>
inline auline void LogVerboseNoShip(const Line_t &line, T&& ... args)
template<typename ... T>
inline auline void LogVerboseNoShip(fmt::format_string<T...> line, T&& ... args)
{
WriteLinef(static_cast<AuUInt8>(ELogLevel::eVerbose), EAnsiColor::eYellow, "Verbose", line, AuForward<T>(args)...);
}
#else
template<typename Line_t, typename ... T>
inline auline void LogVerboseNoShip(const Line_t &line, T&& ... args)
template<typename ... T>
inline auline void LogVerboseNoShip(fmt::format_string<T...> line, T&& ... args)
{}
#endif
@ -87,38 +87,38 @@ namespace Aurora::Logging
}
template<typename Line_t, typename ... T>
inline void LogInfo(const Line_t &line, T&& ... args)
template<typename ... T>
inline void LogInfo(fmt::format_string<T...> line, T&& ... args)
{
WriteLinef(static_cast<AuUInt8>(ELogLevel::eInfo), EAnsiColor::eGreen, "Info", line, AuForward<T>(args)...);
}
template<typename Line_t, typename ... T>
inline void LogDbg(const Line_t &line, T&& ... args)
template<typename ... T>
inline void LogDbg(fmt::format_string<T...> line, T&& ... args)
{
WriteLinef(static_cast<AuUInt8>(ELogLevel::eDebug), EAnsiColor::eYellow, "Debug", line, AuForward<T>(args)...);
}
template<typename Line_t, typename ... T>
inline void LogWarn(const Line_t &line, T&& ... args)
template<typename ... T>
inline void LogWarn(fmt::format_string<T...> line, T&& ... args)
{
WriteLinef(static_cast<AuUInt8>(ELogLevel::eWarn), EAnsiColor::eRed, "Warn", line, AuForward<T>(args)...);
}
template<typename Line_t, typename ... T>
inline void LogError(const Line_t &line, T&& ... args)
template<typename ... T>
inline void LogError(fmt::format_string<T...> line, T&& ... args)
{
WriteLinef(static_cast<AuUInt8>(ELogLevel::eError), EAnsiColor::eBoldRed, "Error", line, AuForward<T>(args)...);
}
template<typename Line_t, typename ... T>
inline void LogCritical(const Line_t &line, T&& ... args)
template<typename ... T>
inline void LogCritical(fmt::format_string<T...> line, T&& ... args)
{
WriteLinef(static_cast<AuUInt8>(ELogLevel::eCritical), EAnsiColor::eBoldRed, "Critical", line, AuForward<T>(args)...);
}
template<typename Line_t, typename ... T>
inline void LogGame(const Line_t &line, T&& ... args)
template<typename ... T>
inline void LogGame(fmt::format_string<T...> line, T&& ... args)
{
WriteLinef(static_cast<AuUInt8>(ELogLevel::eVerbose), EAnsiColor::eBlue, "Game", line, AuForward<T>(args)...);
}
@ -167,8 +167,8 @@ namespace Aurora::Logging
WriteLine(static_cast<AuUInt8>(ELogLevel::eError), ConsoleMessage(EAnsiColor::eBoldRed, "Error", line));
}
template<typename Line_t, typename ... T>
inline void LogCritical(const Line_t &line, T&& ... args)
template<typename ... T>
inline void LogCritical(fmt::format_string<T...> line, T&& ... args)
{
WriteLine(static_cast<AuUInt8>(ELogLevel::eCritical), ConsoleMessage(EAnsiColor::eBoldRed, "Critical", line));
}
@ -184,9 +184,9 @@ namespace Aurora::Logging
#define ADD_AU_GLOBAL_ALIAS(level)\
template<typename ... T> \
static void AuLog ## level(T&& ... args) \
static void AuLog ## level(fmt::format_string<T...> line, T&& ... args) \
{ \
Aurora::Logging::Log ## level(AuForward<T>(args)...); \
Aurora::Logging::Log ## level(line, AuForward<T>(args)...); \
}
ADD_AU_GLOBAL_ALIAS(Info)

View File

@ -910,7 +910,7 @@ namespace Aurora::Console::ConsoleTTY
auto file = AuIOFS::OpenUnique(this->historyFileName, AuIOFS::EFileOpenMode::eReadWrite);
if (!file)
{
SysPushErrorIO(this->historyFileName);
SysPushErrorIO("{}", this->historyFileName);
return;
}

View File

@ -62,7 +62,7 @@ namespace Aurora::Crypto::ECC
if (oidLength != in.dp.oidlen ||
AuMemcmp(in.dp.oid, oid, in.dp.oidlen * sizeof(unsigned long)))
{
SysPushErrorParam("Improper curve type, expected {}, got {}, for ECCCurveType: {}", ref.value()->OID, AuList<unsigned long>(in.dp.oid, in.dp.oid + in.dp.oidlen), curve);
SysPushErrorParam("Improper curve type, expected {}, got {}, for ECCCurveType: {}", ref.value()->OID, AuList<unsigned long>(in.dp.oid, in.dp.oid + in.dp.oidlen), (AuUInt)curve);
ecc_free(&in);
return nullptr;
}

View File

@ -42,7 +42,7 @@ namespace Aurora::Crypto::ECC
int hash = ::Crypto::HashMethodToId(method);
if (hash == 0xFF)
{
SysPushErrorCrypt("invalid hash {}", method);
SysPushErrorCrypt("invalid hash {}", AuUInt(method));
return false;
}

View File

@ -78,7 +78,7 @@ namespace Aurora::Crypto::ECC
int hash = ::Crypto::HashMethodToId(method);
if (hash == 0xFF)
{
SysPushErrorCrypt("invalid hash {}", method);
SysPushErrorCrypt("invalid hash {}", AuUInt(method));
return false;
}

View File

@ -47,7 +47,7 @@ namespace Aurora::Crypto::ECC
int hash = ::Crypto::HashMethodToId(method);
if (hash == 0xFF)
{
SysPushErrorCrypt("invalid hash {}", method);
SysPushErrorCrypt("invalid hash {}", AuUInt(method));
return false;
}

View File

@ -79,7 +79,7 @@ namespace Aurora::Crypto::ECC
int hash = ::Crypto::HashMethodToId(method);
if (hash == 0xFF)
{
SysPushErrorCrypt("invalid hash {}", method);
SysPushErrorCrypt("invalid hash {}", AuUInt(method));
return false;
}

View File

@ -48,7 +48,7 @@ namespace Aurora::Crypto::HMAC
int hash = ::Crypto::HashMethodToId(this->type_);
if (hash == 0xFF)
{
SysPushErrorCrypt("invalid hash {}", this->type_);
SysPushErrorCrypt("invalid hash {}", AuUInt(this->type_));
return false;
}

View File

@ -40,14 +40,14 @@ namespace Aurora::Crypto::RSA
int padding = ::Crypto::PaddingToType(type);
if (padding == 0xFF)
{
SysPushErrorCrypt("invalid pad {}", type);
SysPushErrorCrypt("invalid pad {}", (AuUInt)type);
return false;
}
int hash = ::Crypto::HashMethodToId(method);
if (hash == 0xFF)
{
SysPushErrorCrypt("invalid hash {}", method);
SysPushErrorCrypt("invalid hash {}", (AuUInt)method);
return false;
}
@ -115,7 +115,7 @@ namespace Aurora::Crypto::RSA
int padding = ::Crypto::PaddingToType(type);
if (padding == 0xFF)
{
SysPushErrorCrypt("invalid pad {}", type);
SysPushErrorCrypt("invalid pad {}", (AuUInt)type);
return false;
}

View File

@ -43,14 +43,14 @@ namespace Aurora::Crypto::RSA
int padding = ::Crypto::PaddingToType(type);
if (padding == 0xFF)
{
SysPushErrorCrypt("invalid pad {}", type);
SysPushErrorCrypt("invalid pad {}", AuUInt(type));
return false;
}
int hash = ::Crypto::HashMethodToId(method);
if (hash == 0xFF)
{
SysPushErrorCrypt("invalid hash {}", method);
SysPushErrorCrypt("invalid hash {}", AuUInt(method));
return false;
}
@ -101,7 +101,7 @@ namespace Aurora::Crypto::RSA
int padding = ::Crypto::PaddingToType(type);
if (padding == 0xFF)
{
SysPushErrorCrypt("invalid pad {}", type);
SysPushErrorCrypt("invalid pad {}", (AuUInt)type);
return false;
}

View File

@ -314,7 +314,7 @@ extern "C" AUKN_SYM void __stdcall _ReportMSVCSEH(void *exception, const void *t
AuDebug::ReportSEH(handle, exception, throwInfo, {}, trace,
[&](const AuString &str)
{
AuLogWarn("Local MSVC Exception: 0x{:x}, {}", exception, str.c_str());
AuLogWarn("Local MSVC Exception: 0x{:x}, {}", AuUInt(exception), str.c_str());
AuLogWarn("{}", StringifyStackTrace(trace));
});
}

View File

@ -224,7 +224,7 @@ namespace Aurora::IO
auto err = this->pAsyncStreamReader_->Dequeue(0, internalBuffer);
if (err != EStreamError::eErrorNone)
{
SysPushErrorIO("Async Stream Error: {}", err);
SysPushErrorIO("Async Stream Error: {}", (AuUInt)err);
TerminateOnThread(true);
return;
}
@ -239,7 +239,7 @@ namespace Aurora::IO
err = this->pAsyncStreamReader_->Dequeue(internalBuffer.length, internalBuffer);
if (err != EStreamError::eErrorNone)
{
SysPushErrorIO("Async Stream Error: {}", err);
SysPushErrorIO("Async Stream Error: {}", (AuUInt)err);
TerminateOnThread(true);
return;
}

View File

@ -432,7 +432,7 @@ namespace Aurora::Parse
break;
}
default:
SysPanic("Invalid consume tag {}", type);
SysPanic("Invalid consume tag {}", AuUInt(type));
}
return true;
@ -529,7 +529,7 @@ namespace Aurora::Parse
if (!ConsumeToken(state, ParsableTag::kParseUInt, arrayLengthBit))
{
SysPushErrorSyntaxError("Couldn't consume array length, label: {}, tag {}", parseBit.label, parseBit.tag);
SysPushErrorSyntaxError("Couldn't consume array length, label: {}, tag {}", parseBit.label, (AuUInt)parseBit.tag);
return false;
}
@ -567,7 +567,7 @@ namespace Aurora::Parse
break;
}
default:
SysPanic("Invalid consume tag {} for {}", parseBit.tag, parseBit.label);
SysPanic("Invalid consume tag {} for {}", (AuUInt)parseBit.tag, parseBit.label);
}
if (!ok)
@ -577,7 +577,7 @@ namespace Aurora::Parse
break;
}
SysPushErrorSyntaxError("Syntax error around: label: {}, tag {}", parseBit.label, parseBit.tag);
SysPushErrorSyntaxError("Syntax error around: label: {}, tag {}", parseBit.label, (AuUInt)parseBit.tag);
return false;
}
@ -678,7 +678,7 @@ namespace Aurora::Parse
break;
}
default:
SysPanic("Invalid consume tag {}", type);
SysPanic("Invalid consume tag {}", (AuUInt)type);
}
}
@ -728,7 +728,7 @@ namespace Aurora::Parse
break;
}
default:
SysPanic("Invalid emit tag {}", parsed.tag);
SysPanic("Invalid emit tag {}", (AuUInt)parsed.tag);
}
}
}

View File

@ -373,7 +373,7 @@ namespace Aurora::Registry
if (!AuIOFS::WriteString(lastPath_.value().filePath, currentStreamDocument_.dump(4)))
{
SysPushErrorIO("Couldn't write registry to {}", lastPath_.value());
SysPushErrorIO("Couldn't write registry to {}", lastPath_.value().filePath);
return false;
}