From 0e136aaf0a147bd780555919b6cb243571d0dc5d Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Wed, 17 Sep 2025 21:10:46 +0200 Subject: [PATCH] Extract `toObject()` Before: 9884, 8796, 9702, 12668, 9964 After: 9874, 8796, 9694, 12634, 9970 Target: 9800, 8458, 9634, 12290, 9702 --- src/ArduinoJson/Json/JsonDeserializer.hpp | 4 ++-- src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp | 2 +- src/ArduinoJson/Variant/VariantData.hpp | 8 +++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/ArduinoJson/Json/JsonDeserializer.hpp b/src/ArduinoJson/Json/JsonDeserializer.hpp index eb27a57b..dfb1f165 100644 --- a/src/ArduinoJson/Json/JsonDeserializer.hpp +++ b/src/ArduinoJson/Json/JsonDeserializer.hpp @@ -78,8 +78,8 @@ class JsonDeserializer { case '{': if (filter.allowObject()) - return parseObject(VariantImpl(variant, resources_).toObject(), - filter, nestingLimit); + return parseObject(VariantImpl::toObject(variant, resources_), filter, + nestingLimit); else return skipObject(nestingLimit); diff --git a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp index c8ce92cf..f3d280d7 100644 --- a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp @@ -388,7 +388,7 @@ class MsgPackDeserializer { ObjectImpl object; if (filter.allowObject()) { ARDUINOJSON_ASSERT(variant != 0); - object = VariantImpl(variant, resources_).toObject(); + object = VariantImpl::toObject(variant, resources_); } for (; n; --n) { diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index d46c2312..09be5999 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -493,9 +493,15 @@ class VariantImpl { } ObjectImpl toObject() { - ARDUINOJSON_ASSERT(type() == VariantType::Null); // must call clear() first if (!data_) return ObjectImpl(); + return toObject(data_, resources_); + } + + static ObjectImpl toObject(VariantData* data_, ResourceManager* resources_) { + ARDUINOJSON_ASSERT(data_ != nullptr); + ARDUINOJSON_ASSERT(data_->type == VariantType::Null); + ARDUINOJSON_ASSERT(resources_ != nullptr); data_->type = VariantType::Object; return ObjectImpl(new (&data_->content.asCollection) CollectionData(), resources_);