Properly wrap kak_assert into a do-while scope

Expanding the `kak_assert` macro to either an `if` statement or nothing
leads to issues when the macro is used in a conditional statement that
doesn't use braces.

Example: ncurses_ui.cc:476, in non debug mode, the macro will expand to
an empty line, resulting in the `ungetch` call not being executed if the
`ioctl` call succeeds (line 448).
This commit is contained in:
Frank LENORMAND 2017-02-19 17:37:32 +03:00
parent fb57734820
commit 98cfbc7c3c

View File

@ -17,12 +17,13 @@ void on_assert_failed(const char* message);
#define TOSTRING(X) STRINGIFY(X) #define TOSTRING(X) STRINGIFY(X)
#ifdef KAK_DEBUG #ifdef KAK_DEBUG
#define kak_assert(...) \ #define kak_assert(...) do { \
if (not (__VA_ARGS__)) \ if (not (__VA_ARGS__)) \
on_assert_failed("assert failed \"" #__VA_ARGS__ \ on_assert_failed("assert failed \"" #__VA_ARGS__ \
"\" at " __FILE__ ":" TOSTRING(__LINE__)) "\" at " __FILE__ ":" TOSTRING(__LINE__)); \
} while (0)
#else #else
#define kak_assert(...) #define kak_assert(...) do {} while (0)
#endif #endif