12 #include <hilti/rt/backtrace.h> 13 #include <hilti/rt/extension-points.h> 14 #include <hilti/rt/fmt.h> 35 Exception() : std::runtime_error(
"<no error>"){};
56 auto backtrace()
const {
return _backtrace.backtrace(); }
59 Exception(
const std::string& what, std::string_view desc, std::string_view location);
61 std::string _description;
62 std::string _location;
66 inline std::ostream& operator<<(std::ostream& stream,
const Exception& e) {
return stream << e.what(); }
68 #define HILTI_EXCEPTION(name, base) \ 69 class name : public ::hilti::rt::base { \ 71 using ::hilti::rt::base::base; \ 75 #define HILTI_EXCEPTION_NS(name, ns, base) \ 76 class name : public ns::base { \ 78 using ns::base::base; \ 82 #define HILTI_EXCEPTION_IMPL(name) name::name::~name() = default; 180 FormattingError(std::string desc) : RuntimeError(_sanitize(std::move(desc))) {}
183 std::string _sanitize(std::string desc) {
184 if (
auto pos = desc.find(
"tinyformat: "); pos != std::string::npos )
201 using std::runtime_error::runtime_error;
210 namespace exception {
228 void printUncaught(
const Exception& e, std::ostream& out);
231 namespace detail::adl {
232 inline std::string
to_string(
const Exception& e, adl::tag ) {
return fmt(
"<exception: %s>", e.what()); }
auto backtrace() const
Definition: exception.h:56
std::string to_string(T &&x)
Definition: extension-points.h:26
Definition: exception.h:199
auto description() const
Definition: exception.h:47
Definition: backtrace.h:15
auto location() const
Definition: exception.h:50
Definition: exception.h:22
Definition: exception.h:213
Definition: location.h:93
std::string fmt(const char *fmt, const Args &... args)
Definition: fmt.h:13
HILTI_EXCEPTION(InvalidArgument, RuntimeError)