diff --git a/include/json/assertions.h b/include/json/assertions.h new file mode 100644 index 0000000..005ff71 --- /dev/null +++ b/include/json/assertions.h @@ -0,0 +1,23 @@ +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_ASSERTIONS_H_INCLUDED +# define CPPTL_JSON_ASSERTIONS_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +# include +#endif // if !defined(JSON_IS_AMALGAMATION) + +#if defined(JSON_USE_EXCEPTION) +#define JSON_ASSERT( condition ) assert( condition ); // @todo <= change this into an exception throw +#define JSON_FAIL_MESSAGE( message ) throw std::runtime_error( message ); +#else // defined(JSON_USE_EXCEPTION) +#define JSON_ASSERT( condition ) assert( condition ); +#define JSON_FAIL_MESSAGE( message ) { std::cerr << message; exit(123); } +#endif + +#define JSON_ASSERT_MESSAGE( condition, message ) if (!( condition )) { JSON_FAIL_MESSAGE( message ) } + +#endif // CPPTL_JSON_ASSERTIONS_H_INCLUDED diff --git a/src/lib_json/json_internalarray.inl b/src/lib_json/json_internalarray.inl index c6927c3..5e8b8ef 100644 --- a/src/lib_json/json_internalarray.inl +++ b/src/lib_json/json_internalarray.inl @@ -53,8 +53,7 @@ public: // overridden from ValueArrayAllocator if ( minNewIndexCount > newIndexCount ) newIndexCount = minNewIndexCount; void *newIndexes = realloc( indexes, sizeof(Value*) * newIndexCount ); - if ( !newIndexes ) - throw std::bad_alloc(); + JSON_ASSERT_MESSAGE(newIndexes, "Couldn't realloc."); indexCount = newIndexCount; indexes = static_cast( newIndexes ); } @@ -117,8 +116,7 @@ public: // overridden from ValueArrayAllocator if ( minNewIndexCount > newIndexCount ) newIndexCount = minNewIndexCount; void *newIndexes = realloc( indexes, sizeof(Value*) * newIndexCount ); - if ( !newIndexes ) - throw std::bad_alloc(); + JSON_ASSERT_MESSAGE(newIndexes, "Couldn't realloc."); indexCount = newIndexCount; indexes = static_cast( newIndexes ); } diff --git a/src/lib_json/json_reader.cpp b/src/lib_json/json_reader.cpp index 76e12f9..603fd76 100644 --- a/src/lib_json/json_reader.cpp +++ b/src/lib_json/json_reader.cpp @@ -4,6 +4,7 @@ // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE #if !defined(JSON_IS_AMALGAMATION) +# include # include # include # include "json_tool.h" @@ -884,8 +885,7 @@ std::istream& operator>>( std::istream &sin, Value &root ) { Json::Reader reader; bool ok = reader.parse(sin, root, true); - //JSON_ASSERT( ok ); - if (!ok) throw std::runtime_error(reader.getFormattedErrorMessages()); + if (!ok) JSON_FAIL_MESSAGE(reader.getFormattedErrorMessages()); return sin; } diff --git a/src/lib_json/json_value.cpp b/src/lib_json/json_value.cpp index dd60a50..f314ba3 100644 --- a/src/lib_json/json_value.cpp +++ b/src/lib_json/json_value.cpp @@ -4,6 +4,7 @@ // See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE #if !defined(JSON_IS_AMALGAMATION) +# include # include # include # ifndef JSON_USE_SIMPLE_INTERNAL_ALLOCATOR @@ -21,9 +22,6 @@ #include // size_t #define JSON_ASSERT_UNREACHABLE assert( false ) -#define JSON_ASSERT( condition ) assert( condition ); // @todo <= change this into an exception throw -#define JSON_FAIL_MESSAGE( message ) throw std::runtime_error( message ); -#define JSON_ASSERT_MESSAGE( condition, message ) if (!( condition )) JSON_FAIL_MESSAGE( message ) namespace Json {