diff --git a/src/libcoreint/opcodes.c b/src/libcoreint/opcodes.c index 142231832..9b3fd688b 100644 --- a/src/libcoreint/opcodes.c +++ b/src/libcoreint/opcodes.c @@ -930,7 +930,7 @@ opfunc_obj_decl (opcode_t opdata, /**< operation data */ ecma_completion_value_t define_prop_completion = ecma_op_object_define_own_property (obj_p, prop_name_string_p, - prop_desc, + &prop_desc, false); JERRY_ASSERT (ecma_is_completion_value_normal_true (define_prop_completion) || ecma_is_completion_value_normal_false (define_prop_completion)); diff --git a/src/libecmabuiltins/ecma-builtin-object.c b/src/libecmabuiltins/ecma-builtin-object.c index c90640393..15a07ceb7 100644 --- a/src/libecmabuiltins/ecma-builtin-object.c +++ b/src/libecmabuiltins/ecma-builtin-object.c @@ -336,7 +336,7 @@ ecma_builtin_object_object_define_property (ecma_value_t this_arg __unused, /**< ECMA_TRY_CATCH (define_own_prop_ret, ecma_op_object_define_own_property (obj_p, name_str_p, - prop_desc, + &prop_desc, true), ret_value); diff --git a/src/libecmaoperations/ecma-array-object.c b/src/libecmaoperations/ecma-array-object.c index 9491877b9..9789547ce 100644 --- a/src/libecmaoperations/ecma-array-object.c +++ b/src/libecmaoperations/ecma-array-object.c @@ -147,7 +147,7 @@ ecma_op_create_array_object (ecma_value_t *arguments_list_p, /**< list of argume ecma_op_object_define_own_property (obj_p, item_name_string_p, - item_prop_desc, + &item_prop_desc, false); ecma_deref_ecma_string (item_name_string_p); @@ -169,7 +169,7 @@ ecma_op_create_array_object (ecma_value_t *arguments_list_p, /**< list of argume ecma_completion_value_t ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array object */ ecma_string_t *property_name_p, /**< property name */ - ecma_property_descriptor_t property_desc, /**< property descriptor */ + const ecma_property_descriptor_t* property_desc_p, /**< property descriptor */ bool is_throw) /**< flag that controls failure handling */ { JERRY_ASSERT (ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_ARRAY); @@ -195,16 +195,16 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o if (is_property_name_equal_length) { // a. - if (!property_desc.is_value_defined) + if (!property_desc_p->is_value_defined) { // i. - return ecma_op_general_object_define_own_property (obj_p, property_name_p, property_desc, is_throw); + return ecma_op_general_object_define_own_property (obj_p, property_name_p, property_desc_p, is_throw); } ecma_number_t new_len_num; // c. - ecma_completion_value_t completion = ecma_op_to_number (property_desc.value); + ecma_completion_value_t completion = ecma_op_to_number (property_desc_p->value); if (ecma_is_completion_value_throw (completion)) { return completion; @@ -230,7 +230,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o ecma_number_t *new_len_num_p = ecma_alloc_number (); *new_len_num_p = new_len_num; - ecma_property_descriptor_t new_len_property_desc = property_desc; + ecma_property_descriptor_t new_len_property_desc = *property_desc_p; new_len_property_desc.value = ecma_make_number_value (new_len_num_p); ecma_completion_value_t ret_value; @@ -242,7 +242,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o magic_string_length_p = ecma_get_magic_string (ECMA_MAGIC_STRING_LENGTH); ret_value = ecma_op_general_object_define_own_property (obj_p, magic_string_length_p, - new_len_property_desc, + &new_len_property_desc, is_throw); ecma_deref_ecma_string (magic_string_length_p); } @@ -276,7 +276,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o magic_string_length_p = ecma_get_magic_string (ECMA_MAGIC_STRING_LENGTH); ecma_completion_value_t succeeded = ecma_op_general_object_define_own_property (obj_p, magic_string_length_p, - new_len_property_desc, + &new_len_property_desc, is_throw); ecma_deref_ecma_string (magic_string_length_p); @@ -329,7 +329,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o ecma_string_t *magic_string_length_p = ecma_get_magic_string (ECMA_MAGIC_STRING_LENGTH); ecma_completion_value_t completion = ecma_op_general_object_define_own_property (obj_p, magic_string_length_p, - new_len_property_desc, + &new_len_property_desc, false); ecma_deref_ecma_string (magic_string_length_p); @@ -360,7 +360,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o magic_string_length_p = ecma_get_magic_string (ECMA_MAGIC_STRING_LENGTH); completion_set_not_writable = ecma_op_general_object_define_own_property (obj_p, magic_string_length_p, - prop_desc_not_writable, + &prop_desc_not_writable, false); ecma_deref_ecma_string (magic_string_length_p); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion_set_not_writable)); @@ -410,7 +410,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o // 5. return ecma_op_general_object_define_own_property (obj_p, property_name_p, - property_desc, + property_desc_p, false); } @@ -426,7 +426,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o // c. ecma_completion_value_t succeeded = ecma_op_general_object_define_own_property (obj_p, property_name_p, - property_desc, + property_desc_p, false); // d. JERRY_ASSERT (ecma_is_completion_value_normal_true (succeeded) diff --git a/src/libecmaoperations/ecma-array-object.h b/src/libecmaoperations/ecma-array-object.h index 577dfcbcc..67646f413 100644 --- a/src/libecmaoperations/ecma-array-object.h +++ b/src/libecmaoperations/ecma-array-object.h @@ -33,7 +33,7 @@ ecma_op_create_array_object (ecma_value_t *arguments_list_p, extern ecma_completion_value_t ecma_op_array_object_define_own_property (ecma_object_t *obj_p, ecma_string_t *property_name_p, - ecma_property_descriptor_t property_desc, + const ecma_property_descriptor_t* property_desc_p, bool is_throw); /** diff --git a/src/libecmaoperations/ecma-conversion.c b/src/libecmaoperations/ecma-conversion.c index 823b4ba7b..87265e24b 100644 --- a/src/libecmaoperations/ecma-conversion.c +++ b/src/libecmaoperations/ecma-conversion.c @@ -428,7 +428,7 @@ ecma_op_to_object (ecma_value_t value) /**< ecma-value */ * @return constructed object */ ecma_object_t* -ecma_op_from_property_descriptor (const ecma_property_descriptor_t src_prop_desc) /**< property descriptor */ +ecma_op_from_property_descriptor (const ecma_property_descriptor_t* src_prop_desc_p) /**< property descriptor */ { // 2. ecma_object_t *obj_p = ecma_op_create_object_object_noarg (); @@ -455,25 +455,25 @@ ecma_op_from_property_descriptor (const ecma_property_descriptor_t src_prop_desc JERRY_ASSERT (prop_desc.is_value_defined && prop_desc.is_writable_defined); // a. - prop_desc.value = src_prop_desc.value; + prop_desc.value = src_prop_desc_p->value; ecma_string_t *value_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_VALUE); completion = ecma_op_object_define_own_property (obj_p, value_magic_string_p, - prop_desc, + &prop_desc, false); ecma_deref_ecma_string (value_magic_string_p); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); // b. - const bool is_writable = (src_prop_desc.is_writable); + const bool is_writable = (src_prop_desc_p->is_writable); prop_desc.value = ecma_make_simple_value (is_writable ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE); ecma_string_t *writable_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_WRITABLE); completion = ecma_op_object_define_own_property (obj_p, writable_magic_string_p, - prop_desc, + &prop_desc, false); ecma_deref_ecma_string (writable_magic_string_p); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); @@ -484,62 +484,62 @@ ecma_op_from_property_descriptor (const ecma_property_descriptor_t src_prop_desc JERRY_ASSERT (prop_desc.is_get_defined && prop_desc.is_set_defined); // a. - if (src_prop_desc.get_p == NULL) + if (src_prop_desc_p->get_p == NULL) { prop_desc.value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED); } else { - prop_desc.value = ecma_make_object_value (src_prop_desc.get_p); + prop_desc.value = ecma_make_object_value (src_prop_desc_p->get_p); } ecma_string_t *get_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_GET); completion = ecma_op_object_define_own_property (obj_p, get_magic_string_p, - prop_desc, + &prop_desc, false); ecma_deref_ecma_string (get_magic_string_p); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); // b. - if (src_prop_desc.set_p == NULL) + if (src_prop_desc_p->set_p == NULL) { prop_desc.value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED); } else { - prop_desc.value = ecma_make_object_value (src_prop_desc.set_p); + prop_desc.value = ecma_make_object_value (src_prop_desc_p->set_p); } ecma_string_t *set_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_SET); completion = ecma_op_object_define_own_property (obj_p, set_magic_string_p, - prop_desc, + &prop_desc, false); ecma_deref_ecma_string (set_magic_string_p); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); } - const bool is_enumerable = src_prop_desc.is_enumerable; + const bool is_enumerable = src_prop_desc_p->is_enumerable; prop_desc.value = ecma_make_simple_value (is_enumerable ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE); ecma_string_t *enumerable_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_ENUMERABLE); completion = ecma_op_object_define_own_property (obj_p, enumerable_magic_string_p, - prop_desc, + &prop_desc, false); ecma_deref_ecma_string (enumerable_magic_string_p); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); - const bool is_configurable = src_prop_desc.is_configurable; + const bool is_configurable = src_prop_desc_p->is_configurable; prop_desc.value = ecma_make_simple_value (is_configurable ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE); ecma_string_t *configurable_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_CONFIGURABLE); completion = ecma_op_object_define_own_property (obj_p, configurable_magic_string_p, - prop_desc, + &prop_desc, false); ecma_deref_ecma_string (configurable_magic_string_p); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); diff --git a/src/libecmaoperations/ecma-conversion.h b/src/libecmaoperations/ecma-conversion.h index f51fcde0a..7cf255fd2 100644 --- a/src/libecmaoperations/ecma-conversion.h +++ b/src/libecmaoperations/ecma-conversion.h @@ -45,7 +45,7 @@ extern ecma_completion_value_t ecma_op_to_number (ecma_value_t value); extern ecma_completion_value_t ecma_op_to_string (ecma_value_t value); extern ecma_completion_value_t ecma_op_to_object (ecma_value_t value); -extern ecma_object_t* ecma_op_from_property_descriptor (const ecma_property_descriptor_t src_prop_desc); +extern ecma_object_t* ecma_op_from_property_descriptor (const ecma_property_descriptor_t* src_prop_desc_p); extern ecma_completion_value_t ecma_op_to_property_descriptor (ecma_value_t obj_value, ecma_property_descriptor_t *out_prop_desc_p); diff --git a/src/libecmaoperations/ecma-function-object.c b/src/libecmaoperations/ecma-function-object.c index 9223e18b0..ff2bd2efa 100644 --- a/src/libecmaoperations/ecma-function-object.c +++ b/src/libecmaoperations/ecma-function-object.c @@ -195,7 +195,7 @@ ecma_op_create_function_object (ecma_string_t* formal_parameter_list_p[], /**< f ecma_string_t* magic_string_length_p = ecma_get_magic_string (ECMA_MAGIC_STRING_LENGTH); ecma_completion_value_t completion = ecma_op_object_define_own_property (f, magic_string_length_p, - length_prop_desc, + &length_prop_desc, false); ecma_deref_ecma_string (magic_string_length_p); @@ -227,7 +227,7 @@ ecma_op_create_function_object (ecma_string_t* formal_parameter_list_p[], /**< f ecma_string_t *magic_string_constructor_p = ecma_get_magic_string (ECMA_MAGIC_STRING_CONSTRUCTOR); ecma_op_object_define_own_property (proto_p, magic_string_constructor_p, - prop_desc, + &prop_desc, false); ecma_deref_ecma_string (magic_string_constructor_p); @@ -237,7 +237,7 @@ ecma_op_create_function_object (ecma_string_t* formal_parameter_list_p[], /**< f ecma_string_t *magic_string_prototype_p = ecma_get_magic_string (ECMA_MAGIC_STRING_PROTOTYPE); ecma_op_object_define_own_property (f, magic_string_prototype_p, - prop_desc, + &prop_desc, false); ecma_deref_ecma_string (magic_string_prototype_p); @@ -266,14 +266,14 @@ ecma_op_create_function_object (ecma_string_t* formal_parameter_list_p[], /**< f ecma_string_t *magic_string_caller_p = ecma_get_magic_string (ECMA_MAGIC_STRING_CALLER); ecma_op_object_define_own_property (f, magic_string_caller_p, - prop_desc, + &prop_desc, false); ecma_deref_ecma_string (magic_string_caller_p); ecma_string_t *magic_string_arguments_p = ecma_get_magic_string (ECMA_MAGIC_STRING_ARGUMENTS); ecma_op_object_define_own_property (f, magic_string_arguments_p, - prop_desc, + &prop_desc, false); ecma_deref_ecma_string (magic_string_arguments_p); @@ -713,7 +713,7 @@ ecma_op_function_declaration (ecma_object_t *lex_env_p, /**< lexical environment completion = ecma_op_object_define_own_property (glob_obj_p, function_name_p, - property_desc, + &property_desc, true); } else if (existing_prop_p->type == ECMA_PROPERTY_NAMEDACCESSOR) diff --git a/src/libecmaoperations/ecma-lex-env.c b/src/libecmaoperations/ecma-lex-env.c index 0980a0190..820b2a0b2 100644 --- a/src/libecmaoperations/ecma-lex-env.c +++ b/src/libecmaoperations/ecma-lex-env.c @@ -116,7 +116,7 @@ ecma_op_create_mutable_binding (ecma_object_t *lex_env_p, /**< lexical environme ecma_completion_value_t completion = ecma_op_object_define_own_property (binding_obj_p, name_p, - prop_desc, + &prop_desc, true); if (!(ecma_is_completion_value_normal_true (completion) diff --git a/src/libecmaoperations/ecma-objects-arguments.c b/src/libecmaoperations/ecma-objects-arguments.c index 03cf68b6c..ebb01ed8a 100644 --- a/src/libecmaoperations/ecma-objects-arguments.c +++ b/src/libecmaoperations/ecma-objects-arguments.c @@ -83,7 +83,7 @@ ecma_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function */ ecma_string_t *length_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_LENGTH); ecma_completion_value_t completion = ecma_op_object_define_own_property (obj_p, length_magic_string_p, - prop_desc, + &prop_desc, false); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); ecma_deref_ecma_string (length_magic_string_p); @@ -114,7 +114,7 @@ ecma_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function */ completion = ecma_op_object_define_own_property (obj_p, indx_string_p, - prop_desc, + &prop_desc, false); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); @@ -177,7 +177,7 @@ ecma_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function */ completion = ecma_op_object_define_own_property (map_p, indx_string_p, - prop_desc, + &prop_desc, false); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); @@ -223,7 +223,7 @@ ecma_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function */ completion = ecma_op_object_define_own_property (obj_p, callee_magic_string_p, - prop_desc, + &prop_desc, false); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); @@ -254,7 +254,7 @@ ecma_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function */ completion = ecma_op_object_define_own_property (obj_p, callee_magic_string_p, - prop_desc, + &prop_desc, false); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); @@ -389,7 +389,8 @@ ecma_op_arguments_object_get_own_property (ecma_object_t *obj_p, /**< the object ecma_completion_value_t ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, /**< the object */ ecma_string_t *property_name_p, /**< property name */ - ecma_property_descriptor_t property_desc, /**< property descriptor */ + const ecma_property_descriptor_t* property_desc_p, /**< property + * descriptor */ bool is_throw) /**< flag that controls failure handling */ { // 1. @@ -405,7 +406,7 @@ ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, /**< the obj ECMA_TRY_CATCH (defined, ecma_op_general_object_define_own_property (obj_p, property_name_p, - property_desc, + property_desc_p, is_throw), ret_value); @@ -413,8 +414,8 @@ ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, /**< the obj if (mapped_prop_p != NULL) { // a. - if (property_desc.is_get_defined - || property_desc.is_set_defined) + if (property_desc_p->is_get_defined + || property_desc_p->is_set_defined) { ecma_completion_value_t completion = ecma_op_object_delete (map_p, property_name_p, false); @@ -430,11 +431,11 @@ ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, /**< the obj ecma_completion_value_t completion = ecma_make_empty_completion_value (); // i. - if (property_desc.is_value_defined) + if (property_desc_p->is_value_defined) { completion = ecma_op_object_put (map_p, property_name_p, - property_desc.value, + property_desc_p->value, is_throw); } @@ -445,8 +446,8 @@ ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, /**< the obj else { // ii. - if (property_desc.is_writable_defined - && !property_desc.is_writable) + if (property_desc_p->is_writable_defined + && !property_desc_p->is_writable) { completion = ecma_op_object_delete (map_p, property_name_p, diff --git a/src/libecmaoperations/ecma-objects-arguments.h b/src/libecmaoperations/ecma-objects-arguments.h index 5d0cdf8fd..64990db95 100644 --- a/src/libecmaoperations/ecma-objects-arguments.h +++ b/src/libecmaoperations/ecma-objects-arguments.h @@ -37,7 +37,7 @@ extern ecma_completion_value_t ecma_op_arguments_object_delete (ecma_object_t *o extern ecma_completion_value_t ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, ecma_string_t *property_name_p, - ecma_property_descriptor_t property_desc, + const ecma_property_descriptor_t* property_desc_p, bool is_throw); #endif /* !ECMA_OBJECTS_ARGUMENTS_H */ diff --git a/src/libecmaoperations/ecma-objects-general.c b/src/libecmaoperations/ecma-objects-general.c index c8d6cb06a..d02105315 100644 --- a/src/libecmaoperations/ecma-objects-general.c +++ b/src/libecmaoperations/ecma-objects-general.c @@ -273,7 +273,7 @@ ecma_op_general_object_put (ecma_object_t *obj_p, /**< the object */ // b., c. return ecma_op_object_define_own_property (obj_p, property_name_p, - value_desc, + &value_desc, is_throw); } @@ -326,7 +326,7 @@ ecma_op_general_object_put (ecma_object_t *obj_p, /**< the object */ // b. return ecma_op_object_define_own_property (obj_p, property_name_p, - new_desc, + &new_desc, is_throw); } @@ -612,21 +612,22 @@ ecma_op_general_object_default_value (ecma_object_t *obj_p, /**< the object */ ecma_completion_value_t ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the object */ ecma_string_t *property_name_p, /**< property name */ - ecma_property_descriptor_t property_desc, /**< property descriptor */ + const ecma_property_descriptor_t* property_desc_p, /**< property + * descriptor */ bool is_throw) /**< flag that controls failure handling */ { JERRY_ASSERT(obj_p != NULL && !ecma_is_lexical_environment (obj_p)); JERRY_ASSERT(property_name_p != NULL); - const bool is_property_desc_generic_descriptor = (!property_desc.is_value_defined - && !property_desc.is_writable_defined - && !property_desc.is_get_defined - && !property_desc.is_set_defined); - const bool is_property_desc_data_descriptor = (property_desc.is_value_defined - || property_desc.is_writable_defined); - const bool is_property_desc_accessor_descriptor = (property_desc.is_get_defined - || property_desc.is_set_defined); + const bool is_property_desc_generic_descriptor = (!property_desc_p->is_value_defined + && !property_desc_p->is_writable_defined + && !property_desc_p->is_get_defined + && !property_desc_p->is_set_defined); + const bool is_property_desc_data_descriptor = (property_desc_p->is_value_defined + || property_desc_p->is_writable_defined); + const bool is_property_desc_accessor_descriptor = (property_desc_p->is_get_defined + || property_desc_p->is_set_defined); // 1. ecma_property_t *current_p = ecma_op_object_get_own_property (obj_p, property_name_p); @@ -650,11 +651,11 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec { ecma_property_t *new_prop_p = ecma_create_named_data_property (obj_p, property_name_p, - property_desc.is_writable, - property_desc.is_enumerable, - property_desc.is_configurable); + property_desc_p->is_writable, + property_desc_p->is_enumerable, + property_desc_p->is_configurable); - ecma_named_data_property_assign_value (obj_p, new_prop_p, property_desc.value); + ecma_named_data_property_assign_value (obj_p, new_prop_p, property_desc_p->value); } else { @@ -663,10 +664,10 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec ecma_create_named_accessor_property (obj_p, property_name_p, - property_desc.get_p, - property_desc.set_p, - property_desc.is_enumerable, - property_desc.is_configurable); + property_desc_p->get_p, + property_desc_p->set_p, + property_desc_p->is_enumerable, + property_desc_p->is_configurable); } @@ -675,8 +676,8 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec // 5. if (is_property_desc_generic_descriptor - && !property_desc.is_enumerable_defined - && !property_desc.is_configurable_defined) + && !property_desc_p->is_enumerable_defined + && !property_desc_p->is_configurable_defined) { return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_TRUE); } @@ -688,54 +689,54 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec JERRY_ASSERT(is_current_data_descriptor || is_current_accessor_descriptor); bool is_every_field_in_desc_also_occurs_in_current_desc_with_same_value = true; - if (property_desc.is_value_defined) + if (property_desc_p->is_value_defined) { if (!is_current_data_descriptor - || !ecma_op_same_value (property_desc.value, + || !ecma_op_same_value (property_desc_p->value, ecma_get_named_data_property_value (current_p))) { is_every_field_in_desc_also_occurs_in_current_desc_with_same_value = false; } } - if (property_desc.is_writable_defined) + if (property_desc_p->is_writable_defined) { if (!is_current_data_descriptor - || property_desc.is_writable != ecma_is_property_writable (current_p)) + || property_desc_p->is_writable != ecma_is_property_writable (current_p)) { is_every_field_in_desc_also_occurs_in_current_desc_with_same_value = false; } } - if (property_desc.is_get_defined) + if (property_desc_p->is_get_defined) { if (!is_current_accessor_descriptor - || property_desc.get_p != ECMA_GET_POINTER(current_p->u.named_accessor_property.get_p)) + || property_desc_p->get_p != ECMA_GET_POINTER(current_p->u.named_accessor_property.get_p)) { is_every_field_in_desc_also_occurs_in_current_desc_with_same_value = false; } } - if (property_desc.is_set_defined) + if (property_desc_p->is_set_defined) { if (!is_current_accessor_descriptor - || property_desc.set_p != ECMA_GET_POINTER(current_p->u.named_accessor_property.set_p)) + || property_desc_p->set_p != ECMA_GET_POINTER(current_p->u.named_accessor_property.set_p)) { is_every_field_in_desc_also_occurs_in_current_desc_with_same_value = false; } } - if (property_desc.is_enumerable_defined) + if (property_desc_p->is_enumerable_defined) { - if (property_desc.is_enumerable != ecma_is_property_enumerable (current_p)) + if (property_desc_p->is_enumerable != ecma_is_property_enumerable (current_p)) { is_every_field_in_desc_also_occurs_in_current_desc_with_same_value = false; } } - if (property_desc.is_configurable_defined) + if (property_desc_p->is_configurable_defined) { - if (property_desc.is_configurable != ecma_is_property_configurable (current_p)) + if (property_desc_p->is_configurable != ecma_is_property_configurable (current_p)) { is_every_field_in_desc_also_occurs_in_current_desc_with_same_value = false; } @@ -749,9 +750,9 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec // 7. if (!ecma_is_property_configurable (current_p)) { - if (property_desc.is_configurable - || (property_desc.is_enumerable_defined - && property_desc.is_enumerable != ecma_is_property_enumerable (current_p))) + if (property_desc_p->is_configurable + || (property_desc_p->is_enumerable_defined + && property_desc_p->is_enumerable != ecma_is_property_enumerable (current_p))) { // a., b. return ecma_reject (is_throw); @@ -805,14 +806,14 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec if (!ecma_is_property_writable (current_p)) { // i. - if (property_desc.is_writable) + if (property_desc_p->is_writable) { return ecma_reject (is_throw); } // ii. - if (property_desc.is_value_defined - && !ecma_op_same_value (property_desc.value, + if (property_desc_p->is_value_defined + && !ecma_op_same_value (property_desc_p->value, ecma_get_named_data_property_value (current_p))) { return ecma_reject (is_throw); @@ -830,10 +831,10 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec { // a. - if ((property_desc.is_get_defined - && property_desc.get_p != ECMA_GET_POINTER(current_p->u.named_accessor_property.get_p)) - || (property_desc.is_set_defined - && property_desc.set_p != ECMA_GET_POINTER(current_p->u.named_accessor_property.set_p))) + if ((property_desc_p->is_get_defined + && property_desc_p->get_p != ECMA_GET_POINTER(current_p->u.named_accessor_property.get_p)) + || (property_desc_p->is_set_defined + && property_desc_p->set_p != ECMA_GET_POINTER(current_p->u.named_accessor_property.set_p))) { // i., ii. return ecma_reject (is_throw); @@ -842,44 +843,48 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec } // 12. - if (property_desc.is_value_defined) + if (property_desc_p->is_value_defined) { JERRY_ASSERT(is_current_data_descriptor); - ecma_named_data_property_assign_value (obj_p, current_p, property_desc.value); + ecma_named_data_property_assign_value (obj_p, current_p, property_desc_p->value); } - if (property_desc.is_writable_defined) + if (property_desc_p->is_writable_defined) { JERRY_ASSERT(is_current_data_descriptor); - ecma_set_property_writable_attr (current_p, property_desc.is_writable); + ecma_set_property_writable_attr (current_p, property_desc_p->is_writable); } - if (property_desc.is_get_defined) + if (property_desc_p->is_get_defined) { JERRY_ASSERT(is_current_accessor_descriptor); - ECMA_SET_POINTER(current_p->u.named_accessor_property.get_p, property_desc.get_p); - ecma_gc_update_may_ref_younger_object_flag_by_object (obj_p, property_desc.get_p); + ecma_object_t *get_p = property_desc_p->get_p; + + ECMA_SET_POINTER(current_p->u.named_accessor_property.get_p, get_p); + ecma_gc_update_may_ref_younger_object_flag_by_object (obj_p, get_p); } - if (property_desc.is_set_defined) + if (property_desc_p->is_set_defined) { JERRY_ASSERT(is_current_accessor_descriptor); - ECMA_SET_POINTER(current_p->u.named_accessor_property.set_p, property_desc.set_p); - ecma_gc_update_may_ref_younger_object_flag_by_object (obj_p, property_desc.set_p); + ecma_object_t *set_p = property_desc_p->set_p; + + ECMA_SET_POINTER(current_p->u.named_accessor_property.set_p, set_p); + ecma_gc_update_may_ref_younger_object_flag_by_object (obj_p, set_p); } - if (property_desc.is_enumerable_defined) + if (property_desc_p->is_enumerable_defined) { - ecma_set_property_enumerable_attr (current_p, property_desc.is_enumerable); + ecma_set_property_enumerable_attr (current_p, property_desc_p->is_enumerable); } - if (property_desc.is_configurable_defined) + if (property_desc_p->is_configurable_defined) { - ecma_set_property_configurable_attr (current_p, property_desc.is_configurable); + ecma_set_property_configurable_attr (current_p, property_desc_p->is_configurable); } return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_TRUE); diff --git a/src/libecmaoperations/ecma-objects-general.h b/src/libecmaoperations/ecma-objects-general.h index dc4e0245a..ad0445ade 100644 --- a/src/libecmaoperations/ecma-objects-general.h +++ b/src/libecmaoperations/ecma-objects-general.h @@ -48,10 +48,11 @@ extern ecma_completion_value_t ecma_op_general_object_delete (ecma_object_t *obj bool is_throw); extern ecma_completion_value_t ecma_op_general_object_default_value (ecma_object_t *obj_p, ecma_preferred_type_hint_t hint); -extern ecma_completion_value_t ecma_op_general_object_define_own_property (ecma_object_t *obj_p, - ecma_string_t *property_name_p, - ecma_property_descriptor_t property_desc, - bool is_throw); +extern ecma_completion_value_t +ecma_op_general_object_define_own_property (ecma_object_t *obj_p, + ecma_string_t *property_name_p, + const ecma_property_descriptor_t* property_desc_p, + bool is_throw); /** * @} diff --git a/src/libecmaoperations/ecma-objects.c b/src/libecmaoperations/ecma-objects.c index eca9f6619..cefa3d2de 100644 --- a/src/libecmaoperations/ecma-objects.c +++ b/src/libecmaoperations/ecma-objects.c @@ -380,7 +380,8 @@ ecma_op_object_default_value (ecma_object_t *obj_p, /**< the object */ ecma_completion_value_t ecma_op_object_define_own_property (ecma_object_t *obj_p, /**< the object */ ecma_string_t *property_name_p, /**< property name */ - ecma_property_descriptor_t property_desc, /**< property descriptor */ + const ecma_property_descriptor_t* property_desc_p, /**< property + * descriptor */ bool is_throw) /**< flag that controls failure handling */ { JERRY_ASSERT(obj_p != NULL @@ -392,7 +393,7 @@ ecma_op_object_define_own_property (ecma_object_t *obj_p, /**< the object */ typedef ecma_completion_value_t (*define_own_property_ptr_t) (ecma_object_t *, ecma_string_t *, - ecma_property_descriptor_t, + const ecma_property_descriptor_t*, bool); static const define_own_property_ptr_t define_own_property [ECMA_OBJECT_TYPE__COUNT] = { @@ -407,7 +408,7 @@ ecma_op_object_define_own_property (ecma_object_t *obj_p, /**< the object */ return define_own_property[type] (obj_p, property_name_p, - property_desc, + property_desc_p, is_throw); } /* ecma_op_object_define_own_property */ diff --git a/src/libecmaoperations/ecma-objects.h b/src/libecmaoperations/ecma-objects.h index 214713ce0..212a0b37c 100644 --- a/src/libecmaoperations/ecma-objects.h +++ b/src/libecmaoperations/ecma-objects.h @@ -39,10 +39,11 @@ extern ecma_completion_value_t ecma_op_object_delete (ecma_object_t *obj_p, ecma_string_t *property_name_p, bool is_throw); extern ecma_completion_value_t ecma_op_object_default_value (ecma_object_t *obj_p, ecma_preferred_type_hint_t hint); -extern ecma_completion_value_t ecma_op_object_define_own_property (ecma_object_t *obj_p, - ecma_string_t *property_name_p, - ecma_property_descriptor_t property_desc, - bool is_throw); +extern ecma_completion_value_t +ecma_op_object_define_own_property (ecma_object_t *obj_p, + ecma_string_t *property_name_p, + const ecma_property_descriptor_t* property_desc_p, + bool is_throw); extern ecma_completion_value_t ecma_op_object_has_instance (ecma_object_t *obj_p, ecma_value_t value); /**