From 4d13c523ef6e31d0fb53a9ffa5c29b3e6d383dfd Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Wed, 17 Sep 2025 09:46:30 +0200 Subject: [PATCH] Call static clear directly Before: 9920, 8836, 9742, 12744, 10040 After: 9918, 8796, 9742, 12698, 9994 Target: 9800, 8458, 9634, 12290, 9702 --- src/ArduinoJson/Json/JsonDeserializer.hpp | 2 +- src/ArduinoJson/Memory/ResourceManagerImpl.hpp | 2 +- src/ArduinoJson/MsgPack/MsgPackBinary.hpp | 2 +- src/ArduinoJson/MsgPack/MsgPackExtension.hpp | 2 +- src/ArduinoJson/Variant/ConverterImpl.hpp | 2 +- src/ArduinoJson/Variant/VariantImpl.hpp | 7 ++++--- 6 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/ArduinoJson/Json/JsonDeserializer.hpp b/src/ArduinoJson/Json/JsonDeserializer.hpp index 25b81f42..d59cd905 100644 --- a/src/ArduinoJson/Json/JsonDeserializer.hpp +++ b/src/ArduinoJson/Json/JsonDeserializer.hpp @@ -283,7 +283,7 @@ class JsonDeserializer { stringBuilder_.save(keyVariant); } else { - VariantImpl(member, resources_).clear(); + VariantImpl::clear(member, resources_); } // Parse value diff --git a/src/ArduinoJson/Memory/ResourceManagerImpl.hpp b/src/ArduinoJson/Memory/ResourceManagerImpl.hpp index 583e11c3..409af0ab 100644 --- a/src/ArduinoJson/Memory/ResourceManagerImpl.hpp +++ b/src/ArduinoJson/Memory/ResourceManagerImpl.hpp @@ -22,7 +22,7 @@ inline Slot ResourceManager::allocVariant() { } inline void ResourceManager::freeVariant(Slot slot) { - VariantImpl(slot.ptr(), this).clear(); + VariantImpl::clear(slot.ptr(), this); variantPools_.freeSlot(slot); } diff --git a/src/ArduinoJson/MsgPack/MsgPackBinary.hpp b/src/ArduinoJson/MsgPack/MsgPackBinary.hpp index bc2bb120..0b3524bb 100644 --- a/src/ArduinoJson/MsgPack/MsgPackBinary.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackBinary.hpp @@ -29,7 +29,7 @@ struct Converter : private detail::VariantAttorney { if (!data) return; auto resources = getResourceManager(dst); - detail::VariantImpl(data, resources).clear(); + detail::VariantImpl::clear(data, resources); if (src.data()) { size_t headerSize = src.size() >= 0x10000 ? 5 : src.size() >= 0x100 ? 3 diff --git a/src/ArduinoJson/MsgPack/MsgPackExtension.hpp b/src/ArduinoJson/MsgPack/MsgPackExtension.hpp index 78e7833d..5eeebe47 100644 --- a/src/ArduinoJson/MsgPack/MsgPackExtension.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackExtension.hpp @@ -35,7 +35,7 @@ struct Converter : private detail::VariantAttorney { if (!data) return; auto resources = getResourceManager(dst); - detail::VariantImpl(data, resources).clear(); + detail::VariantImpl::clear(data, resources); if (src.data()) { uint8_t format, sizeBytes; if (src.size() >= 0x10000) { diff --git a/src/ArduinoJson/Variant/ConverterImpl.hpp b/src/ArduinoJson/Variant/ConverterImpl.hpp index be074b67..aa9bf868 100644 --- a/src/ArduinoJson/Variant/ConverterImpl.hpp +++ b/src/ArduinoJson/Variant/ConverterImpl.hpp @@ -240,7 +240,7 @@ inline void convertToJson(const ::Printable& src, JsonVariant dst) { auto data = detail::VariantAttorney::getData(dst); if (!resources || !data) return; - detail::VariantImpl(data, resources).clear(); + detail::VariantImpl::clear(data, resources); detail::StringBuilderPrint print(resources); src.printTo(print); if (print.overflowed()) diff --git a/src/ArduinoJson/Variant/VariantImpl.hpp b/src/ArduinoJson/Variant/VariantImpl.hpp index 0e9258e2..6788cdd8 100644 --- a/src/ArduinoJson/Variant/VariantImpl.hpp +++ b/src/ArduinoJson/Variant/VariantImpl.hpp @@ -44,8 +44,8 @@ inline bool VariantImpl::setString(TAdaptedString value) { inline void VariantImpl::clear(VariantData* data_, ResourceManager* resources_) { - if (!data_) - return; + ARDUINOJSON_ASSERT(data_ != nullptr); + ARDUINOJSON_ASSERT(resources_ != nullptr); if (data_->type & VariantTypeBits::OwnedStringBit) resources_->dereferenceString(data_->content.asStringNode->data); @@ -62,7 +62,8 @@ inline void VariantImpl::clear(VariantData* data_, } inline void VariantImpl::clear() { - clear(data_, resources_); + if (data_) + clear(data_, resources_); } #if ARDUINOJSON_USE_8_BYTE_POOL