123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- // CODYlib -*- mode:c++ -*-
- // Copyright (C) 2019-2020 Nathan Sidwell, nathan@acm.org
- // License: Apache v2.0
- // Cody
- #include "internal.hh"
- // C
- #include <csignal>
- #include <cstdint>
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- namespace Cody {
- #if NMS_CHECKING
- void (AssertFailed) (Location loc) noexcept
- {
- (HCF) ("assertion failed", loc);
- }
- void (Unreachable) (Location loc) noexcept
- {
- (HCF) ("unreachable reached", loc);
- }
- #endif
- void (HCF) (char const *msg
- #if NMS_CHECKING
- , Location const loc
- #endif
- ) noexcept
- { // HCF - you goofed!
- #if !NMS_CHECKING
- constexpr Location loc (nullptr, 0);
- #endif
- fprintf (stderr, "CODYlib: %s", msg ? msg : "internal error");
- if (char const *file = loc.File ())
- {
- char const *src = SRCDIR;
- if (src[0])
- {
- size_t l = strlen (src);
- if (!strncmp (src, file, l) && file[l] == '/')
- file += l + 1;
- }
- fprintf (stderr, " at %s:%u", file, loc.Line ());
- }
- fprintf (stderr, "\n");
- raise (SIGABRT);
- exit (2);
- }
- }
|