packages feed

ivory-backend-c-0.1.0.3: runtime/ivory_asserts.h

#ifndef IVORY_ASSERTS_H
#define IVORY_ASSERTS_H

/* Requires and Provides statements */

#ifdef IVORY_TEST

#if defined(IVORY_USER_ASSERT_HOOK)

extern void ivory_user_assert_hook(void);

#define ivory_assert(arg)         \
  do {                            \
    if (!(arg)) {                 \
       ivory_user_assert_hook();  \
    }                             \
  } while (0)

#define REQUIRES(arg)         ivory_assert(arg)
#define ENSURES(arg)          ivory_assert(arg)
#define ASSUMES(arg)          ivory_assert(arg)
#define ASSERTS(arg)          ivory_assert(arg)
#define COMPILER_ASSERTS(arg) ivory_assert(arg)

#elif defined(IVORY_USER_VERBOSE_ASSERT_HOOK)

extern void ivory_user_verbose_assert_hook(const char *asserttype,
		const char *expr, const char *file, int line);

#define ivory_assert(atype, arg)  \
  do {                            \
    if (!(arg)) {                 \
       ivory_user_verbose_assert_hook(atype, #arg, __FILE__, __LINE__); \
    }                             \
  } while (0)

#define REQUIRES(arg)         ivory_assert("REQUIRES",arg)
#define ENSURES(arg)          ivory_assert("ENSURES",arg)
#define ASSUMES(arg)          ivory_assert("ASSUMES",arg)
#define ASSERTS(arg)          ivory_assert("ASSERTS",arg)
#define COMPILER_ASSERTS(arg) ivory_assert("COMPILER_ASSERTS",arg)

#else

#include <assert.h>

#define REQUIRES(arg)         assert(arg)
#define ENSURES(arg)          assert(arg)
#define ASSUMES(arg)          assert(arg)
#define ASSERTS(arg)          assert(arg)
#define COMPILER_ASSERTS(arg) assert(arg)

#endif /* assert hooks */

#else /* IVORY_TEST */

#define REQUIRES(arg)
#define ENSURES(arg)
#define ASSUMES(arg)
#define ASSERTS(arg)
#define COMPILER_ASSERTS(arg)

#endif /* IVORY_TEST */

#endif /* IVORY_ASSERTS_H */