Fix JSON_USE_EXCEPTION=0 use case

This patch fixes the JSON_USE_EXCEPTION flag. Currently, due to the
throwRuntimeError and throwLogicError methods implemented in json_value,
even if JSON_USE_EXCEPTION is set to 0 jsoncpp will still throw. This
breaks integration into projects with -fno-exceptions set, such as
Chromium.
This commit is contained in:
Jordan Bayles 2019-06-06 13:41:47 -07:00 committed by Christopher Dunn
parent 5b91551f39
commit 83cc92161b
2 changed files with 11 additions and 0 deletions

View File

@ -50,6 +50,7 @@
*/ */
namespace Json { namespace Json {
#if JSON_USE_EXCEPTION
/** Base class for all exceptions we throw. /** Base class for all exceptions we throw.
* *
* We use nothing but these internally. Of course, STL can throw others. * We use nothing but these internally. Of course, STL can throw others.
@ -85,6 +86,7 @@ class JSON_API LogicError : public Exception {
public: public:
LogicError(String const& msg); LogicError(String const& msg);
}; };
#endif
/// used internally /// used internally
JSONCPP_NORETURN void throwRuntimeError(String const& msg); JSONCPP_NORETURN void throwRuntimeError(String const& msg);

View File

@ -226,6 +226,7 @@ static inline void releaseStringValue(char* value, unsigned) { free(value); }
namespace Json { namespace Json {
#if JSON_USE_EXCEPTION
Exception::Exception(String msg) : msg_(std::move(msg)) {} Exception::Exception(String msg) : msg_(std::move(msg)) {}
Exception::~Exception() JSONCPP_NOEXCEPT {} Exception::~Exception() JSONCPP_NOEXCEPT {}
char const* Exception::what() const JSONCPP_NOEXCEPT { return msg_.c_str(); } char const* Exception::what() const JSONCPP_NOEXCEPT { return msg_.c_str(); }
@ -237,6 +238,14 @@ JSONCPP_NORETURN void throwRuntimeError(String const& msg) {
JSONCPP_NORETURN void throwLogicError(String const& msg) { JSONCPP_NORETURN void throwLogicError(String const& msg) {
throw LogicError(msg); throw LogicError(msg);
} }
# else // !JSON_USE_EXCEPTION
JSONCPP_NORETURN void throwRuntimeError(String const& msg) {
abort();
}
JSONCPP_NORETURN void throwLogicError(String const& msg) {
abort();
}
#endif
// ////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////
// ////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////