mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
Passing property descriptors by const ref instead of by value.
This commit is contained in:
parent
b7daa16b99
commit
90fccc04ba
@ -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));
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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);
|
||||
|
||||
/**
|
||||
|
||||
@ -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));
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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,
|
||||
|
||||
@ -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 */
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
|
||||
/**
|
||||
* @}
|
||||
|
||||
@ -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 */
|
||||
|
||||
|
||||
@ -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);
|
||||
/**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user