debug: check sanity at end of scope for CHECK_SANITY
This commit is contained in:
parent
fe88708c50
commit
5ba9da1828
32
debug.hpp
32
debug.hpp
@ -96,14 +96,9 @@
|
|||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
#define CHECK_SANITY(A) do { \
|
#define CHECK_SANITY(A) \
|
||||||
DEBUG_ONLY ( \
|
::util::debug::scoped_sanity PASTE(__scoped_sanity_checker,__LINE__) (A); \
|
||||||
const auto &__a = (A); \
|
(void)PASTE(__scoped_sanity_checker,__LINE__);
|
||||||
if (!::util::debug::is_valid (__a)) { \
|
|
||||||
_CHECK_PANIC("failed sanity test for %s, %!\n", #A, __a); \
|
|
||||||
} \
|
|
||||||
); \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
@ -615,7 +610,26 @@ namespace util::debug {
|
|||||||
(void)t;
|
(void)t;
|
||||||
CHECK (is_valid (t));
|
CHECK (is_valid (t));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
template <typename ValueT>
|
||||||
|
class scoped_sanity {
|
||||||
|
public:
|
||||||
|
scoped_sanity (ValueT &_value):
|
||||||
|
m_value (_value)
|
||||||
|
{
|
||||||
|
sanity (m_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
~scoped_sanity ()
|
||||||
|
{
|
||||||
|
sanity (m_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
const ValueT& m_value;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
|
Loading…
Reference in New Issue
Block a user