1425bb815Sopenharmony_ci/* Copyright JS Foundation and other contributors, http://js.foundation 2425bb815Sopenharmony_ci * 3425bb815Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4425bb815Sopenharmony_ci * you may not use this file except in compliance with the License. 5425bb815Sopenharmony_ci * You may obtain a copy of the License at 6425bb815Sopenharmony_ci * 7425bb815Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8425bb815Sopenharmony_ci * 9425bb815Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10425bb815Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS 11425bb815Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12425bb815Sopenharmony_ci * See the License for the specific language governing permissions and 13425bb815Sopenharmony_ci * limitations under the License. 14425bb815Sopenharmony_ci */ 15425bb815Sopenharmony_ci 16425bb815Sopenharmony_ci#include "lit-strings.h" 17425bb815Sopenharmony_ci#include "ecma-alloc.h" 18425bb815Sopenharmony_ci#include "ecma-builtins.h" 19425bb815Sopenharmony_ci#include "ecma-conversion.h" 20425bb815Sopenharmony_ci#include "ecma-exceptions.h" 21425bb815Sopenharmony_ci#include "ecma-gc.h" 22425bb815Sopenharmony_ci#include "ecma-globals.h" 23425bb815Sopenharmony_ci#include "ecma-helpers.h" 24425bb815Sopenharmony_ci#include "ecma-objects.h" 25425bb815Sopenharmony_ci#include "ecma-string-object.h" 26425bb815Sopenharmony_ci#if ENABLED (JERRY_ES2015) 27425bb815Sopenharmony_ci#include "ecma-symbol-object.h" 28425bb815Sopenharmony_ci#endif /* ENABLED (JERRY_ES2015) */ 29425bb815Sopenharmony_ci#include "ecma-try-catch-macro.h" 30425bb815Sopenharmony_ci#include "jrt.h" 31425bb815Sopenharmony_ci 32425bb815Sopenharmony_ci#if ENABLED (JERRY_BUILTIN_STRING) 33425bb815Sopenharmony_ci 34425bb815Sopenharmony_ci#define ECMA_BUILTINS_INTERNAL 35425bb815Sopenharmony_ci#include "ecma-builtins-internal.h" 36425bb815Sopenharmony_ci 37425bb815Sopenharmony_ci#define BUILTIN_INC_HEADER_NAME "ecma-builtin-string.inc.h" 38425bb815Sopenharmony_ci#define BUILTIN_UNDERSCORED_ID string 39425bb815Sopenharmony_ci#include "ecma-builtin-internal-routines-template.inc.h" 40425bb815Sopenharmony_ci 41425bb815Sopenharmony_ci/** \addtogroup ecma ECMA 42425bb815Sopenharmony_ci * @{ 43425bb815Sopenharmony_ci * 44425bb815Sopenharmony_ci * \addtogroup ecmabuiltins 45425bb815Sopenharmony_ci * @{ 46425bb815Sopenharmony_ci * 47425bb815Sopenharmony_ci * \addtogroup string ECMA String object built-in 48425bb815Sopenharmony_ci * @{ 49425bb815Sopenharmony_ci */ 50425bb815Sopenharmony_ci 51425bb815Sopenharmony_ci/** 52425bb815Sopenharmony_ci * The String object's 'fromCharCode' routine 53425bb815Sopenharmony_ci * 54425bb815Sopenharmony_ci * See also: 55425bb815Sopenharmony_ci * ECMA-262 v5, 15.5.3.2 56425bb815Sopenharmony_ci * 57425bb815Sopenharmony_ci * @return ecma value 58425bb815Sopenharmony_ci * Returned value must be freed with ecma_free_value. 59425bb815Sopenharmony_ci */ 60425bb815Sopenharmony_cistatic ecma_value_t 61425bb815Sopenharmony_ciecma_builtin_string_object_from_char_code (ecma_value_t this_arg, /**< 'this' argument */ 62425bb815Sopenharmony_ci const ecma_value_t args[], /**< arguments list */ 63425bb815Sopenharmony_ci ecma_length_t args_number) /**< number of arguments */ 64425bb815Sopenharmony_ci{ 65425bb815Sopenharmony_ci JERRY_UNUSED (this_arg); 66425bb815Sopenharmony_ci 67425bb815Sopenharmony_ci if (args_number == 0) 68425bb815Sopenharmony_ci { 69425bb815Sopenharmony_ci return ecma_make_magic_string_value (LIT_MAGIC_STRING__EMPTY); 70425bb815Sopenharmony_ci } 71425bb815Sopenharmony_ci 72425bb815Sopenharmony_ci ecma_value_t ret_value = ECMA_VALUE_EMPTY; 73425bb815Sopenharmony_ci ecma_string_t *ret_string_p = NULL; 74425bb815Sopenharmony_ci lit_utf8_size_t utf8_buf_size = args_number * LIT_CESU8_MAX_BYTES_IN_CODE_UNIT; 75425bb815Sopenharmony_ci 76425bb815Sopenharmony_ci JMEM_DEFINE_LOCAL_ARRAY (utf8_buf_p, 77425bb815Sopenharmony_ci utf8_buf_size, 78425bb815Sopenharmony_ci lit_utf8_byte_t); 79425bb815Sopenharmony_ci 80425bb815Sopenharmony_ci lit_utf8_size_t utf8_buf_used = 0; 81425bb815Sopenharmony_ci 82425bb815Sopenharmony_ci for (ecma_length_t arg_index = 0; 83425bb815Sopenharmony_ci arg_index < args_number && ecma_is_value_empty (ret_value); 84425bb815Sopenharmony_ci arg_index++) 85425bb815Sopenharmony_ci { 86425bb815Sopenharmony_ci ECMA_OP_TO_NUMBER_TRY_CATCH (arg_num, args[arg_index], ret_value); 87425bb815Sopenharmony_ci 88425bb815Sopenharmony_ci uint32_t uint32_char_code = ecma_number_to_uint32 (arg_num); 89425bb815Sopenharmony_ci ecma_char_t code_unit = (uint16_t) uint32_char_code; 90425bb815Sopenharmony_ci 91425bb815Sopenharmony_ci JERRY_ASSERT (utf8_buf_used <= utf8_buf_size - LIT_UTF8_MAX_BYTES_IN_CODE_UNIT); 92425bb815Sopenharmony_ci utf8_buf_used += lit_code_unit_to_utf8 (code_unit, utf8_buf_p + utf8_buf_used); 93425bb815Sopenharmony_ci JERRY_ASSERT (utf8_buf_used <= utf8_buf_size); 94425bb815Sopenharmony_ci 95425bb815Sopenharmony_ci ECMA_OP_TO_NUMBER_FINALIZE (arg_num); 96425bb815Sopenharmony_ci } 97425bb815Sopenharmony_ci 98425bb815Sopenharmony_ci if (ecma_is_value_empty (ret_value)) 99425bb815Sopenharmony_ci { 100425bb815Sopenharmony_ci ret_string_p = ecma_new_ecma_string_from_utf8 (utf8_buf_p, utf8_buf_used); 101425bb815Sopenharmony_ci } 102425bb815Sopenharmony_ci 103425bb815Sopenharmony_ci JMEM_FINALIZE_LOCAL_ARRAY (utf8_buf_p); 104425bb815Sopenharmony_ci 105425bb815Sopenharmony_ci if (ecma_is_value_empty (ret_value)) 106425bb815Sopenharmony_ci { 107425bb815Sopenharmony_ci ret_value = ecma_make_string_value (ret_string_p); 108425bb815Sopenharmony_ci } 109425bb815Sopenharmony_ci 110425bb815Sopenharmony_ci return ret_value; 111425bb815Sopenharmony_ci} /* ecma_builtin_string_object_from_char_code */ 112425bb815Sopenharmony_ci 113425bb815Sopenharmony_ci#if ENABLED (JERRY_ES2015) 114425bb815Sopenharmony_ci 115425bb815Sopenharmony_ci/** 116425bb815Sopenharmony_ci * The String object's 'raw' routine 117425bb815Sopenharmony_ci * 118425bb815Sopenharmony_ci * See also: 119425bb815Sopenharmony_ci * ECMA-262 v6, 21.1.2.4 120425bb815Sopenharmony_ci * 121425bb815Sopenharmony_ci * @return ecma value 122425bb815Sopenharmony_ci * Returned value must be freed with ecma_free_value. 123425bb815Sopenharmony_ci */ 124425bb815Sopenharmony_cistatic ecma_value_t 125425bb815Sopenharmony_ciecma_builtin_string_object_raw (ecma_value_t this_arg, /**< 'this' argument */ 126425bb815Sopenharmony_ci const ecma_value_t args[], /**< arguments list */ 127425bb815Sopenharmony_ci ecma_length_t args_number) /**< number of arguments */ 128425bb815Sopenharmony_ci{ 129425bb815Sopenharmony_ci JERRY_UNUSED (this_arg); 130425bb815Sopenharmony_ci 131425bb815Sopenharmony_ci /* 1 - 2. */ 132425bb815Sopenharmony_ci const ecma_value_t *substitutions; 133425bb815Sopenharmony_ci ecma_length_t number_of_substitutions; 134425bb815Sopenharmony_ci 135425bb815Sopenharmony_ci if (args_number > 1) 136425bb815Sopenharmony_ci { 137425bb815Sopenharmony_ci substitutions = args + 1; 138425bb815Sopenharmony_ci number_of_substitutions = args_number - 1; 139425bb815Sopenharmony_ci } 140425bb815Sopenharmony_ci else 141425bb815Sopenharmony_ci { 142425bb815Sopenharmony_ci substitutions = NULL; 143425bb815Sopenharmony_ci number_of_substitutions = 0; 144425bb815Sopenharmony_ci } 145425bb815Sopenharmony_ci 146425bb815Sopenharmony_ci /* 3. */ 147425bb815Sopenharmony_ci ecma_value_t template = args_number > 0 ? args[0] : ECMA_VALUE_UNDEFINED; 148425bb815Sopenharmony_ci 149425bb815Sopenharmony_ci ecma_value_t cooked = ecma_op_to_object (template); 150425bb815Sopenharmony_ci 151425bb815Sopenharmony_ci /* 4. */ 152425bb815Sopenharmony_ci if (ECMA_IS_VALUE_ERROR (cooked)) 153425bb815Sopenharmony_ci { 154425bb815Sopenharmony_ci return cooked; 155425bb815Sopenharmony_ci } 156425bb815Sopenharmony_ci 157425bb815Sopenharmony_ci ecma_object_t *cooked_obj_p = ecma_get_object_from_value (cooked); 158425bb815Sopenharmony_ci 159425bb815Sopenharmony_ci /* 5. */ 160425bb815Sopenharmony_ci ecma_value_t raw = ecma_op_object_get_by_magic_id (cooked_obj_p, LIT_MAGIC_STRING_RAW); 161425bb815Sopenharmony_ci 162425bb815Sopenharmony_ci ecma_deref_object (cooked_obj_p); 163425bb815Sopenharmony_ci 164425bb815Sopenharmony_ci if (ECMA_IS_VALUE_ERROR (raw)) 165425bb815Sopenharmony_ci { 166425bb815Sopenharmony_ci return raw; 167425bb815Sopenharmony_ci } 168425bb815Sopenharmony_ci 169425bb815Sopenharmony_ci ecma_value_t raw_obj = ecma_op_to_object (raw); 170425bb815Sopenharmony_ci 171425bb815Sopenharmony_ci /* 6. */ 172425bb815Sopenharmony_ci if (ECMA_IS_VALUE_ERROR (raw_obj)) 173425bb815Sopenharmony_ci { 174425bb815Sopenharmony_ci ecma_free_value (raw); 175425bb815Sopenharmony_ci return raw_obj; 176425bb815Sopenharmony_ci } 177425bb815Sopenharmony_ci 178425bb815Sopenharmony_ci ecma_object_t *raw_obj_p = ecma_get_object_from_value (raw_obj); 179425bb815Sopenharmony_ci 180425bb815Sopenharmony_ci ecma_value_t ret_value = ECMA_VALUE_ERROR; 181425bb815Sopenharmony_ci 182425bb815Sopenharmony_ci /* 7 - 8. */ 183425bb815Sopenharmony_ci uint32_t literal_segments; 184425bb815Sopenharmony_ci if (ECMA_IS_VALUE_ERROR (ecma_op_object_get_length (raw_obj_p, &literal_segments))) 185425bb815Sopenharmony_ci { 186425bb815Sopenharmony_ci goto cleanup; 187425bb815Sopenharmony_ci } 188425bb815Sopenharmony_ci 189425bb815Sopenharmony_ci /* 9. */ 190425bb815Sopenharmony_ci if (literal_segments == 0) 191425bb815Sopenharmony_ci { 192425bb815Sopenharmony_ci ret_value = ecma_make_magic_string_value (LIT_MAGIC_STRING__EMPTY); 193425bb815Sopenharmony_ci goto cleanup; 194425bb815Sopenharmony_ci } 195425bb815Sopenharmony_ci 196425bb815Sopenharmony_ci /* 10. */ 197425bb815Sopenharmony_ci ecma_stringbuilder_t builder = ecma_stringbuilder_create (); 198425bb815Sopenharmony_ci 199425bb815Sopenharmony_ci /* 11. */ 200425bb815Sopenharmony_ci uint32_t next_index = 0; 201425bb815Sopenharmony_ci 202425bb815Sopenharmony_ci /* 12. */ 203425bb815Sopenharmony_ci while (true) 204425bb815Sopenharmony_ci { 205425bb815Sopenharmony_ci /* 12.a,b */ 206425bb815Sopenharmony_ci ecma_value_t next_seg = ecma_op_object_get_by_uint32_index (raw_obj_p, next_index); 207425bb815Sopenharmony_ci 208425bb815Sopenharmony_ci if (ECMA_IS_VALUE_ERROR (next_seg)) 209425bb815Sopenharmony_ci { 210425bb815Sopenharmony_ci goto builder_cleanup; 211425bb815Sopenharmony_ci } 212425bb815Sopenharmony_ci 213425bb815Sopenharmony_ci ecma_string_t *next_seg_srt_p = ecma_op_to_string (next_seg); 214425bb815Sopenharmony_ci 215425bb815Sopenharmony_ci /* 12.c */ 216425bb815Sopenharmony_ci if (JERRY_UNLIKELY (next_seg_srt_p == NULL)) 217425bb815Sopenharmony_ci { 218425bb815Sopenharmony_ci ecma_free_value (next_seg); 219425bb815Sopenharmony_ci goto builder_cleanup; 220425bb815Sopenharmony_ci } 221425bb815Sopenharmony_ci 222425bb815Sopenharmony_ci /* 12.d */ 223425bb815Sopenharmony_ci ecma_stringbuilder_append (&builder, next_seg_srt_p); 224425bb815Sopenharmony_ci 225425bb815Sopenharmony_ci ecma_deref_ecma_string (next_seg_srt_p); 226425bb815Sopenharmony_ci ecma_free_value (next_seg); 227425bb815Sopenharmony_ci 228425bb815Sopenharmony_ci /* 12.e */ 229425bb815Sopenharmony_ci if (next_index + 1 == literal_segments) 230425bb815Sopenharmony_ci { 231425bb815Sopenharmony_ci ret_value = ecma_make_string_value (ecma_stringbuilder_finalize (&builder)); 232425bb815Sopenharmony_ci goto cleanup; 233425bb815Sopenharmony_ci } 234425bb815Sopenharmony_ci 235425bb815Sopenharmony_ci /* 12.f-g */ 236425bb815Sopenharmony_ci if (next_index >= number_of_substitutions) 237425bb815Sopenharmony_ci { 238425bb815Sopenharmony_ci next_index++; 239425bb815Sopenharmony_ci continue; 240425bb815Sopenharmony_ci } 241425bb815Sopenharmony_ci 242425bb815Sopenharmony_ci /* 12.h */ 243425bb815Sopenharmony_ci ecma_string_t *next_sub_p = ecma_op_to_string (substitutions[next_index]); 244425bb815Sopenharmony_ci 245425bb815Sopenharmony_ci /* 12.i */ 246425bb815Sopenharmony_ci if (JERRY_UNLIKELY (next_sub_p == NULL)) 247425bb815Sopenharmony_ci { 248425bb815Sopenharmony_ci goto builder_cleanup; 249425bb815Sopenharmony_ci } 250425bb815Sopenharmony_ci 251425bb815Sopenharmony_ci /* 12.j */ 252425bb815Sopenharmony_ci ecma_stringbuilder_append (&builder, next_sub_p); 253425bb815Sopenharmony_ci ecma_deref_ecma_string (next_sub_p); 254425bb815Sopenharmony_ci 255425bb815Sopenharmony_ci /* 12.k */ 256425bb815Sopenharmony_ci next_index++; 257425bb815Sopenharmony_ci } 258425bb815Sopenharmony_ci 259425bb815Sopenharmony_cibuilder_cleanup: 260425bb815Sopenharmony_ci ecma_stringbuilder_destroy (&builder); 261425bb815Sopenharmony_ci 262425bb815Sopenharmony_cicleanup: 263425bb815Sopenharmony_ci ecma_deref_object (raw_obj_p); 264425bb815Sopenharmony_ci ecma_free_value (raw); 265425bb815Sopenharmony_ci 266425bb815Sopenharmony_ci return ret_value; 267425bb815Sopenharmony_ci} /* ecma_builtin_string_object_raw */ 268425bb815Sopenharmony_ci 269425bb815Sopenharmony_ci/** 270425bb815Sopenharmony_ci * The String object's 'fromCodePoint' routine 271425bb815Sopenharmony_ci * 272425bb815Sopenharmony_ci * See also: 273425bb815Sopenharmony_ci * ECMA-262 v6, 21.1.2.2 274425bb815Sopenharmony_ci * 275425bb815Sopenharmony_ci * @return ecma value 276425bb815Sopenharmony_ci * Returned value must be freed with ecma_free_value. 277425bb815Sopenharmony_ci */ 278425bb815Sopenharmony_cistatic ecma_value_t 279425bb815Sopenharmony_ciecma_builtin_string_object_from_code_point (ecma_value_t this_arg, /**< 'this' argument */ 280425bb815Sopenharmony_ci const ecma_value_t args[], /**< arguments list */ 281425bb815Sopenharmony_ci ecma_length_t args_number) /**< number of arguments */ 282425bb815Sopenharmony_ci{ 283425bb815Sopenharmony_ci JERRY_UNUSED (this_arg); 284425bb815Sopenharmony_ci 285425bb815Sopenharmony_ci if (args_number == 0) 286425bb815Sopenharmony_ci { 287425bb815Sopenharmony_ci return ecma_make_magic_string_value (LIT_MAGIC_STRING__EMPTY); 288425bb815Sopenharmony_ci } 289425bb815Sopenharmony_ci 290425bb815Sopenharmony_ci ecma_stringbuilder_t builder = ecma_stringbuilder_create (); 291425bb815Sopenharmony_ci 292425bb815Sopenharmony_ci for (ecma_length_t index = 0; index < args_number; index++) 293425bb815Sopenharmony_ci { 294425bb815Sopenharmony_ci ecma_value_t to_number_value = ecma_op_to_number (args[index]); 295425bb815Sopenharmony_ci 296425bb815Sopenharmony_ci if (ECMA_IS_VALUE_ERROR (to_number_value)) 297425bb815Sopenharmony_ci { 298425bb815Sopenharmony_ci ecma_stringbuilder_destroy (&builder); 299425bb815Sopenharmony_ci return to_number_value; 300425bb815Sopenharmony_ci } 301425bb815Sopenharmony_ci 302425bb815Sopenharmony_ci ecma_number_t to_number_num = ecma_get_number_from_value (to_number_value); 303425bb815Sopenharmony_ci ecma_free_value (to_number_value); 304425bb815Sopenharmony_ci 305425bb815Sopenharmony_ci ecma_number_t to_int_num; 306425bb815Sopenharmony_ci ecma_value_t to_int_value = ecma_op_to_integer (to_number_value, &to_int_num); 307425bb815Sopenharmony_ci 308425bb815Sopenharmony_ci if (ECMA_IS_VALUE_ERROR (to_int_value)) 309425bb815Sopenharmony_ci { 310425bb815Sopenharmony_ci ecma_stringbuilder_destroy (&builder); 311425bb815Sopenharmony_ci return to_int_value; 312425bb815Sopenharmony_ci } 313425bb815Sopenharmony_ci 314425bb815Sopenharmony_ci if (to_number_num != to_int_num || to_int_num < 0 || to_int_num > LIT_UNICODE_CODE_POINT_MAX) 315425bb815Sopenharmony_ci { 316425bb815Sopenharmony_ci ecma_stringbuilder_destroy (&builder); 317425bb815Sopenharmony_ci return ecma_raise_range_error (ECMA_ERR_MSG ("Error: Invalid code point")); 318425bb815Sopenharmony_ci } 319425bb815Sopenharmony_ci 320425bb815Sopenharmony_ci lit_code_point_t code_point = (uint32_t) to_int_num; 321425bb815Sopenharmony_ci 322425bb815Sopenharmony_ci ecma_char_t converted_cp[2]; 323425bb815Sopenharmony_ci uint8_t encoded_size = lit_utf16_encode_code_point (code_point, converted_cp); 324425bb815Sopenharmony_ci 325425bb815Sopenharmony_ci for (uint8_t i = 0; i < encoded_size; i++) 326425bb815Sopenharmony_ci { 327425bb815Sopenharmony_ci ecma_stringbuilder_append_char (&builder, converted_cp[i]); 328425bb815Sopenharmony_ci } 329425bb815Sopenharmony_ci } 330425bb815Sopenharmony_ci 331425bb815Sopenharmony_ci ecma_string_t *ret_str_p = ecma_stringbuilder_finalize (&builder); 332425bb815Sopenharmony_ci 333425bb815Sopenharmony_ci return ecma_make_string_value (ret_str_p); 334425bb815Sopenharmony_ci} /* ecma_builtin_string_object_from_code_point */ 335425bb815Sopenharmony_ci 336425bb815Sopenharmony_ci#endif /* ENABLED (JERRY_ES2015) */ 337425bb815Sopenharmony_ci 338425bb815Sopenharmony_ci/** 339425bb815Sopenharmony_ci * Handle calling [[Call]] of built-in String object 340425bb815Sopenharmony_ci * 341425bb815Sopenharmony_ci * See also: 342425bb815Sopenharmony_ci * ECMA-262 v6, 21.1.1.1 343425bb815Sopenharmony_ci * 344425bb815Sopenharmony_ci * @return ecma value 345425bb815Sopenharmony_ci */ 346425bb815Sopenharmony_ciecma_value_t 347425bb815Sopenharmony_ciecma_builtin_string_dispatch_call (const ecma_value_t *arguments_list_p, /**< arguments list */ 348425bb815Sopenharmony_ci ecma_length_t arguments_list_len) /**< number of arguments */ 349425bb815Sopenharmony_ci{ 350425bb815Sopenharmony_ci JERRY_ASSERT (arguments_list_len == 0 || arguments_list_p != NULL); 351425bb815Sopenharmony_ci 352425bb815Sopenharmony_ci ecma_value_t ret_value = ECMA_VALUE_EMPTY; 353425bb815Sopenharmony_ci 354425bb815Sopenharmony_ci /* 1. */ 355425bb815Sopenharmony_ci if (arguments_list_len == 0) 356425bb815Sopenharmony_ci { 357425bb815Sopenharmony_ci ret_value = ecma_make_magic_string_value (LIT_MAGIC_STRING__EMPTY); 358425bb815Sopenharmony_ci } 359425bb815Sopenharmony_ci#if ENABLED (JERRY_ES2015) 360425bb815Sopenharmony_ci /* 2.a */ 361425bb815Sopenharmony_ci else if (ecma_is_value_symbol (arguments_list_p[0])) 362425bb815Sopenharmony_ci { 363425bb815Sopenharmony_ci ret_value = ecma_get_symbol_descriptive_string (arguments_list_p[0]); 364425bb815Sopenharmony_ci } 365425bb815Sopenharmony_ci#endif /* ENABLED (JERRY_ES2015) */ 366425bb815Sopenharmony_ci /* 2.b */ 367425bb815Sopenharmony_ci else 368425bb815Sopenharmony_ci { 369425bb815Sopenharmony_ci ecma_string_t *str_p = ecma_op_to_string (arguments_list_p[0]); 370425bb815Sopenharmony_ci if (JERRY_UNLIKELY (str_p == NULL)) 371425bb815Sopenharmony_ci { 372425bb815Sopenharmony_ci return ECMA_VALUE_ERROR; 373425bb815Sopenharmony_ci } 374425bb815Sopenharmony_ci 375425bb815Sopenharmony_ci ret_value = ecma_make_string_value (str_p); 376425bb815Sopenharmony_ci } 377425bb815Sopenharmony_ci 378425bb815Sopenharmony_ci return ret_value; 379425bb815Sopenharmony_ci} /* ecma_builtin_string_dispatch_call */ 380425bb815Sopenharmony_ci 381425bb815Sopenharmony_ci/** 382425bb815Sopenharmony_ci * Handle calling [[Construct]] of built-in String object 383425bb815Sopenharmony_ci * 384425bb815Sopenharmony_ci * @return ecma value 385425bb815Sopenharmony_ci */ 386425bb815Sopenharmony_ciecma_value_t 387425bb815Sopenharmony_ciecma_builtin_string_dispatch_construct (const ecma_value_t *arguments_list_p, /**< arguments list */ 388425bb815Sopenharmony_ci ecma_length_t arguments_list_len) /**< number of arguments */ 389425bb815Sopenharmony_ci{ 390425bb815Sopenharmony_ci JERRY_ASSERT (arguments_list_len == 0 || arguments_list_p != NULL); 391425bb815Sopenharmony_ci 392425bb815Sopenharmony_ci return ecma_op_create_string_object (arguments_list_p, arguments_list_len); 393425bb815Sopenharmony_ci} /* ecma_builtin_string_dispatch_construct */ 394425bb815Sopenharmony_ci 395425bb815Sopenharmony_ci/** 396425bb815Sopenharmony_ci * @} 397425bb815Sopenharmony_ci * @} 398425bb815Sopenharmony_ci * @} 399425bb815Sopenharmony_ci */ 400425bb815Sopenharmony_ci 401425bb815Sopenharmony_ci#endif /* ENABLED (JERRY_BUILTIN_STRING) */ 402