Free Electron
assertions.h
1 // Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
2 // Distributed under MIT license, or public domain if desired and
3 // recognized in your jurisdiction.
4 // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
5 
6 #ifndef JSON_ASSERTIONS_H_INCLUDED
7 #define JSON_ASSERTIONS_H_INCLUDED
8 
9 #include <cstdlib>
10 #include <sstream>
11 
12 #if !defined(JSON_IS_AMALGAMATION)
13 #include "config.h"
14 #endif // if !defined(JSON_IS_AMALGAMATION)
15 
16 /** It should not be possible for a maliciously designed file to
17  * cause an abort() or seg-fault, so these macros are used only
18  * for pre-condition violations and internal logic errors.
19  */
20 #if JSON_USE_EXCEPTION
21 
22 // @todo <= add detail about condition in exception
23 #define JSON_ASSERT(condition) \
24  do { \
25  if (!(condition)) { \
26  Json::throwLogicError("assert json failed"); \
27  } \
28  } while (0)
29 
30 #define JSON_FAIL_MESSAGE(message) \
31  do { \
32  OStringStream oss; \
33  oss << message; \
34  Json::throwLogicError(oss.str()); \
35  abort(); \
36  } while (0)
37 
38 #else // JSON_USE_EXCEPTION
39 
40 #define JSON_ASSERT(condition) assert(condition)
41 
42 // The call to assert() will show the failure message in debug builds. In
43 // release builds we abort, for a core-dump or debugger.
44 #define JSON_FAIL_MESSAGE(message) \
45  { \
46  OStringStream oss; \
47  oss << message; \
48  assert(false && oss.str().c_str()); \
49  abort(); \
50  }
51 
52 #endif
53 
54 #define JSON_ASSERT_MESSAGE(condition, message) \
55  do { \
56  if (!(condition)) { \
57  JSON_FAIL_MESSAGE(message); \
58  } \
59  } while (0)
60 
61 #endif // JSON_ASSERTIONS_H_INCLUDED