6 #ifndef JLM_UTIL_COMMON_HPP
7 #define JLM_UTIL_COMMON_HPP
13 #ifdef JLM_ENABLE_ASSERTS
14 #define JLM_ASSERT(x) assert(x)
16 #define JLM_ASSERT(x) \
22 #define JLM_NORETURN __attribute__((noreturn))
28 unreachable(
const char * msg,
const char * file,
unsigned line)
31 std::cerr << msg <<
"\n";
33 std::cerr <<
"UNREACHABLE executed";
36 std::cerr <<
" at " << file <<
":" << line <<
"\n";
43 #define JLM_UNREACHABLE(msg) jlm::unreachable(msg, __FILE__, __LINE__)
48 template<
class To,
class From>
53 return static_cast<To *
>(value);
56 class Error :
public std::runtime_error
61 explicit
Error(const std::
string & msg)
62 : std::runtime_error(msg)
71 TypeError(const std::
string & expected_type, const std::
string & received_type)
72 :
Error("Type error - expected : " + expected_type + ", received : " + received_type)
~Error() noexcept override
~TypeError() noexcept override
static To * assertedCast(From *value)
static JLM_NORETURN void unreachable(const char *msg, const char *file, unsigned line)