From f72526c09331d52b08150f95cd9942758b9e2a19 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Wed, 17 Sep 2025 21:07:35 +0200 Subject: [PATCH] Extract `toArray()` Before: 9894, 8796, 9708, 12674, 9970 After: 9884, 8796, 9702, 12668, 9964 Target: 9800, 8458, 9634, 12290, 9702 --- src/ArduinoJson/Json/JsonDeserializer.hpp | 2 +- src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp | 2 +- src/ArduinoJson/Variant/VariantData.hpp | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/ArduinoJson/Json/JsonDeserializer.hpp b/src/ArduinoJson/Json/JsonDeserializer.hpp index 696870b3..eb27a57b 100644 --- a/src/ArduinoJson/Json/JsonDeserializer.hpp +++ b/src/ArduinoJson/Json/JsonDeserializer.hpp @@ -71,7 +71,7 @@ class JsonDeserializer { switch (current()) { case '[': if (filter.allowArray()) - return parseArray(VariantImpl(variant, resources_).toArray(), filter, + return parseArray(VariantImpl::toArray(variant, resources_), filter, nestingLimit); else return skipArray(nestingLimit); diff --git a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp index 4077e243..c8ce92cf 100644 --- a/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp +++ b/src/ArduinoJson/MsgPack/MsgPackDeserializer.hpp @@ -352,7 +352,7 @@ class MsgPackDeserializer { ArrayImpl array; if (allowArray) { ARDUINOJSON_ASSERT(variant != 0); - array = VariantImpl(variant, resources_).toArray(); + array = VariantImpl::toArray(variant, resources_); } TFilter elementFilter = filter[0U]; diff --git a/src/ArduinoJson/Variant/VariantData.hpp b/src/ArduinoJson/Variant/VariantData.hpp index 72741243..d46c2312 100644 --- a/src/ArduinoJson/Variant/VariantData.hpp +++ b/src/ArduinoJson/Variant/VariantData.hpp @@ -478,9 +478,15 @@ class VariantImpl { } ArrayImpl toArray() { - ARDUINOJSON_ASSERT(type() == VariantType::Null); // must call clear() first if (!data_) return ArrayImpl(); + return toArray(data_, resources_); + } + + static ArrayImpl toArray(VariantData* data_, ResourceManager* resources_) { + ARDUINOJSON_ASSERT(data_ != nullptr); + ARDUINOJSON_ASSERT(data_->type == VariantType::Null); + ARDUINOJSON_ASSERT(resources_ != nullptr); data_->type = VariantType::Array; return ArrayImpl(new (&data_->content.asCollection) CollectionData(), resources_);