mirror of
https://github.com/open-goal/jak-project.git
synced 2024-11-27 00:10:31 +00:00
2071c98b55
The logger used in `goalc` tries to print an already-formatted string `message` using `fmt::print(message);` Usually this doesn't cause problems, but if you try to print, for example, an exception that has special characters (notably `{`) it will try to do another round of formatting/replacements, despite not having any args to replace with, which ends up throwing another exception. This is why errors when parsing custom level JSON cause the REPL to exit. I've hopefully identified all the various instances of this across the codebase
42 lines
1.2 KiB
C++
42 lines
1.2 KiB
C++
#include "Assert.h"
|
|
|
|
#ifndef NO_ASSERT
|
|
|
|
#include <cstdio>
|
|
#include <cstdlib>
|
|
#include <string_view>
|
|
|
|
#include "common/log/log.h"
|
|
|
|
void private_assert_failed(const char* expr,
|
|
const char* file,
|
|
int line,
|
|
const char* function,
|
|
const char* msg) {
|
|
if (!msg || msg[0] == '\0') {
|
|
std::string log = fmt::format("Assertion failed: '{}'\n\tSource: {}:{}\n\tFunction: {}\n", expr,
|
|
file, line, function);
|
|
lg::die("{}", log);
|
|
} else {
|
|
std::string log =
|
|
fmt::format("Assertion failed: '{}'\n\tMessage: {}\n\tSource: {}:{}\n\tFunction: {}\n",
|
|
expr, msg, file, line, function);
|
|
lg::die("{}", log);
|
|
}
|
|
abort();
|
|
}
|
|
|
|
void private_assert_failed(const char* expr,
|
|
const char* file,
|
|
int line,
|
|
const char* function,
|
|
const std::string_view& msg) {
|
|
if (msg.empty()) {
|
|
private_assert_failed(expr, file, line, function);
|
|
} else {
|
|
private_assert_failed(expr, file, line, function, msg.data());
|
|
}
|
|
}
|
|
|
|
#endif
|