mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 672843 part A - Create the new macro NS_WARN_IF and deprecate NS_ENSURE_* in favor of the explicit warning/return style. Also localize each macro so that it's debug and non-debug versions are local in the file, because that makes it easier for new contributors to understand. r=froydnj sr=jst
This commit is contained in:
parent
88e59b00f1
commit
f9d80661a4
@ -12,7 +12,7 @@
|
||||
|
||||
#ifndef nsError_h__
|
||||
#include "nsError.h"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include "nsXPCOM.h"
|
||||
#include "mozilla/Assertions.h"
|
||||
@ -22,7 +22,35 @@
|
||||
#include "prprf.h"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Warn if the given condition is true. The condition is evaluated in both
|
||||
* release and debug builds, and the result is an expression which can be
|
||||
* used in subsequent expressions, such as:
|
||||
*
|
||||
* if (NS_WARN_IF(NS_FAILED(rv))
|
||||
* return rv;
|
||||
*
|
||||
* This explicit warning and return is preferred to the NS_ENSURE_* macros
|
||||
* which hide the warning and the return control flow.
|
||||
*
|
||||
* @note This is C++-only
|
||||
*/
|
||||
#ifdef __cplusplus
|
||||
#ifdef DEBUG
|
||||
inline bool NS_warn_if_impl(bool condition, const char* expr, const char* file,
|
||||
int32_t line)
|
||||
{
|
||||
if (MOZ_UNLIKELY(condition)) {
|
||||
NS_DebugBreak(NS_DEBUG_WARNING, nullptr, expr, file, line);
|
||||
}
|
||||
return condition;
|
||||
}
|
||||
#define NS_WARN_IF(condition) \
|
||||
NS_warn_if_impl(condition, #condition, __FILE__, __LINE__)
|
||||
#else
|
||||
#define NS_WARN_IF(condition) (bool)(condition)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Abort the execution of the program if the expression evaluates to
|
||||
@ -40,12 +68,16 @@
|
||||
* Note also that the non-debug version of this macro does <b>not</b>
|
||||
* evaluate the message argument.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
#define NS_ABORT_IF_FALSE(_expr, _msg) \
|
||||
do { \
|
||||
if (!(_expr)) { \
|
||||
NS_DebugBreak(NS_DEBUG_ABORT, _msg, #_expr, __FILE__, __LINE__); \
|
||||
} \
|
||||
} while(0)
|
||||
#else
|
||||
#define NS_ABORT_IF_FALSE(_expr, _msg) do { /* nothing */ } while(0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Warn if a given condition is false.
|
||||
@ -55,103 +87,105 @@
|
||||
* Note also that the non-debug version of this macro does <b>not</b>
|
||||
* evaluate the message argument.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
#define NS_WARN_IF_FALSE(_expr,_msg) \
|
||||
do { \
|
||||
if (!(_expr)) { \
|
||||
NS_DebugBreak(NS_DEBUG_WARNING, _msg, #_expr, __FILE__, __LINE__); \
|
||||
} \
|
||||
} while(0)
|
||||
#else
|
||||
#define NS_WARN_IF_FALSE(_expr, _msg) do { /* nothing */ } while(0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Test a precondition for truth. If the expression is not true then
|
||||
* trigger a program failure.
|
||||
*/
|
||||
#define NS_PRECONDITION(expr, str) \
|
||||
do { \
|
||||
if (!(expr)) { \
|
||||
NS_DebugBreak(NS_DEBUG_ASSERTION, str, #expr, __FILE__, __LINE__); \
|
||||
} \
|
||||
} while(0)
|
||||
|
||||
/**
|
||||
* Test an assertion for truth. If the expression is not true then
|
||||
* trigger a program failure.
|
||||
*
|
||||
* Note that the non-debug version of this macro does <b>not</b>
|
||||
* evaluate the message argument.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
#define NS_ASSERTION(expr, str) \
|
||||
do { \
|
||||
if (!(expr)) { \
|
||||
NS_DebugBreak(NS_DEBUG_ASSERTION, str, #expr, __FILE__, __LINE__); \
|
||||
} \
|
||||
} while(0)
|
||||
#else
|
||||
#define NS_ASSERTION(expr, str) do { /* nothing */ } while(0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Test a post-condition for truth. If the expression is not true then
|
||||
* trigger a program failure.
|
||||
* NS_PRECONDITION/POSTCONDITION are synonyms for NS_ASSERTION.
|
||||
*/
|
||||
#define NS_POSTCONDITION(expr, str) \
|
||||
do { \
|
||||
if (!(expr)) { \
|
||||
NS_DebugBreak(NS_DEBUG_ASSERTION, str, #expr, __FILE__, __LINE__); \
|
||||
} \
|
||||
} while(0)
|
||||
#define NS_PRECONDITION(expr, str) NS_ASSERTION(expr, str)
|
||||
#define NS_POSTCONDITION(expr, str) NS_ASSERTION(expr, str)
|
||||
|
||||
/**
|
||||
* This macros triggers a program failure if executed. It indicates that
|
||||
* an attempt was made to execute some unimplemented functionality.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
#define NS_NOTYETIMPLEMENTED(str) \
|
||||
NS_DebugBreak(NS_DEBUG_ASSERTION, str, "NotYetImplemented", __FILE__, __LINE__)
|
||||
#else
|
||||
#define NS_NOTYETIMPLEMENTED(str) do { /* nothing */ } while(0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* This macros triggers a program failure if executed. It indicates that
|
||||
* an attempt was made to execute some unimplemented functionality.
|
||||
* an attempt was made to execute a codepath which should not be reachable.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
#define NS_NOTREACHED(str) \
|
||||
NS_DebugBreak(NS_DEBUG_ASSERTION, str, "Not Reached", __FILE__, __LINE__)
|
||||
#else
|
||||
#define NS_NOTREACHED(str) do { /* nothing */ } while(0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Log an error message.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
#define NS_ERROR(str) \
|
||||
NS_DebugBreak(NS_DEBUG_ASSERTION, str, "Error", __FILE__, __LINE__)
|
||||
#else
|
||||
#define NS_ERROR(str) do { /* nothing */ } while(0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Log a warning message.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
#define NS_WARNING(str) \
|
||||
NS_DebugBreak(NS_DEBUG_WARNING, str, nullptr, __FILE__, __LINE__)
|
||||
#else
|
||||
#define NS_WARNING(str) do { /* nothing */ } while(0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Trigger an abort
|
||||
* Trigger an debug-only abort.
|
||||
*
|
||||
* @see NS_RUNTIMEABORT for release-mode asserts.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
#define NS_ABORT() \
|
||||
NS_DebugBreak(NS_DEBUG_ABORT, nullptr, nullptr, __FILE__, __LINE__)
|
||||
#else
|
||||
#define NS_ABORT() do { /* nothing */ } while(0)
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Cause a break
|
||||
* Trigger a debugger breakpoint, only in debug builds.
|
||||
*/
|
||||
#ifdef DEBUG
|
||||
#define NS_BREAK() \
|
||||
NS_DebugBreak(NS_DEBUG_BREAK, nullptr, nullptr, __FILE__, __LINE__)
|
||||
|
||||
#else /* DEBUG */
|
||||
|
||||
/**
|
||||
* The non-debug version of these macros do not evaluate the
|
||||
* expression or the message arguments to the macro.
|
||||
*/
|
||||
#define NS_ABORT_IF_FALSE(_expr, _msg) do { /* nothing */ } while(0)
|
||||
#define NS_WARN_IF_FALSE(_expr, _msg) do { /* nothing */ } while(0)
|
||||
#define NS_PRECONDITION(expr, str) do { /* nothing */ } while(0)
|
||||
#define NS_ASSERTION(expr, str) do { /* nothing */ } while(0)
|
||||
#define NS_POSTCONDITION(expr, str) do { /* nothing */ } while(0)
|
||||
#define NS_NOTYETIMPLEMENTED(str) do { /* nothing */ } while(0)
|
||||
#define NS_NOTREACHED(str) do { /* nothing */ } while(0)
|
||||
#define NS_ERROR(str) do { /* nothing */ } while(0)
|
||||
#define NS_WARNING(str) do { /* nothing */ } while(0)
|
||||
#define NS_ABORT() do { /* nothing */ } while(0)
|
||||
#else
|
||||
#define NS_BREAK() do { /* nothing */ } while(0)
|
||||
|
||||
#endif /* ! DEBUG */
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
** Macros for static assertions. These are used by the sixgill tool.
|
||||
@ -230,7 +264,7 @@
|
||||
|
||||
/******************************************************************************
|
||||
** Macros for terminating execution when an unrecoverable condition is
|
||||
** reached. These need to be compiled regardless of the DEBUG flag.
|
||||
** reached. These need to be compiled regardless of the DEBUG flag.
|
||||
******************************************************************************/
|
||||
|
||||
/**
|
||||
@ -242,10 +276,11 @@
|
||||
NS_DebugBreak(NS_DEBUG_ABORT, msg, nullptr, __FILE__, __LINE__)
|
||||
|
||||
|
||||
/* Macros for checking the trueness of an expression passed in within an
|
||||
* interface implementation. These need to be compiled regardless of the */
|
||||
/* DEBUG flag
|
||||
******************************************************************************/
|
||||
/* Macros for checking the trueness of an expression passed in within an
|
||||
* interface implementation. These need to be compiled regardless of the
|
||||
* DEBUG flag. New code should use NS_WARN_IF(condition) instead!
|
||||
* @status deprecated
|
||||
*/
|
||||
|
||||
#define NS_ENSURE_TRUE(x, ret) \
|
||||
do { \
|
||||
|
Loading…
Reference in New Issue
Block a user