|
27 | 27 | #include "ecma-iterator-object.h"
|
28 | 28 | #include "ecma-objects.h"
|
29 | 29 | #include "ecma-string-object.h"
|
| 30 | +#include "lit-char-helpers.h" |
30 | 31 | #include "jrt.h"
|
31 | 32 |
|
32 | 33 | #if ENABLED (JERRY_BUILTIN_ARRAY)
|
@@ -182,38 +183,29 @@ ecma_builtin_array_prototype_object_to_locale_string (ecma_object_t *obj_p, /**<
|
182 | 183 | }
|
183 | 184 |
|
184 | 185 | ecma_string_t *first_string_p = ecma_get_string_from_value (first_value);
|
185 |
| - ecma_string_t *return_string_p = first_string_p; |
186 |
| - ecma_ref_ecma_string (return_string_p); |
187 |
| - |
188 |
| - ecma_value_t ret_value = ECMA_VALUE_ERROR; |
| 186 | + ecma_stringbuilder_t builder = ecma_stringbuilder_create_from (first_string_p); |
| 187 | + ecma_deref_ecma_string (first_string_p); |
189 | 188 |
|
190 | 189 | /* 9-10. */
|
191 | 190 | for (uint32_t k = 1; k < length; k++)
|
192 | 191 | {
|
193 | 192 | /* 4. Implementation-defined: set the separator to a single comma character. */
|
194 |
| - return_string_p = ecma_append_magic_string_to_string (return_string_p, |
195 |
| - LIT_MAGIC_STRING_COMMA_CHAR); |
| 193 | + ecma_stringbuilder_append_byte (&builder, LIT_CHAR_COMMA); |
196 | 194 |
|
197 | 195 | ecma_value_t next_string_value = ecma_builtin_helper_get_to_locale_string_at_index (obj_p, k);
|
198 | 196 |
|
199 | 197 | if (ECMA_IS_VALUE_ERROR (next_string_value))
|
200 | 198 | {
|
201 |
| - ecma_deref_ecma_string (return_string_p); |
202 |
| - goto clean_up; |
| 199 | + ecma_stringbuilder_destroy (&builder); |
| 200 | + return next_string_value; |
203 | 201 | }
|
204 | 202 |
|
205 | 203 | ecma_string_t *next_string_p = ecma_get_string_from_value (next_string_value);
|
206 |
| - return_string_p = ecma_concat_ecma_strings (return_string_p, next_string_p); |
207 |
| - |
| 204 | + ecma_stringbuilder_append (&builder, next_string_p); |
208 | 205 | ecma_deref_ecma_string (next_string_p);
|
209 | 206 | }
|
210 | 207 |
|
211 |
| - ret_value = ecma_make_string_value (return_string_p); |
212 |
| - |
213 |
| -clean_up: |
214 |
| - ecma_deref_ecma_string (first_string_p); |
215 |
| - |
216 |
| - return ret_value; |
| 208 | + return ecma_make_string_value (ecma_stringbuilder_finalize (&builder)); |
217 | 209 | } /* ecma_builtin_array_prototype_object_to_locale_string */
|
218 | 210 |
|
219 | 211 | /**
|
@@ -382,40 +374,33 @@ ecma_builtin_array_prototype_join (ecma_value_t separator_arg, /**< separator ar
|
382 | 374 | }
|
383 | 375 |
|
384 | 376 | ecma_string_t *first_string_p = ecma_get_string_from_value (first_value);
|
385 |
| - ecma_string_t *return_string_p = first_string_p; |
386 |
| - ecma_ref_ecma_string (return_string_p); |
| 377 | + ecma_stringbuilder_t builder = ecma_stringbuilder_create_from (first_string_p); |
| 378 | + ecma_deref_ecma_string (first_string_p); |
387 | 379 |
|
388 |
| - ecma_value_t ret_value = ECMA_VALUE_ERROR; |
389 | 380 | /* 9-10. */
|
390 | 381 | for (uint32_t k = 1; k < length; k++)
|
391 | 382 | {
|
392 | 383 | /* 10.a */
|
393 |
| - return_string_p = ecma_concat_ecma_strings (return_string_p, separator_string_p); |
| 384 | + ecma_stringbuilder_append (&builder, separator_string_p); |
394 | 385 |
|
395 | 386 | /* 10.b, 10.c */
|
396 | 387 | ecma_value_t next_string_value = ecma_op_array_get_to_string_at_index (obj_p, k);
|
397 | 388 |
|
398 | 389 | if (ECMA_IS_VALUE_ERROR (next_string_value))
|
399 | 390 | {
|
400 |
| - ecma_deref_ecma_string (return_string_p); |
401 |
| - goto clean_up; |
| 391 | + ecma_deref_ecma_string (separator_string_p); |
| 392 | + ecma_stringbuilder_destroy (&builder); |
| 393 | + return next_string_value; |
402 | 394 | }
|
403 | 395 |
|
404 | 396 | /* 10.d */
|
405 | 397 | ecma_string_t *next_string_p = ecma_get_string_from_value (next_string_value);
|
406 |
| - return_string_p = ecma_concat_ecma_strings (return_string_p, next_string_p); |
407 |
| - |
| 398 | + ecma_stringbuilder_append (&builder, next_string_p); |
408 | 399 | ecma_deref_ecma_string (next_string_p);
|
409 | 400 | }
|
410 | 401 |
|
411 |
| - ret_value = ecma_make_string_value (return_string_p); |
412 |
| - |
413 |
| -clean_up: |
414 |
| - ecma_deref_ecma_string (first_string_p); |
415 |
| - |
416 | 402 | ecma_deref_ecma_string (separator_string_p);
|
417 |
| - |
418 |
| - return ret_value; |
| 403 | + return ecma_make_string_value (ecma_stringbuilder_finalize (&builder)); |
419 | 404 | } /* ecma_builtin_array_prototype_join */
|
420 | 405 |
|
421 | 406 | /**
|
|
0 commit comments