diff --git a/lemon/assert.h b/lemon/assert.h --- a/lemon/assert.h +++ b/lemon/assert.h @@ -27,8 +27,9 @@ namespace lemon { - inline void assert_fail_log(const char *file, int line, const char *function, - const char *message, const char *assertion) + inline void assert_fail_abort(const char *file, int line, + const char *function, const char* message, + const char *assertion) { std::cerr << file << ":" << line << ": "; if (function) @@ -37,13 +38,6 @@ if (assertion) std::cerr << " (assertion '" << assertion << "' failed)"; std::cerr << std::endl; - } - - inline void assert_fail_abort(const char *file, int line, - const char *function, const char* message, - const char *assertion) - { - assert_fail_log(file, line, function, message, assertion); std::abort(); } @@ -63,17 +57,14 @@ #endif // LEMON_ASSERT_H #undef LEMON_ASSERT -#undef LEMON_FIXME #undef LEMON_DEBUG -#if (defined(LEMON_ASSERT_LOG) ? 1 : 0) + \ - (defined(LEMON_ASSERT_ABORT) ? 1 : 0) + \ +#if (defined(LEMON_ASSERT_ABORT) ? 1 : 0) + \ (defined(LEMON_ASSERT_CUSTOM) ? 1 : 0) > 1 #error "LEMON assertion system is not set properly" #endif -#if ((defined(LEMON_ASSERT_LOG) ? 1 : 0) + \ - (defined(LEMON_ASSERT_ABORT) ? 1 : 0) + \ +#if ((defined(LEMON_ASSERT_ABORT) ? 1 : 0) + \ (defined(LEMON_ASSERT_CUSTOM) ? 1 : 0) == 1 || \ defined(LEMON_ENABLE_ASSERTS)) && \ (defined(LEMON_DISABLE_ASSERTS) || \ @@ -82,10 +73,7 @@ #endif -#if defined LEMON_ASSERT_LOG -# undef LEMON_ASSERT_HANDLER -# define LEMON_ASSERT_HANDLER ::lemon::assert_fail_log -#elif defined LEMON_ASSERT_ABORT +#if defined LEMON_ASSERT_ABORT # undef LEMON_ASSERT_HANDLER # define LEMON_ASSERT_HANDLER ::lemon::assert_fail_abort #elif defined LEMON_ASSERT_CUSTOM @@ -107,8 +95,10 @@ # define LEMON_FUNCTION_NAME (__PRETTY_FUNCTION__) # elif defined _MSC_VER # define LEMON_FUNCTION_NAME (__FUNCSIG__) +# elif __STDC_VERSION__ >= 199901L +# define LEMON_FUNCTION_NAME (__func__) # else -# define LEMON_FUNCTION_NAME (__func__) +# define LEMON_FUNCTION_NAME ("") # endif #endif @@ -118,12 +108,12 @@ /// /// \brief Macro for assertion with customizable message /// -/// Macro for assertion with customizable message. \param exp An -/// expression that must be convertible to \c bool. If it is \c -/// false, then an assertion is raised. The concrete behaviour depends -/// on the settings of the assertion system. \param msg A const -/// char* parameter, which can be used to provide information -/// about the circumstances of the failed assertion. +/// Macro for assertion with customizable message. +/// \param exp An expression that must be convertible to \c bool. If it is \c +/// false, then an assertion is raised. The concrete behaviour depends on the +/// settings of the assertion system. +/// \param msg A const char* parameter, which can be used to provide +/// information about the circumstances of the failed assertion. /// /// The assertions are enabled in the default behaviour. /// You can disable them with the following code: @@ -137,17 +127,12 @@ /// \endcode /// The checking is also disabled when the standard macro \c NDEBUG is defined. /// -/// The LEMON assertion system has a wide range of customization -/// properties. As a default behaviour the failed assertion prints a -/// short log message to the standard error and aborts the execution. +/// As a default behaviour the failed assertion prints a short log message to +/// the standard error and aborts the execution. /// -/// The following modes can be used in the assertion system: -/// -/// - \c LEMON_ASSERT_LOG The failed assertion prints a short log -/// message to the standard error and continues the execution. -/// - \c LEMON_ASSERT_ABORT This mode is similar to the \c -/// LEMON_ASSERT_LOG, but it aborts the program. It is the default -/// behaviour. +/// However, the following modes can be used in the assertion system: +/// - \c LEMON_ASSERT_ABORT The failed assertion prints a short log message to +/// the standard error and aborts the program. It is the default behaviour. /// - \c LEMON_ASSERT_CUSTOM The user can define own assertion handler /// function. /// \code @@ -175,22 +160,6 @@ /// \ingroup exceptions /// -/// \brief Macro for mark not yet implemented features. -/// -/// Macro for mark not yet implemented features and outstanding bugs. -/// It is close to be the shortcut of the following code: -/// \code -/// LEMON_ASSERT(false, msg); -/// \endcode -/// -/// \see LEMON_ASSERT -# define LEMON_FIXME(msg) \ - (LEMON_ASSERT_HANDLER(__FILE__, __LINE__, LEMON_FUNCTION_NAME, \ - ::lemon::_assert_bits::cstringify(msg), \ - static_cast(0))) - -/// \ingroup exceptions -/// /// \brief Macro for internal assertions /// /// Macro for internal assertions, it is used in the library to check @@ -222,7 +191,6 @@ # ifndef LEMON_ASSERT_HANDLER # define LEMON_ASSERT(exp, msg) (static_cast(0)) -# define LEMON_FIXME(msg) (static_cast(0)) # define LEMON_DEBUG(exp, msg) (static_cast(0)) # else # define LEMON_ASSERT(exp, msg) \ @@ -231,11 +199,6 @@ LEMON_FUNCTION_NAME, \ ::lemon::_assert_bits::cstringify(msg), \ #exp), 0))) -# define LEMON_FIXME(msg) \ - (LEMON_ASSERT_HANDLER(__FILE__, __LINE__, LEMON_FUNCTION_NAME, \ - ::lemon::_assert_bits::cstringify(msg), \ - static_cast(0))) - # if LEMON_ENABLE_DEBUG # define LEMON_DEBUG(exp, msg) \ (static_cast (!!(exp) ? 0 : ( \