26#include "ruby/internal/cast.h"
60#if ! defined(RUBY_DEBUG)
61# define RBIMPL_RUBY_DEBUG 0
62#elif !!RUBY_DEBUG-1 < 0
63# define RBIMPL_RUBY_DEBUG 0
65# define RBIMPL_RUBY_DEBUG 1
74# define RBIMPL_NDEBUG 1
76# define RBIMPL_NDEBUG 0
85#if defined(__DOXYGEN__)
93#elif (RBIMPL_NDEBUG == 1) && (RBIMPL_RUBY_DEBUG == 0)
99#elif (RBIMPL_NDEBUG == 0) && (RBIMPL_RUBY_DEBUG == 1)
102# define RUBY_NDEBUG 0
105#elif (RBIMPL_NDEBUG == 0) && (RBIMPL_RUBY_DEBUG == 0)
108# define RUBY_NDEBUG 1
111#elif (RBIMPL_NDEBUG == 1) && (RBIMPL_RUBY_DEBUG == 1)
114# define RUBY_NDEBUG 0
117# if defined(_MSC_VER)
118# pragma message("NDEBUG is ignored because RUBY_DEBUG>0.")
119# elif defined(__GNUC__)
120# pragma GCC warning "NDEBUG is ignored because RUBY_DEBUG>0."
122# error NDEBUG is ignored because RUBY_DEBUG>0.
126#undef RBIMPL_RUBY_DEBUG
129#define RBIMPL_ASSERT_NOTHING RBIMPL_CAST((void)0)
134void rb_assert_failure(const
char *file,
int line, const
char *name, const
char *expr);
137#ifdef RUBY_FUNCTION_NAME_STRING
138# define RBIMPL_ASSERT_FUNC RUBY_FUNCTION_NAME_STRING
140# define RBIMPL_ASSERT_FUNC RBIMPL_CAST((const char *)0)
150#define RUBY_ASSERT_FAIL(mesg) \
151 rb_assert_failure(__FILE__, __LINE__, RBIMPL_ASSERT_FUNC, mesg)
159#define RUBY_ASSERT_MESG(expr, mesg) \
160 (RB_LIKELY(expr) ? RBIMPL_ASSERT_NOTHING : RUBY_ASSERT_FAIL(mesg))
167#define RUBY_ASSERT_ALWAYS(expr) RUBY_ASSERT_MESG((expr), #expr)
175# define RUBY_ASSERT(expr) RUBY_ASSERT_MESG((expr), #expr)
177# define RUBY_ASSERT(expr) RBIMPL_ASSERT_NOTHING
190# define RUBY_ASSERT_NDEBUG(expr) RBIMPL_ASSERT_NOTHING
192# define RUBY_ASSERT_NDEBUG(expr) RUBY_ASSERT_MESG((expr), #expr)
200# define RUBY_ASSERT_MESG_WHEN(cond, expr, mesg) RUBY_ASSERT_MESG((expr), (mesg))
202# define RUBY_ASSERT_MESG_WHEN(cond, expr, mesg) \
203 ((cond) ? RUBY_ASSERT_MESG((expr), (mesg)) : RBIMPL_ASSERT_NOTHING)
213#define RUBY_ASSERT_WHEN(cond, expr) RUBY_ASSERT_MESG_WHEN((cond), (expr), #expr)
221# define RBIMPL_ASSERT_OR_ASSUME(expr) RUBY_ASSERT_ALWAYS(expr)
222#elif RBIMPL_COMPILER_BEFORE(Clang, 7, 0, 0)
224# define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSERT_NOTHING
225#elif defined(RUBY_ASSERT_NOASSUME)
227# define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSERT_NOTHING
228#elif ! defined(RBIMPL_HAVE___ASSUME)
229# define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSERT_NOTHING
231# define RBIMPL_ASSERT_OR_ASSUME(expr) RBIMPL_ASSUME(expr)
Defines ASSUME / RB_LIKELY / UNREACHABLE.
Defines RBIMPL_ATTR_COLD.
#define RBIMPL_ATTR_COLD()
Wraps (or simulates) __attribute__((cold))
Tweaking visibility of C variables/functions.
#define RBIMPL_SYMBOL_EXPORT_END()
Counterpart of RBIMPL_SYMBOL_EXPORT_BEGIN.
#define RBIMPL_SYMBOL_EXPORT_BEGIN()
Shortcut macro equivalent to RUBY_SYMBOL_EXPORT_BEGIN extern "C" {.
RBIMPL_ATTR_NORETURN() void rb_eof_error(void)
Utility function to raise rb_eEOFError.
Defines RBIMPL_ASSUME / RBIMPL_UNREACHABLE.
Defines RBIMPL_ATTR_NORETURN.