@@ -61,13 +61,15 @@ class VariantImpl {
6161 case VariantType::TinyString:
6262 return visit.visit (JsonString (data_->content .asTinyString ));
6363
64- case VariantType::LongString:
65- return visit.visit (JsonString (data_->content .asStringNode ->data ,
66- data_->content .asStringNode ->length ));
64+ case VariantType::LongString: {
65+ auto s = asStringNode ();
66+ return visit.visit (JsonString (s->data , s->length ));
67+ }
6768
68- case VariantType::RawString:
69- return visit.visit (RawString (data_->content .asStringNode ->data ,
70- data_->content .asStringNode ->length ));
69+ case VariantType::RawString: {
70+ auto s = asStringNode ();
71+ return visit.visit (RawString (s->data , s->length ));
72+ }
7173
7274 case VariantType::Int32:
7375 return visit.visit (static_cast <JsonInteger>(data_->content .asInt32 ));
@@ -154,7 +156,7 @@ class VariantImpl {
154156 str = data_->content .asTinyString ;
155157 break ;
156158 case VariantType::LongString:
157- str = data_-> content . asStringNode ->data ;
159+ str = asStringNode () ->data ;
158160 break ;
159161 case VariantType::Float:
160162 return static_cast <T>(data_->content .asFloat );
@@ -197,7 +199,7 @@ class VariantImpl {
197199 str = data_->content .asTinyString ;
198200 break ;
199201 case VariantType::LongString:
200- str = data_-> content . asStringNode ->data ;
202+ str = asStringNode () ->data ;
201203 break ;
202204 case VariantType::Float:
203205 return convertNumber<T>(data_->content .asFloat );
@@ -215,9 +217,10 @@ class VariantImpl {
215217
216218 JsonString asRawString () const {
217219 switch (type ()) {
218- case VariantType::RawString:
219- return JsonString (data_->content .asStringNode ->data ,
220- data_->content .asStringNode ->length );
220+ case VariantType::RawString: {
221+ auto s = asStringNode ();
222+ return JsonString (s->data , s->length );
223+ }
221224 default :
222225 return JsonString ();
223226 }
@@ -227,14 +230,20 @@ class VariantImpl {
227230 switch (type ()) {
228231 case VariantType::TinyString:
229232 return JsonString (data_->content .asTinyString );
230- case VariantType::LongString:
231- return JsonString (data_->content .asStringNode ->data ,
232- data_->content .asStringNode ->length );
233+ case VariantType::LongString: {
234+ auto s = asStringNode ();
235+ return JsonString (s->data , s->length );
236+ }
233237 default :
234238 return JsonString ();
235239 }
236240 }
237241
242+ StringNode* asStringNode () const {
243+ ARDUINOJSON_ASSERT (type () & VariantTypeBits::OwnedStringBit);
244+ return data_->content .asStringNode ;
245+ }
246+
238247#if ARDUINOJSON_USE_8_BYTE_POOL
239248 const EightByteValue* getEightByte () const {
240249 return type () & VariantTypeBits::EightByteBit
0 commit comments