From 21991e6ca59274e41a472b5256bd3245f6596c90 Mon Sep 17 00:00:00 2001 From: Koichi Sasada Date: Wed, 20 May 2020 11:38:44 +0900 Subject: Use RUBY_DEBUG instead of NDEBUG Assertions in header files slows down an interpreter, so they should be turned off by default (simple `make`). To enable them, define a macro `RUBY_DEBUG=1` (e.g. `make cppflags=-DRUBY_DEBUG` or use `#define` at the very beggining of the file. Note that even if `NDEBUG=1` is defined, `RUBY_DEBUG=1` enables all assertions. [Feature #16837] related: https://github.com/ruby/ruby/pull/3120 `assert()` lines in MRI *.c is not disabled even if `RUBY_DEBUG=0` and it can be disabled with `NDEBUG=1`. So please consider to use `RUBY_ASSERT()` if you want to disable them when `RUBY_DEBUG=0`. --- include/ruby/assert.h | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'include/ruby/assert.h') diff --git a/include/ruby/assert.h b/include/ruby/assert.h index a79abea582..41ecbd8936 100644 --- a/include/ruby/assert.h +++ b/include/ruby/assert.h @@ -31,6 +31,10 @@ # define RUBY_DEBUG 0 #endif +#if RUBY_DEBUG > 0 && defined(NDEBUG) +#warning NDEBUG is ignored because RUBY_DEBUG>0. +#endif + /* * Pro tip: `!!NDEBUG-1` expands to... * @@ -82,11 +86,12 @@ RBIMPL_SYMBOL_EXPORT_END() RUBY_ASSERT_MESG(!(cond) || (expr), mesg)) #endif /* RUBY_DEBUG */ -#define RUBY_ASSERT(expr) RUBY_ASSERT_MESG_WHEN((!RUBY_NDEBUG+0), expr, #expr) +#define RUBY_ASSERT(expr) RUBY_ASSERT_MESG_WHEN(FALSE, expr, #expr) +#define RUBY_ASSERT_NDEBUG(expr) RUBY_ASSERT_MESG_WHEN(RUBY_NDEBUG, expr, #expr) #define RUBY_ASSERT_WHEN(cond, expr) RUBY_ASSERT_MESG_WHEN(cond, expr, #expr) -#define RUBY_ASSERT_ALWAYS(expr) RUBY_ASSERT_MESG_WHEN(TRUE, expr, #expr) +#define RUBY_ASSERT_ALWAYS(expr) RUBY_ASSERT_MESG_WHEN(TRUE, expr, #expr) -#if ! RUBY_NDEBUG +#if RUBY_DEBUG # define RBIMPL_ASSERT_OR_ASSUME(_) RUBY_ASSERT(_) #elif defined(RBIMPL_HAVE___ASSUME) # define RBIMPL_ASSERT_OR_ASSUME(_) RBIMPL_ASSUME(_) -- cgit v1.2.3