From 54a72532b64e98de039dcf8c699e5428952b4131 Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Thu, 21 May 2020 09:17:13 -0700 Subject: [PATCH] ircd::json: Eliminate output validation for release builds. --- include/ircd/json/json.h | 2 +- include/ircd/json/strung.h | 2 +- include/ircd/json/util.h | 18 ++++++++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/include/ircd/json/json.h b/include/ircd/json/json.h index 5bf0a8943..64fa99008 100644 --- a/include/ircd/json/json.h +++ b/include/ircd/json/json.h @@ -65,6 +65,6 @@ ircd::json::stringify(const mutable_buffer &&mb_, { mutable_buffer mb(mb_); const auto ret(stringify(mb, std::forward(t)...)); - valid_output(ret, serialized(std::forward(t))...); + debug_valid_output(ret, serialized(std::forward(t)...)); return ret; } diff --git a/include/ircd/json/strung.h b/include/ircd/json/strung.h index 59970e094..015f655ab 100644 --- a/include/ircd/json/strung.h +++ b/include/ircd/json/strung.h @@ -59,7 +59,7 @@ ircd::json::strung::strung(T&&... t) stringify(mutable_buffer{out}, std::forward(t)...) }; - valid_output(sv, ircd::size(out)); + debug_valid_output(sv, ircd::size(out)); return sv; }) } diff --git a/include/ircd/json/util.h b/include/ircd/json/util.h index dbbadc8d2..6e432b505 100644 --- a/include/ircd/json/util.h +++ b/include/ircd/json/util.h @@ -24,6 +24,9 @@ namespace ircd::json constexpr name_hash_t name_hash(const string_view name) noexcept; constexpr name_hash_t operator ""_(const char *const name, const size_t len) noexcept; + void valid_output(const string_view &, const size_t &expected); + void debug_valid_output(const string_view &, const size_t &expected); + size_t serialized(const string_view &); string_view stringify(mutable_buffer &, const string_view &); template size_t print(const mutable_buffer &buf, T&&... t); @@ -32,9 +35,6 @@ namespace ircd::json bool valid(const string_view &, std::nothrow_t) noexcept; void valid(const string_view &); std::string why(const string_view &); - - // (Internal) validates output - void valid_output(const string_view &, const size_t &expected); } /// Alternative to `json::strung` which uses a fixed array rather than an @@ -73,10 +73,20 @@ ircd::json::print(const mutable_buffer &buf, }; buf[sv.size()] = '\0'; - valid_output(sv, size(sv)); // no size expectation check + debug_valid_output(sv, size(sv)); // no size expectation check return sv.size(); } +extern inline void +__attribute__((always_inline, gnu_inline, artificial)) +ircd::json::debug_valid_output(const string_view &in, + const size_t &expected) +{ + #ifdef RB_DEBUG + valid_output(in, expected); + #endif +} + constexpr ircd::json::name_hash_t ircd::json::operator ""_(const char *const text, const size_t len) noexcept