From 5320f5a396ff0a906c5544920a02d84d10aa8e55 Mon Sep 17 00:00:00 2001 From: Szilagyi Adam Date: Wed, 16 Oct 2019 16:37:19 +0200 Subject: [PATCH] Use stringbuilder in typedArry toLocaleString (#3207) JerryScript-DCO-1.0-Signed-off-by: Adam Szilagyi aszilagy@inf.u-szeged.hu --- .../typedarray/ecma-builtin-typedarray-prototype.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c index da9cd4ee8..15447099a 100644 --- a/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c +++ b/jerry-core/ecma/builtin-objects/typedarray/ecma-builtin-typedarray-prototype.c @@ -35,6 +35,7 @@ #include "jmem.h" #include "jrt-libc-includes.h" #include "jrt.h" +#include "lit-char-helpers.h" #if ENABLED (JERRY_ES2015_BUILTIN_TYPEDARRAY) @@ -2056,24 +2057,26 @@ ecma_builtin_typedarray_prototype_to_locale_string (ecma_value_t this_arg) /**< } ecma_string_t *return_string_p = ecma_get_string_from_value (first_element); + ecma_stringbuilder_t builder = ecma_stringbuilder_create_from (return_string_p); + ecma_deref_ecma_string (return_string_p); for (uint32_t k = info.element_size; k < limit; k += info.element_size) { - return_string_p = ecma_append_magic_string_to_string (return_string_p, LIT_MAGIC_STRING_COMMA_CHAR); + ecma_stringbuilder_append_byte (&builder, LIT_CHAR_COMMA); ecma_value_t next_element = ecma_builtin_typedarray_prototype_to_locale_string_helper (typedarray_p, k); if (ECMA_IS_VALUE_ERROR (next_element)) { - ecma_deref_ecma_string (return_string_p); + ecma_stringbuilder_destroy (&builder); return next_element; } ecma_string_t *next_element_p = ecma_get_string_from_value (next_element); - return_string_p = ecma_concat_ecma_strings (return_string_p, next_element_p); + ecma_stringbuilder_append (&builder, next_element_p); ecma_deref_ecma_string (next_element_p); } - return ecma_make_string_value (return_string_p); + return ecma_make_string_value (ecma_stringbuilder_finalize (&builder)); } /* ecma_builtin_typedarray_prototype_to_locale_string */ /**