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 "ecma-alloc.h" 17425bb815Sopenharmony_ci#include "ecma-builtin-helpers.h" 18425bb815Sopenharmony_ci#include "ecma-builtins.h" 19425bb815Sopenharmony_ci#include "ecma-function-object.h" 20425bb815Sopenharmony_ci#include "ecma-gc.h" 21425bb815Sopenharmony_ci#include "ecma-globals.h" 22425bb815Sopenharmony_ci#include "ecma-helpers.h" 23425bb815Sopenharmony_ci#include "ecma-lex-env.h" 24425bb815Sopenharmony_ci#include "ecma-objects.h" 25425bb815Sopenharmony_ci#include "ecma-objects-arguments.h" 26425bb815Sopenharmony_ci#include "ecma-objects-general.h" 27425bb815Sopenharmony_ci#include "ecma-try-catch-macro.h" 28425bb815Sopenharmony_ci#include "jrt.h" 29425bb815Sopenharmony_ci 30425bb815Sopenharmony_ci/** \addtogroup ecma ECMA 31425bb815Sopenharmony_ci * @{ 32425bb815Sopenharmony_ci * 33425bb815Sopenharmony_ci * \addtogroup ecmafunctionobject ECMA Function object related routines 34425bb815Sopenharmony_ci * @{ 35425bb815Sopenharmony_ci */ 36425bb815Sopenharmony_ci 37425bb815Sopenharmony_ci/** 38425bb815Sopenharmony_ci * Arguments object creation operation. 39425bb815Sopenharmony_ci * 40425bb815Sopenharmony_ci * See also: ECMA-262 v5, 10.6 41425bb815Sopenharmony_ci */ 42425bb815Sopenharmony_civoid 43425bb815Sopenharmony_ciecma_op_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function */ 44425bb815Sopenharmony_ci ecma_object_t *lex_env_p, /**< lexical environment the Arguments 45425bb815Sopenharmony_ci object is created for */ 46425bb815Sopenharmony_ci const ecma_value_t *arguments_list_p, /**< arguments list */ 47425bb815Sopenharmony_ci ecma_length_t arguments_number, /**< length of arguments list */ 48425bb815Sopenharmony_ci const ecma_compiled_code_t *bytecode_data_p) /**< byte code */ 49425bb815Sopenharmony_ci{ 50425bb815Sopenharmony_ci bool is_strict = (bytecode_data_p->status_flags & CBC_CODE_FLAGS_STRICT_MODE) != 0; 51425bb815Sopenharmony_ci 52425bb815Sopenharmony_ci ecma_length_t formal_params_number; 53425bb815Sopenharmony_ci 54425bb815Sopenharmony_ci if (bytecode_data_p->status_flags & CBC_CODE_FLAGS_UINT16_ARGUMENTS) 55425bb815Sopenharmony_ci { 56425bb815Sopenharmony_ci cbc_uint16_arguments_t *args_p = (cbc_uint16_arguments_t *) bytecode_data_p; 57425bb815Sopenharmony_ci 58425bb815Sopenharmony_ci formal_params_number = args_p->argument_end; 59425bb815Sopenharmony_ci } 60425bb815Sopenharmony_ci else 61425bb815Sopenharmony_ci { 62425bb815Sopenharmony_ci cbc_uint8_arguments_t *args_p = (cbc_uint8_arguments_t *) bytecode_data_p; 63425bb815Sopenharmony_ci 64425bb815Sopenharmony_ci formal_params_number = args_p->argument_end; 65425bb815Sopenharmony_ci } 66425bb815Sopenharmony_ci 67425bb815Sopenharmony_ci ecma_object_t *prototype_p = ecma_builtin_get (ECMA_BUILTIN_ID_OBJECT_PROTOTYPE); 68425bb815Sopenharmony_ci 69425bb815Sopenharmony_ci ecma_object_t *obj_p; 70425bb815Sopenharmony_ci 71425bb815Sopenharmony_ci if ((bytecode_data_p->status_flags & CBC_CODE_FLAGS_MAPPED_ARGUMENTS_NEEDED) 72425bb815Sopenharmony_ci && arguments_number > 0 73425bb815Sopenharmony_ci && formal_params_number > 0) 74425bb815Sopenharmony_ci { 75425bb815Sopenharmony_ci size_t formal_params_size = formal_params_number * sizeof (ecma_value_t); 76425bb815Sopenharmony_ci 77425bb815Sopenharmony_ci obj_p = ecma_create_object (prototype_p, 78425bb815Sopenharmony_ci sizeof (ecma_extended_object_t) + formal_params_size, 79425bb815Sopenharmony_ci ECMA_OBJECT_TYPE_PSEUDO_ARRAY); 80425bb815Sopenharmony_ci 81425bb815Sopenharmony_ci ecma_extended_object_t *ext_object_p = (ecma_extended_object_t *) obj_p; 82425bb815Sopenharmony_ci 83425bb815Sopenharmony_ci ext_object_p->u.pseudo_array.type = ECMA_PSEUDO_ARRAY_ARGUMENTS; 84425bb815Sopenharmony_ci 85425bb815Sopenharmony_ci ECMA_SET_INTERNAL_VALUE_POINTER (ext_object_p->u.pseudo_array.u2.lex_env_cp, lex_env_p); 86425bb815Sopenharmony_ci 87425bb815Sopenharmony_ci ext_object_p->u.pseudo_array.u1.length = (uint16_t) formal_params_number; 88425bb815Sopenharmony_ci 89425bb815Sopenharmony_ci ecma_value_t *arg_Literal_p = (ecma_value_t *) (ext_object_p + 1); 90425bb815Sopenharmony_ci 91425bb815Sopenharmony_ci uint8_t *byte_p = (uint8_t *) bytecode_data_p; 92425bb815Sopenharmony_ci byte_p += ((size_t) bytecode_data_p->size) << JMEM_ALIGNMENT_LOG; 93425bb815Sopenharmony_ci byte_p -= formal_params_size; 94425bb815Sopenharmony_ci 95425bb815Sopenharmony_ci memcpy (arg_Literal_p, byte_p, formal_params_size); 96425bb815Sopenharmony_ci 97425bb815Sopenharmony_ci for (ecma_length_t i = 0; i < formal_params_number; i++) 98425bb815Sopenharmony_ci { 99425bb815Sopenharmony_ci if (arg_Literal_p[i] != ECMA_VALUE_EMPTY) 100425bb815Sopenharmony_ci { 101425bb815Sopenharmony_ci ecma_string_t *name_p = ecma_get_string_from_value (arg_Literal_p[i]); 102425bb815Sopenharmony_ci ecma_ref_ecma_string (name_p); 103425bb815Sopenharmony_ci } 104425bb815Sopenharmony_ci } 105425bb815Sopenharmony_ci } 106425bb815Sopenharmony_ci else 107425bb815Sopenharmony_ci { 108425bb815Sopenharmony_ci obj_p = ecma_create_object (prototype_p, sizeof (ecma_extended_object_t), ECMA_OBJECT_TYPE_CLASS); 109425bb815Sopenharmony_ci 110425bb815Sopenharmony_ci ecma_extended_object_t *ext_object_p = (ecma_extended_object_t *) obj_p; 111425bb815Sopenharmony_ci ext_object_p->u.class_prop.class_id = LIT_MAGIC_STRING_ARGUMENTS_UL; 112425bb815Sopenharmony_ci } 113425bb815Sopenharmony_ci 114425bb815Sopenharmony_ci ecma_property_value_t *prop_value_p; 115425bb815Sopenharmony_ci 116425bb815Sopenharmony_ci /* 11.a, 11.b */ 117425bb815Sopenharmony_ci for (ecma_length_t index = 0; 118425bb815Sopenharmony_ci index < arguments_number; 119425bb815Sopenharmony_ci index++) 120425bb815Sopenharmony_ci { 121425bb815Sopenharmony_ci ecma_string_t *index_string_p = ecma_new_ecma_string_from_uint32 (index); 122425bb815Sopenharmony_ci 123425bb815Sopenharmony_ci prop_value_p = ecma_create_named_data_property (obj_p, 124425bb815Sopenharmony_ci index_string_p, 125425bb815Sopenharmony_ci ECMA_PROPERTY_CONFIGURABLE_ENUMERABLE_WRITABLE, 126425bb815Sopenharmony_ci NULL); 127425bb815Sopenharmony_ci 128425bb815Sopenharmony_ci prop_value_p->value = ecma_copy_value_if_not_object (arguments_list_p[index]); 129425bb815Sopenharmony_ci 130425bb815Sopenharmony_ci ecma_deref_ecma_string (index_string_p); 131425bb815Sopenharmony_ci } 132425bb815Sopenharmony_ci 133425bb815Sopenharmony_ci /* 7. */ 134425bb815Sopenharmony_ci prop_value_p = ecma_create_named_data_property (obj_p, 135425bb815Sopenharmony_ci ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH), 136425bb815Sopenharmony_ci ECMA_PROPERTY_CONFIGURABLE_WRITABLE, 137425bb815Sopenharmony_ci NULL); 138425bb815Sopenharmony_ci 139425bb815Sopenharmony_ci prop_value_p->value = ecma_make_uint32_value (arguments_number); 140425bb815Sopenharmony_ci 141425bb815Sopenharmony_ci ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor (); 142425bb815Sopenharmony_ci 143425bb815Sopenharmony_ci#if ENABLED (JERRY_ES2015) 144425bb815Sopenharmony_ci /* ECMAScript v6, 9.4.4.6.7, 9.4.4.7.22 */ 145425bb815Sopenharmony_ci ecma_string_t *symbol_p = ecma_op_get_global_symbol (LIT_GLOBAL_SYMBOL_ITERATOR); 146425bb815Sopenharmony_ci 147425bb815Sopenharmony_ci prop_value_p = ecma_create_named_data_property (obj_p, 148425bb815Sopenharmony_ci symbol_p, 149425bb815Sopenharmony_ci ECMA_PROPERTY_CONFIGURABLE_WRITABLE, 150425bb815Sopenharmony_ci NULL); 151425bb815Sopenharmony_ci ecma_deref_ecma_string (symbol_p); 152425bb815Sopenharmony_ci prop_value_p->value = ecma_op_object_get_by_magic_id (ecma_builtin_get (ECMA_BUILTIN_ID_INTRINSIC_OBJECT), 153425bb815Sopenharmony_ci LIT_INTERNAL_MAGIC_STRING_ARRAY_PROTOTYPE_VALUES); 154425bb815Sopenharmony_ci 155425bb815Sopenharmony_ci JERRY_ASSERT (ecma_is_value_object (prop_value_p->value)); 156425bb815Sopenharmony_ci ecma_deref_object (ecma_get_object_from_value (prop_value_p->value)); 157425bb815Sopenharmony_ci#endif /* ENABLED (JERRY_ES2015) */ 158425bb815Sopenharmony_ci 159425bb815Sopenharmony_ci /* 13. */ 160425bb815Sopenharmony_ci if (!is_strict) 161425bb815Sopenharmony_ci { 162425bb815Sopenharmony_ci prop_value_p = ecma_create_named_data_property (obj_p, 163425bb815Sopenharmony_ci ecma_get_magic_string (LIT_MAGIC_STRING_CALLEE), 164425bb815Sopenharmony_ci ECMA_PROPERTY_CONFIGURABLE_WRITABLE, 165425bb815Sopenharmony_ci NULL); 166425bb815Sopenharmony_ci 167425bb815Sopenharmony_ci prop_value_p->value = ecma_make_object_value (func_obj_p); 168425bb815Sopenharmony_ci } 169425bb815Sopenharmony_ci else 170425bb815Sopenharmony_ci { 171425bb815Sopenharmony_ci ecma_object_t *thrower_p = ecma_builtin_get (ECMA_BUILTIN_ID_TYPE_ERROR_THROWER); 172425bb815Sopenharmony_ci 173425bb815Sopenharmony_ci /* 14. */ 174425bb815Sopenharmony_ci prop_desc = ecma_make_empty_property_descriptor (); 175425bb815Sopenharmony_ci { 176425bb815Sopenharmony_ci prop_desc.flags = (ECMA_PROP_IS_GET_DEFINED 177425bb815Sopenharmony_ci | ECMA_PROP_IS_SET_DEFINED 178425bb815Sopenharmony_ci | ECMA_PROP_IS_ENUMERABLE_DEFINED 179425bb815Sopenharmony_ci | ECMA_PROP_IS_CONFIGURABLE_DEFINED); 180425bb815Sopenharmony_ci } 181425bb815Sopenharmony_ci prop_desc.set_p = thrower_p; 182425bb815Sopenharmony_ci prop_desc.get_p = thrower_p; 183425bb815Sopenharmony_ci 184425bb815Sopenharmony_ci ecma_value_t completion = ecma_op_object_define_own_property (obj_p, 185425bb815Sopenharmony_ci ecma_get_magic_string (LIT_MAGIC_STRING_CALLEE), 186425bb815Sopenharmony_ci &prop_desc); 187425bb815Sopenharmony_ci 188425bb815Sopenharmony_ci JERRY_ASSERT (ecma_is_value_true (completion)); 189425bb815Sopenharmony_ci 190425bb815Sopenharmony_ci completion = ecma_op_object_define_own_property (obj_p, 191425bb815Sopenharmony_ci ecma_get_magic_string (LIT_MAGIC_STRING_CALLER), 192425bb815Sopenharmony_ci &prop_desc); 193425bb815Sopenharmony_ci JERRY_ASSERT (ecma_is_value_true (completion)); 194425bb815Sopenharmony_ci } 195425bb815Sopenharmony_ci 196425bb815Sopenharmony_ci ecma_string_t *arguments_string_p = ecma_get_magic_string (LIT_MAGIC_STRING_ARGUMENTS); 197425bb815Sopenharmony_ci 198425bb815Sopenharmony_ci if (is_strict) 199425bb815Sopenharmony_ci { 200425bb815Sopenharmony_ci ecma_op_create_immutable_binding (lex_env_p, 201425bb815Sopenharmony_ci arguments_string_p, 202425bb815Sopenharmony_ci ecma_make_object_value (obj_p)); 203425bb815Sopenharmony_ci } 204425bb815Sopenharmony_ci else 205425bb815Sopenharmony_ci { 206425bb815Sopenharmony_ci ecma_value_t completion = ecma_op_create_mutable_binding (lex_env_p, 207425bb815Sopenharmony_ci arguments_string_p, 208425bb815Sopenharmony_ci false); 209425bb815Sopenharmony_ci JERRY_ASSERT (ecma_is_value_empty (completion)); 210425bb815Sopenharmony_ci 211425bb815Sopenharmony_ci completion = ecma_op_set_mutable_binding (lex_env_p, 212425bb815Sopenharmony_ci arguments_string_p, 213425bb815Sopenharmony_ci ecma_make_object_value (obj_p), 214425bb815Sopenharmony_ci false); 215425bb815Sopenharmony_ci 216425bb815Sopenharmony_ci JERRY_ASSERT (ecma_is_value_empty (completion)); 217425bb815Sopenharmony_ci } 218425bb815Sopenharmony_ci 219425bb815Sopenharmony_ci ecma_deref_object (obj_p); 220425bb815Sopenharmony_ci} /* ecma_op_create_arguments_object */ 221425bb815Sopenharmony_ci 222425bb815Sopenharmony_ci/** 223425bb815Sopenharmony_ci * [[DefineOwnProperty]] ecma Arguments object's operation 224425bb815Sopenharmony_ci * 225425bb815Sopenharmony_ci * See also: 226425bb815Sopenharmony_ci * ECMA-262 v5, 8.6.2; ECMA-262 v5, Table 8 227425bb815Sopenharmony_ci * ECMA-262 v5, 10.6 228425bb815Sopenharmony_ci * 229425bb815Sopenharmony_ci * @return ecma value 230425bb815Sopenharmony_ci * Returned value must be freed with ecma_free_value 231425bb815Sopenharmony_ci */ 232425bb815Sopenharmony_ciecma_value_t 233425bb815Sopenharmony_ciecma_op_arguments_object_define_own_property (ecma_object_t *object_p, /**< the object */ 234425bb815Sopenharmony_ci ecma_string_t *property_name_p, /**< property name */ 235425bb815Sopenharmony_ci const ecma_property_descriptor_t *property_desc_p) /**< property 236425bb815Sopenharmony_ci * descriptor */ 237425bb815Sopenharmony_ci{ 238425bb815Sopenharmony_ci /* 3. */ 239425bb815Sopenharmony_ci ecma_value_t ret_value = ecma_op_general_object_define_own_property (object_p, 240425bb815Sopenharmony_ci property_name_p, 241425bb815Sopenharmony_ci property_desc_p); 242425bb815Sopenharmony_ci 243425bb815Sopenharmony_ci if (ECMA_IS_VALUE_ERROR (ret_value)) 244425bb815Sopenharmony_ci { 245425bb815Sopenharmony_ci return ret_value; 246425bb815Sopenharmony_ci } 247425bb815Sopenharmony_ci 248425bb815Sopenharmony_ci uint32_t index = ecma_string_get_array_index (property_name_p); 249425bb815Sopenharmony_ci 250425bb815Sopenharmony_ci if (index == ECMA_STRING_NOT_ARRAY_INDEX) 251425bb815Sopenharmony_ci { 252425bb815Sopenharmony_ci return ret_value; 253425bb815Sopenharmony_ci } 254425bb815Sopenharmony_ci 255425bb815Sopenharmony_ci ecma_extended_object_t *ext_object_p = (ecma_extended_object_t *) object_p; 256425bb815Sopenharmony_ci 257425bb815Sopenharmony_ci if (index >= ext_object_p->u.pseudo_array.u1.length) 258425bb815Sopenharmony_ci { 259425bb815Sopenharmony_ci return ret_value; 260425bb815Sopenharmony_ci } 261425bb815Sopenharmony_ci 262425bb815Sopenharmony_ci ecma_value_t *arg_Literal_p = (ecma_value_t *) (ext_object_p + 1); 263425bb815Sopenharmony_ci 264425bb815Sopenharmony_ci if (arg_Literal_p[index] == ECMA_VALUE_EMPTY) 265425bb815Sopenharmony_ci { 266425bb815Sopenharmony_ci return ret_value; 267425bb815Sopenharmony_ci } 268425bb815Sopenharmony_ci 269425bb815Sopenharmony_ci ecma_string_t *name_p = ecma_get_string_from_value (arg_Literal_p[index]); 270425bb815Sopenharmony_ci 271425bb815Sopenharmony_ci if (property_desc_p->flags & (ECMA_PROP_IS_GET_DEFINED | ECMA_PROP_IS_SET_DEFINED)) 272425bb815Sopenharmony_ci { 273425bb815Sopenharmony_ci ecma_deref_ecma_string (name_p); 274425bb815Sopenharmony_ci arg_Literal_p[index] = ECMA_VALUE_EMPTY; 275425bb815Sopenharmony_ci } 276425bb815Sopenharmony_ci else 277425bb815Sopenharmony_ci { 278425bb815Sopenharmony_ci if (property_desc_p->flags & ECMA_PROP_IS_VALUE_DEFINED) 279425bb815Sopenharmony_ci { 280425bb815Sopenharmony_ci /* emulating execution of function described by MakeArgSetter */ 281425bb815Sopenharmony_ci ecma_object_t *lex_env_p = ECMA_GET_INTERNAL_VALUE_POINTER (ecma_object_t, 282425bb815Sopenharmony_ci ext_object_p->u.pseudo_array.u2.lex_env_cp); 283425bb815Sopenharmony_ci 284425bb815Sopenharmony_ci ecma_value_t completion = ecma_op_set_mutable_binding (lex_env_p, 285425bb815Sopenharmony_ci name_p, 286425bb815Sopenharmony_ci property_desc_p->value, 287425bb815Sopenharmony_ci true); 288425bb815Sopenharmony_ci 289425bb815Sopenharmony_ci JERRY_ASSERT (ecma_is_value_empty (completion)); 290425bb815Sopenharmony_ci } 291425bb815Sopenharmony_ci 292425bb815Sopenharmony_ci if ((property_desc_p->flags & ECMA_PROP_IS_WRITABLE_DEFINED) 293425bb815Sopenharmony_ci && !(property_desc_p->flags & ECMA_PROP_IS_WRITABLE)) 294425bb815Sopenharmony_ci { 295425bb815Sopenharmony_ci ecma_deref_ecma_string (name_p); 296425bb815Sopenharmony_ci arg_Literal_p[index] = ECMA_VALUE_EMPTY; 297425bb815Sopenharmony_ci } 298425bb815Sopenharmony_ci } 299425bb815Sopenharmony_ci 300425bb815Sopenharmony_ci return ret_value; 301425bb815Sopenharmony_ci} /* ecma_op_arguments_object_define_own_property */ 302425bb815Sopenharmony_ci 303425bb815Sopenharmony_ci/** 304425bb815Sopenharmony_ci * [[Delete]] ecma Arguments object's operation 305425bb815Sopenharmony_ci * 306425bb815Sopenharmony_ci * See also: 307425bb815Sopenharmony_ci * ECMA-262 v5, 8.6.2; ECMA-262 v5, Table 8 308425bb815Sopenharmony_ci * ECMA-262 v5, 10.6 309425bb815Sopenharmony_ci * 310425bb815Sopenharmony_ci * @return ecma value 311425bb815Sopenharmony_ci * Returned value must be freed with ecma_free_value 312425bb815Sopenharmony_ci */ 313425bb815Sopenharmony_ciecma_value_t 314425bb815Sopenharmony_ciecma_op_arguments_object_delete (ecma_object_t *object_p, /**< the object */ 315425bb815Sopenharmony_ci ecma_string_t *property_name_p, /**< property name */ 316425bb815Sopenharmony_ci bool is_throw) /**< flag that controls failure handling */ 317425bb815Sopenharmony_ci{ 318425bb815Sopenharmony_ci /* 3. */ 319425bb815Sopenharmony_ci ecma_value_t ret_value = ecma_op_general_object_delete (object_p, property_name_p, is_throw); 320425bb815Sopenharmony_ci 321425bb815Sopenharmony_ci if (ECMA_IS_VALUE_ERROR (ret_value)) 322425bb815Sopenharmony_ci { 323425bb815Sopenharmony_ci return ret_value; 324425bb815Sopenharmony_ci } 325425bb815Sopenharmony_ci 326425bb815Sopenharmony_ci JERRY_ASSERT (ecma_is_value_boolean (ret_value)); 327425bb815Sopenharmony_ci 328425bb815Sopenharmony_ci if (ecma_is_value_true (ret_value)) 329425bb815Sopenharmony_ci { 330425bb815Sopenharmony_ci uint32_t index = ecma_string_get_array_index (property_name_p); 331425bb815Sopenharmony_ci 332425bb815Sopenharmony_ci if (index != ECMA_STRING_NOT_ARRAY_INDEX) 333425bb815Sopenharmony_ci { 334425bb815Sopenharmony_ci ecma_extended_object_t *ext_object_p = (ecma_extended_object_t *) object_p; 335425bb815Sopenharmony_ci 336425bb815Sopenharmony_ci if (index < ext_object_p->u.pseudo_array.u1.length) 337425bb815Sopenharmony_ci { 338425bb815Sopenharmony_ci ecma_value_t *arg_Literal_p = (ecma_value_t *) (ext_object_p + 1); 339425bb815Sopenharmony_ci 340425bb815Sopenharmony_ci if (arg_Literal_p[index] != ECMA_VALUE_EMPTY) 341425bb815Sopenharmony_ci { 342425bb815Sopenharmony_ci ecma_string_t *name_p = ecma_get_string_from_value (arg_Literal_p[index]); 343425bb815Sopenharmony_ci ecma_deref_ecma_string (name_p); 344425bb815Sopenharmony_ci arg_Literal_p[index] = ECMA_VALUE_EMPTY; 345425bb815Sopenharmony_ci } 346425bb815Sopenharmony_ci } 347425bb815Sopenharmony_ci } 348425bb815Sopenharmony_ci 349425bb815Sopenharmony_ci ret_value = ECMA_VALUE_TRUE; 350425bb815Sopenharmony_ci } 351425bb815Sopenharmony_ci 352425bb815Sopenharmony_ci return ret_value; 353425bb815Sopenharmony_ci} /* ecma_op_arguments_object_delete */ 354425bb815Sopenharmony_ci 355425bb815Sopenharmony_ci/** 356425bb815Sopenharmony_ci * @} 357425bb815Sopenharmony_ci * @} 358425bb815Sopenharmony_ci */ 359