This is an automated email from the ASF dual-hosted git repository.
wangdan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-pegasus.git
The following commit(s) were added to refs/heads/master by this push:
new a24bb90e9 feat: support showing true expression in message for CHECK*
macro (#1253)
a24bb90e9 is described below
commit a24bb90e9c56a5738b77f90ad156a9ad3bcb765f
Author: Dan Wang <[email protected]>
AuthorDate: Wed Nov 23 20:09:18 2022 +0800
feat: support showing true expression in message for CHECK* macro (#1253)
---
src/utils/fmt_logging.h | 49 ++++++++++++++++++++++++++++++++-----------------
1 file changed, 32 insertions(+), 17 deletions(-)
diff --git a/src/utils/fmt_logging.h b/src/utils/fmt_logging.h
index 7187d4183..864a69453 100644
--- a/src/utils/fmt_logging.h
+++ b/src/utils/fmt_logging.h
@@ -38,15 +38,16 @@
#define LOG_ERROR_F(...) dlog_f(LOG_LEVEL_ERROR, __VA_ARGS__)
#define LOG_FATAL_F(...) dlog_f(LOG_LEVEL_FATAL, __VA_ARGS__)
-#define CHECK(x, ...)
\
+#define CHECK_EXPRESSION(expression, evaluation, ...)
\
do {
\
- if (dsn_unlikely(!(x))) {
\
- dlog_f(LOG_LEVEL_FATAL, "assertion expression: " #x);
\
+ if (dsn_unlikely(!(evaluation))) {
\
+ dlog_f(LOG_LEVEL_FATAL, "assertion expression: " #expression);
\
dlog_f(LOG_LEVEL_FATAL, __VA_ARGS__);
\
dsn_coredump();
\
}
\
} while (false)
+#define CHECK(x, ...) CHECK_EXPRESSION(x, x, __VA_ARGS__)
#define CHECK_NOTNULL(p, ...) CHECK(p != nullptr, __VA_ARGS__)
// Macros for writing log message prefixed by log_prefix().
@@ -62,42 +63,48 @@
do {
\
const auto &_v1 = (var1);
\
const auto &_v2 = (var2);
\
- CHECK(_v1 != _v2, "{} vs {} {}", _v1, _v2, fmt::format(__VA_ARGS__));
\
+ CHECK_EXPRESSION(
\
+ var1 != var2, _v1 != _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
} while (false)
#define CHECK_EQ_MSG(var1, var2, ...)
\
do {
\
const auto &_v1 = (var1);
\
const auto &_v2 = (var2);
\
- CHECK(_v1 == _v2, "{} vs {} {}", _v1, _v2, fmt::format(__VA_ARGS__));
\
+ CHECK_EXPRESSION(
\
+ var1 == var2, _v1 == _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
} while (false)
#define CHECK_GE_MSG(var1, var2, ...)
\
do {
\
const auto &_v1 = (var1);
\
const auto &_v2 = (var2);
\
- CHECK(_v1 >= _v2, "{} vs {} {}", _v1, _v2, fmt::format(__VA_ARGS__));
\
+ CHECK_EXPRESSION(
\
+ var1 >= var2, _v1 >= _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
} while (false)
#define CHECK_LE_MSG(var1, var2, ...)
\
do {
\
const auto &_v1 = (var1);
\
const auto &_v2 = (var2);
\
- CHECK(_v1 <= _v2, "{} vs {} {}", _v1, _v2, fmt::format(__VA_ARGS__));
\
+ CHECK_EXPRESSION(
\
+ var1 <= var2, _v1 <= _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
} while (false)
#define CHECK_GT_MSG(var1, var2, ...)
\
do {
\
const auto &_v1 = (var1);
\
const auto &_v2 = (var2);
\
- CHECK(_v1 > _v2, "{} vs {} {}", _v1, _v2, fmt::format(__VA_ARGS__));
\
+ CHECK_EXPRESSION(
\
+ var1 > var2, _v1 > _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
} while (false)
#define CHECK_LT_MSG(var1, var2, ...)
\
do {
\
const auto &_v1 = (var1);
\
const auto &_v2 = (var2);
\
- CHECK(_v1 < _v2, "{} vs {} {}", _v1, _v2, fmt::format(__VA_ARGS__));
\
+ CHECK_EXPRESSION(
\
+ var1 < var2, _v1 < _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
} while (false)
#define CHECK_NE(var1, var2) CHECK_NE_MSG(var1, var2, "")
@@ -109,50 +116,58 @@
// TODO(yingchun): add CHECK_NULL(ptr), CHECK_OK(err), CHECK(cond)
-#define CHECK_PREFIX_MSG(x, ...) CHECK(x, "[{}] {}", log_prefix(),
fmt::format(__VA_ARGS__))
-#define CHECK_NOTNULL_PREFIX_MSG(p, ...) CHECK_PREFIX_MSG(p != nullptr,
fmt::format(__VA_ARGS__))
+#define CHECK_EXPRESSION_PREFIX_MSG(expression, evaluation, ...)
\
+ CHECK_EXPRESSION(expression, evaluation, "[{}] {}", log_prefix(),
fmt::format(__VA_ARGS__))
+#define CHECK_PREFIX_MSG(x, ...) CHECK_EXPRESSION_PREFIX_MSG(x, x, __VA_ARGS__)
+#define CHECK_NOTNULL_PREFIX_MSG(p, ...) CHECK_PREFIX_MSG(p != nullptr,
__VA_ARGS__)
#define CHECK_NOTNULL_PREFIX(p) CHECK_NOTNULL_PREFIX_MSG(p, "")
#define CHECK_NE_PREFIX_MSG(var1, var2, ...)
\
do {
\
const auto &_v1 = (var1);
\
const auto &_v2 = (var2);
\
- CHECK_PREFIX_MSG(_v1 != _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
+ CHECK_EXPRESSION_PREFIX_MSG(
\
+ var1 != var2, _v1 != _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
} while (false)
#define CHECK_EQ_PREFIX_MSG(var1, var2, ...)
\
do {
\
const auto &_v1 = (var1);
\
const auto &_v2 = (var2);
\
- CHECK_PREFIX_MSG(_v1 == _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
+ CHECK_EXPRESSION_PREFIX_MSG(
\
+ var1 == var2, _v1 == _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
} while (false)
#define CHECK_GE_PREFIX_MSG(var1, var2, ...)
\
do {
\
const auto &_v1 = (var1);
\
const auto &_v2 = (var2);
\
- CHECK_PREFIX_MSG(_v1 >= _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
+ CHECK_EXPRESSION_PREFIX_MSG(
\
+ var1 >= var2, _v1 >= _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
} while (false)
#define CHECK_LE_PREFIX_MSG(var1, var2, ...)
\
do {
\
const auto &_v1 = (var1);
\
const auto &_v2 = (var2);
\
- CHECK_PREFIX_MSG(_v1 <= _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
+ CHECK_EXPRESSION_PREFIX_MSG(
\
+ var1 <= var2, _v1 <= _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
} while (false)
#define CHECK_GT_PREFIX_MSG(var1, var2, ...)
\
do {
\
const auto &_v1 = (var1);
\
const auto &_v2 = (var2);
\
- CHECK_PREFIX_MSG(_v1 > _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
+ CHECK_EXPRESSION_PREFIX_MSG(
\
+ var1 > var2, _v1 > _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
} while (false)
#define CHECK_LT_PREFIX_MSG(var1, var2, ...)
\
do {
\
const auto &_v1 = (var1);
\
const auto &_v2 = (var2);
\
- CHECK_PREFIX_MSG(_v1 < _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
+ CHECK_EXPRESSION_PREFIX_MSG(
\
+ var1 < var2, _v1 < _v2, "{} vs {} {}", _v1, _v2,
fmt::format(__VA_ARGS__)); \
} while (false)
#define CHECK_PREFIX(x) CHECK_PREFIX_MSG(x, "")
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]