@@ -64,13 +64,15 @@ class VariantImpl {
6464 case VariantType::LinkedString:
6565 return visit.visit (JsonString (asLinkedString (), true ));
6666
67- case VariantType::OwnedString:
68- return visit.visit (JsonString (data_->content .asOwnedString ->data ,
69- data_->content .asOwnedString ->length ));
67+ case VariantType::OwnedString: {
68+ auto s = asOwnedString ();
69+ return visit.visit (JsonString (s->data , s->length ));
70+ }
7071
71- case VariantType::RawString:
72- return visit.visit (RawString (data_->content .asOwnedString ->data ,
73- data_->content .asOwnedString ->length ));
72+ case VariantType::RawString: {
73+ auto s = asOwnedString ();
74+ return visit.visit (RawString (s->data , s->length ));
75+ }
7476
7577 case VariantType::Int32:
7678 return visit.visit (static_cast <JsonInteger>(data_->content .asInt32 ));
@@ -160,7 +162,7 @@ class VariantImpl {
160162 str = asLinkedString ();
161163 break ;
162164 case VariantType::OwnedString:
163- str = data_-> content . asOwnedString ->data ;
165+ str = asOwnedString () ->data ;
164166 break ;
165167 case VariantType::Float:
166168 return static_cast <T>(data_->content .asFloat );
@@ -206,7 +208,7 @@ class VariantImpl {
206208 str = asLinkedString ();
207209 break ;
208210 case VariantType::OwnedString:
209- str = data_-> content . asOwnedString ->data ;
211+ str = asOwnedString () ->data ;
210212 break ;
211213 case VariantType::Float:
212214 return convertNumber<T>(data_->content .asFloat );
@@ -224,9 +226,10 @@ class VariantImpl {
224226
225227 JsonString asRawString () const {
226228 switch (type ()) {
227- case VariantType::RawString:
228- return JsonString (data_->content .asOwnedString ->data ,
229- data_->content .asOwnedString ->length );
229+ case VariantType::RawString: {
230+ auto s = asOwnedString ();
231+ return JsonString (s->data , s->length );
232+ }
230233 default :
231234 return JsonString ();
232235 }
@@ -243,14 +246,20 @@ class VariantImpl {
243246 return JsonString (data_->content .asTinyString );
244247 case VariantType::LinkedString:
245248 return JsonString (asLinkedString (), true );
246- case VariantType::OwnedString:
247- return JsonString (data_->content .asOwnedString ->data ,
248- data_->content .asOwnedString ->length );
249+ case VariantType::OwnedString: {
250+ auto s = asOwnedString ();
251+ return JsonString (s->data , s->length );
252+ }
249253 default :
250254 return JsonString ();
251255 }
252256 }
253257
258+ StringNode* asOwnedString () const {
259+ ARDUINOJSON_ASSERT (type () & VariantTypeBits::OwnedStringBit);
260+ return data_->content .asOwnedString ;
261+ }
262+
254263#if ARDUINOJSON_USE_8_BYTE_POOL
255264 const EightByteValue* getEightByte () const {
256265 return type () & VariantTypeBits::EightByteBit
0 commit comments