/* See COPYRIGHT for copyright information. */

#pragma once

#include <assert.h>
/* For __BEGIN_DECLS.  Most every header gets it already from features.h. */
#include <sys/cdefs.h>

__BEGIN_DECLS

#undef assert

void _panic(const char*, int, const char*, ...) __attribute__((noreturn));
void _assert_failed(const char *file, int line, const char *msg)
     __attribute__((noreturn));

#define panic(...) _panic(__FILE__, __LINE__, __VA_ARGS__)

#define assert(x)	                                                           \
	do {                                                                       \
		if (!(x))                                                              \
			_assert_failed(__FILE__, __LINE__, #x);                            \
	} while (0)

/* This is better than glibc's assert_perror(), but in the interest of not
 * causing confusion, I'll rename ours. */
#define parlib_assert_perror(x)                                                \
	do {                                                                       \
		if (!(x)) {                                                            \
			perror("");                                                        \
			_assert_failed(__FILE__, __LINE__, #x);                            \
		}                                                                      \
	} while (0)

// parlib_static_assert(x) will generate a compile-time error if 'x' is false.
#define parlib_static_assert(x)	switch (x) case 0: case (x):

__END_DECLS
