diff --git a/contributors.md b/contributors.md index 007ba77088..06dfa6535c 100644 --- a/contributors.md +++ b/contributors.md @@ -249,6 +249,7 @@ Appreciation for contributors who have provided substantial work, but are no lon * Brendan Heinonen (staticinvocation) * (QuestionableDeer) * David Sungaila (sungaila) +* Garrett Leach (GarrettLeach) ## Toolchain * (Balletie) - macOS diff --git a/src/openrct2/core/Guard.cpp b/src/openrct2/core/Guard.cpp index e602dc8d75..f38792f28e 100644 --- a/src/openrct2/core/Guard.cpp +++ b/src/openrct2/core/Guard.cpp @@ -23,6 +23,7 @@ #include #include #include +#include namespace OpenRCT2::Guard { @@ -54,6 +55,19 @@ namespace OpenRCT2::Guard _assertBehaviour = behaviour; } + void Assert(bool expression, const std::source_location& location) + { + if (expression) + return; + + std::stringstream messageStream; + messageStream << "Assertion failed in " << location.file_name() << ":" << location.line(); + + std::string message = messageStream.str(); + + Assert(expression, message.c_str()); + } + void Assert(bool expression, const char* message, ...) { va_list args; diff --git a/src/openrct2/core/Guard.hpp b/src/openrct2/core/Guard.hpp index bcb0b8d254..50604e2cde 100644 --- a/src/openrct2/core/Guard.hpp +++ b/src/openrct2/core/Guard.hpp @@ -11,6 +11,7 @@ #include #include +#include #include #include #include @@ -30,7 +31,8 @@ namespace OpenRCT2::Guard ASSERT_BEHAVIOUR GetAssertBehaviour(); void SetAssertBehaviour(ASSERT_BEHAVIOUR behaviour); - void Assert(bool expression, const char* message = nullptr, ...); + void Assert(bool expression, const std::source_location& location = std::source_location::current()); + void Assert(bool expression, const char* message, ...); void Assert_VA(bool expression, const char* message, va_list args); void Fail(const char* message = nullptr, ...); void Fail_VA(const char* message, va_list args);