Commit d0e60de4 by Hyeon Kim

Add new JSON_INTERNAL_CATCH macro function

parent 7bfc406d
...@@ -42,10 +42,12 @@ ...@@ -42,10 +42,12 @@
#define JSON_THROW(exception) throw exception #define JSON_THROW(exception) throw exception
#define JSON_TRY try #define JSON_TRY try
#define JSON_CATCH(exception) catch(exception) #define JSON_CATCH(exception) catch(exception)
#define JSON_INTERNAL_CATCH(exception) catch(exception)
#else #else
#define JSON_THROW(exception) std::abort() #define JSON_THROW(exception) std::abort()
#define JSON_TRY if(true) #define JSON_TRY if(true)
#define JSON_CATCH(exception) if(false) #define JSON_CATCH(exception) if(false)
#define JSON_INTERNAL_CATCH(exception) if(false)
#endif #endif
// override exception macros // override exception macros
...@@ -60,6 +62,11 @@ ...@@ -60,6 +62,11 @@
#if defined(JSON_CATCH_USER) #if defined(JSON_CATCH_USER)
#undef JSON_CATCH #undef JSON_CATCH
#define JSON_CATCH JSON_CATCH_USER #define JSON_CATCH JSON_CATCH_USER
#define JSON_INTERNAL_CATCH JSON_CATCH_USER
#endif
#if defined(JSON_INTERNAL_CATCH_USER)
#undef JSON_INTERNAL_CATCH
#define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER
#endif #endif
// manual branch prediction // manual branch prediction
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#endif #endif
// clean up // clean up
#undef JSON_INTERNAL_CATCH
#undef JSON_CATCH #undef JSON_CATCH
#undef JSON_THROW #undef JSON_THROW
#undef JSON_TRY #undef JSON_TRY
......
...@@ -3437,7 +3437,7 @@ class basic_json ...@@ -3437,7 +3437,7 @@ class basic_json
{ {
return ptr.get_checked(this); return ptr.get_checked(this);
} }
JSON_CATCH (out_of_range&) JSON_INTERNAL_CATCH (out_of_range&)
{ {
return default_value; return default_value;
} }
...@@ -7359,7 +7359,7 @@ class basic_json ...@@ -7359,7 +7359,7 @@ class basic_json
// the "path" location must exist - use at() // the "path" location must exist - use at()
success = (result.at(ptr) == get_value("test", "value", false)); success = (result.at(ptr) == get_value("test", "value", false));
} }
JSON_CATCH (out_of_range&) JSON_INTERNAL_CATCH (out_of_range&)
{ {
// ignore out of range errors: success remains false // ignore out of range errors: success remains false
} }
......
...@@ -157,10 +157,12 @@ using json = basic_json<>; ...@@ -157,10 +157,12 @@ using json = basic_json<>;
#define JSON_THROW(exception) throw exception #define JSON_THROW(exception) throw exception
#define JSON_TRY try #define JSON_TRY try
#define JSON_CATCH(exception) catch(exception) #define JSON_CATCH(exception) catch(exception)
#define JSON_INTERNAL_CATCH(exception) catch(exception)
#else #else
#define JSON_THROW(exception) std::abort() #define JSON_THROW(exception) std::abort()
#define JSON_TRY if(true) #define JSON_TRY if(true)
#define JSON_CATCH(exception) if(false) #define JSON_CATCH(exception) if(false)
#define JSON_INTERNAL_CATCH(exception) if(false)
#endif #endif
// override exception macros // override exception macros
...@@ -175,6 +177,11 @@ using json = basic_json<>; ...@@ -175,6 +177,11 @@ using json = basic_json<>;
#if defined(JSON_CATCH_USER) #if defined(JSON_CATCH_USER)
#undef JSON_CATCH #undef JSON_CATCH
#define JSON_CATCH JSON_CATCH_USER #define JSON_CATCH JSON_CATCH_USER
#define JSON_INTERNAL_CATCH JSON_CATCH_USER
#endif
#if defined(JSON_INTERNAL_CATCH_USER)
#undef JSON_INTERNAL_CATCH
#define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER
#endif #endif
// manual branch prediction // manual branch prediction
...@@ -14272,7 +14279,7 @@ class basic_json ...@@ -14272,7 +14279,7 @@ class basic_json
{ {
return ptr.get_checked(this); return ptr.get_checked(this);
} }
JSON_CATCH (out_of_range&) JSON_INTERNAL_CATCH (out_of_range&)
{ {
return default_value; return default_value;
} }
...@@ -18194,7 +18201,7 @@ class basic_json ...@@ -18194,7 +18201,7 @@ class basic_json
// the "path" location must exist - use at() // the "path" location must exist - use at()
success = (result.at(ptr) == get_value("test", "value", false)); success = (result.at(ptr) == get_value("test", "value", false));
} }
JSON_CATCH (out_of_range&) JSON_INTERNAL_CATCH (out_of_range&)
{ {
// ignore out of range errors: success remains false // ignore out of range errors: success remains false
} }
...@@ -18565,6 +18572,7 @@ inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std ...@@ -18565,6 +18572,7 @@ inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std
#endif #endif
// clean up // clean up
#undef JSON_INTERNAL_CATCH
#undef JSON_CATCH #undef JSON_CATCH
#undef JSON_THROW #undef JSON_THROW
#undef JSON_TRY #undef JSON_TRY
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment