Passing property descriptors by const ref instead of by value.

This commit is contained in:
Ruben Ayrapetyan 2014-12-03 21:57:11 +03:00
parent b7daa16b99
commit 90fccc04ba
14 changed files with 129 additions and 120 deletions

View File

@ -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));

View File

@ -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);

View File

@ -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)

View File

@ -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);
/**

View File

@ -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));

View File

@ -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);

View File

@ -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)

View File

@ -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)

View File

@ -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,

View File

@ -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 */

View File

@ -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);

View File

@ -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);
/**
* @}

View File

@ -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 */

View File

@ -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);
/**