|
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