]> git.lyx.org Git - lyx.git/blobdiff - src/support/lassert.cpp
Unbreak citing from bibliography environment
[lyx.git] / src / support / lassert.cpp
index 281330e52c74ab6bdcd8fedfbc901220b9c3275c..c690dbcee03a213a2a10c771dc5ea1c945f50d7b 100644 (file)
@@ -10,6 +10,7 @@
  */
 
 #include <config.h>
+#include <lassert.h>
 
 #include "support/convert.h"
 #include "support/debug.h"
@@ -35,13 +36,21 @@ namespace lyx {
 using namespace std;
 using namespace support;
 
-// TODO Should we try to print the call stack in the course of these?
+
+void doAssertWithCallstack(bool value)
+{
+       if (!value) {
+               printCallStack();
+               BOOST_ASSERT(false);
+       }
+}
+
 
 void doAssert(char const * expr, char const * file, long line)
 {
        LYXERR0("ASSERTION " << expr << " VIOLATED IN " << file << ":" << line);
        // comment this out if not needed
-       BOOST_ASSERT(false);
+       doAssertWithCallstack(false);
 }
 
 
@@ -50,8 +59,8 @@ docstring formatHelper(docstring const & msg,
 {
        docstring const d = _("Assertion %1$s violated in\nfile: %2$s, line: %3$s");
        LYXERR0("ASSERTION " << expr << " VIOLATED IN " << file << ":" << line);
-       
-       return bformat(d, from_ascii(expr), from_ascii(file), 
+
+       return bformat(d, from_ascii(expr), from_ascii(file),
                convert<docstring>(line)) + '\n' + msg;
 }
 
@@ -60,8 +69,8 @@ void doWarnIf(char const * expr, char const * file, long line)
 {
        docstring const d = _("It should be safe to continue, but you\nmay wish to save your work and restart LyX.");
        // comment this out if not needed
-       BOOST_ASSERT(false);
-       throw ExceptionMessage(WarningException, _("Warning!"), 
+       doAssertWithCallstack(false);
+       throw ExceptionMessage(WarningException, _("Warning!"),
                formatHelper(d, expr, file, line));
 }
 
@@ -70,7 +79,7 @@ void doBufErr(char const * expr, char const * file, long line)
 {
        docstring const d = _("There has been an error with this document.\nLyX will attempt to close it safely.");
        // comment this out if not needed
-       BOOST_ASSERT(false);
+       doAssertWithCallstack(false);
        throw ExceptionMessage(BufferException, _("Buffer Error!"),
                formatHelper(d, expr, file, line));
 }
@@ -80,7 +89,7 @@ void doAppErr(char const * expr, char const * file, long line)
 {
        docstring const d = _("LyX has encountered an application error\nand will now shut down.");
        // comment this out if not needed
-       BOOST_ASSERT(false);
+       doAssertWithCallstack(false);
        throw ExceptionMessage(ErrorException, _("Fatal Exception!"),
                formatHelper(d, expr, file, line));
 }
@@ -92,13 +101,13 @@ docstring printCallStack()
        return docstring();
 #else
        const int depth = 200;
-       
+
        // get void*'s for all entries on the stack
        void* array[depth];
        size_t size = backtrace(array, depth);
-       
+
        char** messages = backtrace_symbols(array, size);
-       
+
        docstring bt;
        for (size_t i = 1; i < size && messages != NULL; i++) {
                const std::string orig(messages[i]);