X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Flassert.h;h=5e152e05bc810e16975396ef6ae21312531e9b53;hb=ee9ff6cb0cd7d8b0ef3c18e5bd166e12580a3bf4;hp=66d73cefbf01cca02b8d399115ee0297202bd7b5;hpb=1d5e483b442885cf67f7ff6d1c505ec7b978e7e1;p=lyx.git diff --git a/src/support/lassert.h b/src/support/lassert.h index 66d73cefbf..5e152e05bc 100644 --- a/src/support/lassert.h +++ b/src/support/lassert.h @@ -1,4 +1,4 @@ -// -*- C++ -*- + /** * \file support/lassert.h * @@ -14,9 +14,56 @@ #define LASSERT_H #ifdef __cplusplus + +#include "support/strfwd.h" + namespace lyx { +/****************************************************************************** + +LyX has five different macros that can be used to make assertions. They behave +the same way in devel mode: They assert. The differences between them are how +they behave in release mode. + +In order of increasing seriousness, they are: + +LATTEST(expr) + This macro should be used when one just wants to test expr. If devel mode, + this will lead to an assertion. In release mode, we will simply continue. So + LATTEST should be used only if you know, in advance, that it will be safe to + continue with the usual program flow, but failure of expr still means that + there is something that needs to be fixed. + +LASSERT(expr, escape) + This macro should be used when a failure of expr is not compatible with + continuing the ordinary program flow, but is something from which we can + recover. This might mean simply returning early from some routine; it might + mean resetting some variables to values known to be sane; it might mean + taking some other corrective action. + +LWARNIF(expr) + This macro should be used when a failure of expr indicates that the current + operation cannot safely be completed. In release mode, it will abort that + operation and print a warning message to the user. + +LBUFERR(expr) + This macro should be used when a failure of expr indicates a problem with a + Buffer or its related objects, e.g., a Cursor. In release mode, it throws a + BufferException, which will typically result in an emergency save of that + particular Buffer. + +LAPPERR(expr) + This macro should be used if a failure of expr is incompatible with LyX + continuing to operate at all. In release mode, this issues an ErrorException, + which typically results in an emergency shutdown. + +******************************************************************************/ + + void doAssert(char const * expr, char const * file, long line); +void doWarnIf(char const * expr, char const * file, long line); +void doBufErr(char const * expr, char const * file, long line); +void doAppErr(char const * expr, char const * file, long line); /// Print demangled callstack to stderr void printCallStack(); @@ -24,8 +71,20 @@ void printCallStack(); } // namespace lyx +#define LATTEST(expr) \ + if (expr) {} else { lyx::doAssert(#expr, __FILE__, __LINE__); } + #define LASSERT(expr, escape) \ if (expr) {} else { lyx::doAssert(#expr, __FILE__, __LINE__); escape; } -#endif +#define LWARNIF(expr) \ + if (expr) {} else { lyx::doWarnIf(#expr, __FILE__, __LINE__); } + +#define LBUFERR(expr) \ + if (expr) {} else { lyx::doBufErr(#expr, __FILE__, __LINE__); } + +#define LAPPERR(expr) \ + if (expr) {} else { lyx::doAppErr(#expr, __FILE__, __LINE__); } + +#endif #endif // LASSERT