packages feed

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

#ifndef IVORY_ASSERTS_H
#define IVORY_ASSERTS_H

/* Requires and Provides statements */

#ifdef IVORY_TEST

#ifdef __arm__

/* TODO: We could write a better "assert" that suspends all RTOS
 * tasks and tries to write a debug string somewhere, but this is at
 * least somewhat useful while running under GDB. */
#define ivory_assert(arg)         \
  do {                            \
    if (!(arg)) {                 \
      asm volatile("bkpt");       \
    }                             \
  } 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)

#else /* ! __arm__ */

#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 /* __arm__ */

#endif /* IVORY_TEST */

#ifdef IVORY_DEPLOY

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

#endif /* IVORY_DEPLOY */

#endif /* IVORY_ASSERTS_H */