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