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 62