I (Julian Foad) wrote:

> There isn't currently an easy build switch (such as NDEBUG) to disable 
> SVN_ERR_ASSERT completely at compile time.  That's just a side issue.  If 
> you want such a switch, just ask; we can easily create one.  Or if you think 
> we 
> need two levels of assertions -- one for quick tests and another for slow 
> tests 
> -- and want to be able to compile-out the slow ones independently of the 
> quick 
> ones, just ask.  But implying we should use 'assert' for slow tests and 
> 'SVN_ERR_ASSERT' for quick tests is the Wrong Way.

We can also introduce run-time control of whether the conditions are evaluated: 
test a global 'assertions enabled?' variable or function before evaluating the 
condition.  For example:

Index: subversion/include/svn_error.h
===================================================================
 #define SVN_ERR_ASSERT(expr)                                            \
   do {                                                                  \
-    if (!(expr))                                                        \
+    if (svn_error__assertions_enabled && !(expr))                       \
       SVN_ERR(svn_error__malfunction(TRUE, __FILE__, __LINE__, #expr)); \
   } while (0)
 
+/* ... */
+extern svn_boolean_t svn_error__assertions_enabled;

- Julian

Reply via email to