summaryrefslogtreecommitdiff
path: root/libguile/whippet/api/gc-assert.h
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/whippet/api/gc-assert.h')
-rw-r--r--libguile/whippet/api/gc-assert.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/libguile/whippet/api/gc-assert.h b/libguile/whippet/api/gc-assert.h
new file mode 100644
index 000000000..c3fa6b749
--- /dev/null
+++ b/libguile/whippet/api/gc-assert.h
@@ -0,0 +1,21 @@
+#ifndef GC_ASSERT_H
+#define GC_ASSERT_H
+
+#include "gc-config.h"
+
+#define GC_UNLIKELY(e) __builtin_expect(e, 0)
+#define GC_LIKELY(e) __builtin_expect(e, 1)
+
+#define GC_CRASH() __builtin_trap()
+
+#if GC_DEBUG
+#define GC_ASSERT(x) do { if (GC_UNLIKELY(!(x))) GC_CRASH(); } while (0)
+#define GC_UNREACHABLE() GC_CRASH()
+#else
+#define GC_ASSERT(x) do { } while (0)
+#define GC_UNREACHABLE() __builtin_unreachable()
+#endif
+
+#define GC_ASSERT_EQ(a, b) GC_ASSERT((a) == (b))
+
+#endif // GC_ASSERT_H