@@ -153,7 +153,7 @@ class LIBSCRATCHCPP_EXPORT List : public Entity
153153 }
154154
155155 /* ! Joins the list items with spaces or without any separator if there are only digits and returns the result as StringPtr. */
156- inline StringPtr * toStringPtr () const
156+ inline void toStringPtr (StringPtr *dst ) const
157157 {
158158 veque::veque<StringPtr *> strings;
159159 size_t size = 0 ;
@@ -163,7 +163,9 @@ class LIBSCRATCHCPP_EXPORT List : public Entity
163163
164164 for (i = 0 ; i < m_size; i++) {
165165 const ValueData *item = &m_dataPtr->operator [](i);
166- strings.push_back (value_toStringPtr (item));
166+ StringPtr *str = string_pool_new ();
167+ value_toStringPtr (item, str);
168+ strings.push_back (str);
167169 size += strings.back ()->size ;
168170
169171 if (value_isValidNumber (item) && !value_isBool (item) && strings.back ()->size > 0 ) {
@@ -185,54 +187,54 @@ class LIBSCRATCHCPP_EXPORT List : public Entity
185187 }
186188 }
187189
188- StringPtr *ret = string_pool_new ();
189- ret->size = 0 ;
190+ dst->size = 0 ;
190191
191192 if (digits) {
192- string_alloc (ret , size);
193+ string_alloc (dst , size);
193194
194195 for (i = 0 ; i < strings.size (); i++) {
195- memcpy (ret ->data + ret ->size , strings[i]->data , strings[i]->size * sizeof (char16_t ));
196- ret ->size += strings[i]->size ;
196+ memcpy (dst ->data + dst ->size , strings[i]->data , strings[i]->size * sizeof (char16_t ));
197+ dst ->size += strings[i]->size ;
197198 string_pool_free (strings[i]);
198199 }
199200
200201 for (; i < m_size; i++) {
201- StringPtr *item = value_toStringPtr (&m_dataPtr->operator [](i));
202+ StringPtr *item = string_pool_new ();
203+ value_toStringPtr (&m_dataPtr->operator [](i), item);
202204 size += item->size + 1 ;
203- string_alloc (ret , size);
204- memcpy (ret ->data + ret ->size , item->data , item->size * sizeof (char16_t ));
205- ret ->size += item->size ;
205+ string_alloc (dst , size);
206+ memcpy (dst ->data + dst ->size , item->data , item->size * sizeof (char16_t ));
207+ dst ->size += item->size ;
206208 string_pool_free (item);
207209 }
208210 } else {
209211 size += strings.size () - 1 ;
210- string_alloc (ret , size);
212+ string_alloc (dst , size);
211213
212214 for (i = 0 ; i < strings.size (); i++) {
213- memcpy (ret ->data + ret ->size , strings[i]->data , strings[i]->size * sizeof (char16_t ));
214- ret ->size += strings[i]->size ;
215+ memcpy (dst ->data + dst ->size , strings[i]->data , strings[i]->size * sizeof (char16_t ));
216+ dst ->size += strings[i]->size ;
215217 string_pool_free (strings[i]);
216218
217219 if (i + 1 < m_size)
218- ret ->data [ret ->size ++] = u' ' ;
220+ dst ->data [dst ->size ++] = u' ' ;
219221 }
220222
221223 for (; i < m_size; i++) {
222- StringPtr *item = value_toStringPtr (&m_dataPtr->operator [](i));
224+ StringPtr *item = string_pool_new ();
225+ value_toStringPtr (&m_dataPtr->operator [](i), item);
223226 size += item->size + 1 ;
224- string_alloc (ret , size);
225- memcpy (ret ->data + ret ->size , item->data , item->size * sizeof (char16_t ));
226- ret ->size += item->size ;
227+ string_alloc (dst , size);
228+ memcpy (dst ->data + dst ->size , item->data , item->size * sizeof (char16_t ));
229+ dst ->size += item->size ;
227230 string_pool_free (item);
228231
229232 if (i + 1 < m_size)
230- ret ->data [ret ->size ++] = u' ' ;
233+ dst ->data [dst ->size ++] = u' ' ;
231234 }
232235 }
233236
234- ret->data [ret->size ] = u' \0 ' ;
235- return ret;
237+ dst->data [dst->size ] = u' \0 ' ;
236238 }
237239
238240 std::string toString () const ;
0 commit comments