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
+1 -1
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, ecma_completion_value_t define_prop_completion = ecma_op_object_define_own_property (obj_p,
prop_name_string_p, prop_name_string_p,
prop_desc, &prop_desc,
false); false);
JERRY_ASSERT (ecma_is_completion_value_normal_true (define_prop_completion) JERRY_ASSERT (ecma_is_completion_value_normal_true (define_prop_completion)
|| ecma_is_completion_value_normal_false (define_prop_completion)); || ecma_is_completion_value_normal_false (define_prop_completion));
+1 -1
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_TRY_CATCH (define_own_prop_ret,
ecma_op_object_define_own_property (obj_p, ecma_op_object_define_own_property (obj_p,
name_str_p, name_str_p,
prop_desc, &prop_desc,
true), true),
ret_value); ret_value);
+12 -12
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, ecma_op_object_define_own_property (obj_p,
item_name_string_p, item_name_string_p,
item_prop_desc, &item_prop_desc,
false); false);
ecma_deref_ecma_string (item_name_string_p); 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_completion_value_t
ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array object */ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array object */
ecma_string_t *property_name_p, /**< property name */ 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 */ bool is_throw) /**< flag that controls failure handling */
{ {
JERRY_ASSERT (ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_ARRAY); 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) if (is_property_name_equal_length)
{ {
// a. // a.
if (!property_desc.is_value_defined) if (!property_desc_p->is_value_defined)
{ {
// i. // 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; ecma_number_t new_len_num;
// c. // 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)) if (ecma_is_completion_value_throw (completion))
{ {
return 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 (); ecma_number_t *new_len_num_p = ecma_alloc_number ();
*new_len_num_p = new_len_num; *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); new_len_property_desc.value = ecma_make_number_value (new_len_num_p);
ecma_completion_value_t ret_value; 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); magic_string_length_p = ecma_get_magic_string (ECMA_MAGIC_STRING_LENGTH);
ret_value = ecma_op_general_object_define_own_property (obj_p, ret_value = ecma_op_general_object_define_own_property (obj_p,
magic_string_length_p, magic_string_length_p,
new_len_property_desc, &new_len_property_desc,
is_throw); is_throw);
ecma_deref_ecma_string (magic_string_length_p); 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); 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, ecma_completion_value_t succeeded = ecma_op_general_object_define_own_property (obj_p,
magic_string_length_p, magic_string_length_p,
new_len_property_desc, &new_len_property_desc,
is_throw); is_throw);
ecma_deref_ecma_string (magic_string_length_p); 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_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, ecma_completion_value_t completion = ecma_op_general_object_define_own_property (obj_p,
magic_string_length_p, magic_string_length_p,
new_len_property_desc, &new_len_property_desc,
false); false);
ecma_deref_ecma_string (magic_string_length_p); 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); 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, completion_set_not_writable = ecma_op_general_object_define_own_property (obj_p,
magic_string_length_p, magic_string_length_p,
prop_desc_not_writable, &prop_desc_not_writable,
false); false);
ecma_deref_ecma_string (magic_string_length_p); ecma_deref_ecma_string (magic_string_length_p);
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion_set_not_writable)); 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. // 5.
return ecma_op_general_object_define_own_property (obj_p, return ecma_op_general_object_define_own_property (obj_p,
property_name_p, property_name_p,
property_desc, property_desc_p,
false); false);
} }
@@ -426,7 +426,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o
// c. // c.
ecma_completion_value_t succeeded = ecma_op_general_object_define_own_property (obj_p, ecma_completion_value_t succeeded = ecma_op_general_object_define_own_property (obj_p,
property_name_p, property_name_p,
property_desc, property_desc_p,
false); false);
// d. // d.
JERRY_ASSERT (ecma_is_completion_value_normal_true (succeeded) JERRY_ASSERT (ecma_is_completion_value_normal_true (succeeded)
+1 -1
View File
@@ -33,7 +33,7 @@ ecma_op_create_array_object (ecma_value_t *arguments_list_p,
extern ecma_completion_value_t extern ecma_completion_value_t
ecma_op_array_object_define_own_property (ecma_object_t *obj_p, ecma_op_array_object_define_own_property (ecma_object_t *obj_p,
ecma_string_t *property_name_p, ecma_string_t *property_name_p,
ecma_property_descriptor_t property_desc, const ecma_property_descriptor_t* property_desc_p,
bool is_throw); bool is_throw);
/** /**
+15 -15
View File
@@ -428,7 +428,7 @@ ecma_op_to_object (ecma_value_t value) /**< ecma-value */
* @return constructed object * @return constructed object
*/ */
ecma_object_t* 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. // 2.
ecma_object_t *obj_p = ecma_op_create_object_object_noarg (); 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); JERRY_ASSERT (prop_desc.is_value_defined && prop_desc.is_writable_defined);
// a. // 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); ecma_string_t *value_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_VALUE);
completion = ecma_op_object_define_own_property (obj_p, completion = ecma_op_object_define_own_property (obj_p,
value_magic_string_p, value_magic_string_p,
prop_desc, &prop_desc,
false); false);
ecma_deref_ecma_string (value_magic_string_p); ecma_deref_ecma_string (value_magic_string_p);
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion));
// b. // 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 prop_desc.value = ecma_make_simple_value (is_writable ? ECMA_SIMPLE_VALUE_TRUE
: ECMA_SIMPLE_VALUE_FALSE); : ECMA_SIMPLE_VALUE_FALSE);
ecma_string_t *writable_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_WRITABLE); ecma_string_t *writable_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_WRITABLE);
completion = ecma_op_object_define_own_property (obj_p, completion = ecma_op_object_define_own_property (obj_p,
writable_magic_string_p, writable_magic_string_p,
prop_desc, &prop_desc,
false); false);
ecma_deref_ecma_string (writable_magic_string_p); ecma_deref_ecma_string (writable_magic_string_p);
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); 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); JERRY_ASSERT (prop_desc.is_get_defined && prop_desc.is_set_defined);
// a. // 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); prop_desc.value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
} }
else 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); ecma_string_t *get_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_GET);
completion = ecma_op_object_define_own_property (obj_p, completion = ecma_op_object_define_own_property (obj_p,
get_magic_string_p, get_magic_string_p,
prop_desc, &prop_desc,
false); false);
ecma_deref_ecma_string (get_magic_string_p); ecma_deref_ecma_string (get_magic_string_p);
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion));
// b. // 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); prop_desc.value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
} }
else 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); ecma_string_t *set_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_SET);
completion = ecma_op_object_define_own_property (obj_p, completion = ecma_op_object_define_own_property (obj_p,
set_magic_string_p, set_magic_string_p,
prop_desc, &prop_desc,
false); false);
ecma_deref_ecma_string (set_magic_string_p); ecma_deref_ecma_string (set_magic_string_p);
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); 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 prop_desc.value = ecma_make_simple_value (is_enumerable ? ECMA_SIMPLE_VALUE_TRUE
: ECMA_SIMPLE_VALUE_FALSE); : ECMA_SIMPLE_VALUE_FALSE);
ecma_string_t *enumerable_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_ENUMERABLE); ecma_string_t *enumerable_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_ENUMERABLE);
completion = ecma_op_object_define_own_property (obj_p, completion = ecma_op_object_define_own_property (obj_p,
enumerable_magic_string_p, enumerable_magic_string_p,
prop_desc, &prop_desc,
false); false);
ecma_deref_ecma_string (enumerable_magic_string_p); ecma_deref_ecma_string (enumerable_magic_string_p);
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); 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 prop_desc.value = ecma_make_simple_value (is_configurable ? ECMA_SIMPLE_VALUE_TRUE
: ECMA_SIMPLE_VALUE_FALSE); : ECMA_SIMPLE_VALUE_FALSE);
ecma_string_t *configurable_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_CONFIGURABLE); ecma_string_t *configurable_magic_string_p = ecma_get_magic_string (ECMA_MAGIC_STRING_CONFIGURABLE);
completion = ecma_op_object_define_own_property (obj_p, completion = ecma_op_object_define_own_property (obj_p,
configurable_magic_string_p, configurable_magic_string_p,
prop_desc, &prop_desc,
false); false);
ecma_deref_ecma_string (configurable_magic_string_p); ecma_deref_ecma_string (configurable_magic_string_p);
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion));
+1 -1
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_string (ecma_value_t value);
extern ecma_completion_value_t ecma_op_to_object (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, extern ecma_completion_value_t ecma_op_to_property_descriptor (ecma_value_t obj_value,
ecma_property_descriptor_t *out_prop_desc_p); ecma_property_descriptor_t *out_prop_desc_p);
+6 -6
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_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, ecma_completion_value_t completion = ecma_op_object_define_own_property (f,
magic_string_length_p, magic_string_length_p,
length_prop_desc, &length_prop_desc,
false); false);
ecma_deref_ecma_string (magic_string_length_p); 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_string_t *magic_string_constructor_p = ecma_get_magic_string (ECMA_MAGIC_STRING_CONSTRUCTOR);
ecma_op_object_define_own_property (proto_p, ecma_op_object_define_own_property (proto_p,
magic_string_constructor_p, magic_string_constructor_p,
prop_desc, &prop_desc,
false); false);
ecma_deref_ecma_string (magic_string_constructor_p); 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_string_t *magic_string_prototype_p = ecma_get_magic_string (ECMA_MAGIC_STRING_PROTOTYPE);
ecma_op_object_define_own_property (f, ecma_op_object_define_own_property (f,
magic_string_prototype_p, magic_string_prototype_p,
prop_desc, &prop_desc,
false); false);
ecma_deref_ecma_string (magic_string_prototype_p); 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_string_t *magic_string_caller_p = ecma_get_magic_string (ECMA_MAGIC_STRING_CALLER);
ecma_op_object_define_own_property (f, ecma_op_object_define_own_property (f,
magic_string_caller_p, magic_string_caller_p,
prop_desc, &prop_desc,
false); false);
ecma_deref_ecma_string (magic_string_caller_p); ecma_deref_ecma_string (magic_string_caller_p);
ecma_string_t *magic_string_arguments_p = ecma_get_magic_string (ECMA_MAGIC_STRING_ARGUMENTS); ecma_string_t *magic_string_arguments_p = ecma_get_magic_string (ECMA_MAGIC_STRING_ARGUMENTS);
ecma_op_object_define_own_property (f, ecma_op_object_define_own_property (f,
magic_string_arguments_p, magic_string_arguments_p,
prop_desc, &prop_desc,
false); false);
ecma_deref_ecma_string (magic_string_arguments_p); 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, completion = ecma_op_object_define_own_property (glob_obj_p,
function_name_p, function_name_p,
property_desc, &property_desc,
true); true);
} }
else if (existing_prop_p->type == ECMA_PROPERTY_NAMEDACCESSOR) else if (existing_prop_p->type == ECMA_PROPERTY_NAMEDACCESSOR)
+1 -1
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, ecma_completion_value_t completion = ecma_op_object_define_own_property (binding_obj_p,
name_p, name_p,
prop_desc, &prop_desc,
true); true);
if (!(ecma_is_completion_value_normal_true (completion) if (!(ecma_is_completion_value_normal_true (completion)
+14 -13
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_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, ecma_completion_value_t completion = ecma_op_object_define_own_property (obj_p,
length_magic_string_p, length_magic_string_p,
prop_desc, &prop_desc,
false); false);
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion));
ecma_deref_ecma_string (length_magic_string_p); 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, completion = ecma_op_object_define_own_property (obj_p,
indx_string_p, indx_string_p,
prop_desc, &prop_desc,
false); false);
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); 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, completion = ecma_op_object_define_own_property (map_p,
indx_string_p, indx_string_p,
prop_desc, &prop_desc,
false); false);
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); 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, completion = ecma_op_object_define_own_property (obj_p,
callee_magic_string_p, callee_magic_string_p,
prop_desc, &prop_desc,
false); false);
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); 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, completion = ecma_op_object_define_own_property (obj_p,
callee_magic_string_p, callee_magic_string_p,
prop_desc, &prop_desc,
false); false);
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); 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_completion_value_t
ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, /**< the object */ ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, /**< the object */
ecma_string_t *property_name_p, /**< property name */ 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 */ bool is_throw) /**< flag that controls failure handling */
{ {
// 1. // 1.
@@ -405,7 +406,7 @@ ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, /**< the obj
ECMA_TRY_CATCH (defined, ECMA_TRY_CATCH (defined,
ecma_op_general_object_define_own_property (obj_p, ecma_op_general_object_define_own_property (obj_p,
property_name_p, property_name_p,
property_desc, property_desc_p,
is_throw), is_throw),
ret_value); 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) if (mapped_prop_p != NULL)
{ {
// a. // a.
if (property_desc.is_get_defined if (property_desc_p->is_get_defined
|| property_desc.is_set_defined) || property_desc_p->is_set_defined)
{ {
ecma_completion_value_t completion = ecma_op_object_delete (map_p, property_name_p, false); 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 (); ecma_completion_value_t completion = ecma_make_empty_completion_value ();
// i. // i.
if (property_desc.is_value_defined) if (property_desc_p->is_value_defined)
{ {
completion = ecma_op_object_put (map_p, completion = ecma_op_object_put (map_p,
property_name_p, property_name_p,
property_desc.value, property_desc_p->value,
is_throw); is_throw);
} }
@@ -445,8 +446,8 @@ ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, /**< the obj
else else
{ {
// ii. // ii.
if (property_desc.is_writable_defined if (property_desc_p->is_writable_defined
&& !property_desc.is_writable) && !property_desc_p->is_writable)
{ {
completion = ecma_op_object_delete (map_p, completion = ecma_op_object_delete (map_p,
property_name_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 extern ecma_completion_value_t
ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p, ecma_op_arguments_object_define_own_property (ecma_object_t *obj_p,
ecma_string_t *property_name_p, ecma_string_t *property_name_p,
ecma_property_descriptor_t property_desc, const ecma_property_descriptor_t* property_desc_p,
bool is_throw); bool is_throw);
#endif /* !ECMA_OBJECTS_ARGUMENTS_H */ #endif /* !ECMA_OBJECTS_ARGUMENTS_H */
+62 -57
View File
@@ -273,7 +273,7 @@ ecma_op_general_object_put (ecma_object_t *obj_p, /**< the object */
// b., c. // b., c.
return ecma_op_object_define_own_property (obj_p, return ecma_op_object_define_own_property (obj_p,
property_name_p, property_name_p,
value_desc, &value_desc,
is_throw); is_throw);
} }
@@ -326,7 +326,7 @@ ecma_op_general_object_put (ecma_object_t *obj_p, /**< the object */
// b. // b.
return ecma_op_object_define_own_property (obj_p, return ecma_op_object_define_own_property (obj_p,
property_name_p, property_name_p,
new_desc, &new_desc,
is_throw); is_throw);
} }
@@ -612,21 +612,22 @@ ecma_op_general_object_default_value (ecma_object_t *obj_p, /**< the object */
ecma_completion_value_t ecma_completion_value_t
ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the object */ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the object */
ecma_string_t *property_name_p, /**< property name */ 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 */ bool is_throw) /**< flag that controls failure handling */
{ {
JERRY_ASSERT(obj_p != NULL JERRY_ASSERT(obj_p != NULL
&& !ecma_is_lexical_environment (obj_p)); && !ecma_is_lexical_environment (obj_p));
JERRY_ASSERT(property_name_p != NULL); JERRY_ASSERT(property_name_p != NULL);
const bool is_property_desc_generic_descriptor = (!property_desc.is_value_defined const bool is_property_desc_generic_descriptor = (!property_desc_p->is_value_defined
&& !property_desc.is_writable_defined && !property_desc_p->is_writable_defined
&& !property_desc.is_get_defined && !property_desc_p->is_get_defined
&& !property_desc.is_set_defined); && !property_desc_p->is_set_defined);
const bool is_property_desc_data_descriptor = (property_desc.is_value_defined const bool is_property_desc_data_descriptor = (property_desc_p->is_value_defined
|| property_desc.is_writable_defined); || property_desc_p->is_writable_defined);
const bool is_property_desc_accessor_descriptor = (property_desc.is_get_defined const bool is_property_desc_accessor_descriptor = (property_desc_p->is_get_defined
|| property_desc.is_set_defined); || property_desc_p->is_set_defined);
// 1. // 1.
ecma_property_t *current_p = ecma_op_object_get_own_property (obj_p, property_name_p); 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, ecma_property_t *new_prop_p = ecma_create_named_data_property (obj_p,
property_name_p, property_name_p,
property_desc.is_writable, property_desc_p->is_writable,
property_desc.is_enumerable, property_desc_p->is_enumerable,
property_desc.is_configurable); 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 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, ecma_create_named_accessor_property (obj_p,
property_name_p, property_name_p,
property_desc.get_p, property_desc_p->get_p,
property_desc.set_p, property_desc_p->set_p,
property_desc.is_enumerable, property_desc_p->is_enumerable,
property_desc.is_configurable); property_desc_p->is_configurable);
} }
@@ -675,8 +676,8 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec
// 5. // 5.
if (is_property_desc_generic_descriptor if (is_property_desc_generic_descriptor
&& !property_desc.is_enumerable_defined && !property_desc_p->is_enumerable_defined
&& !property_desc.is_configurable_defined) && !property_desc_p->is_configurable_defined)
{ {
return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_TRUE); 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); 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; 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 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))) ecma_get_named_data_property_value (current_p)))
{ {
is_every_field_in_desc_also_occurs_in_current_desc_with_same_value = false; 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 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; 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 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; 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 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; 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; 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; 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. // 7.
if (!ecma_is_property_configurable (current_p)) if (!ecma_is_property_configurable (current_p))
{ {
if (property_desc.is_configurable if (property_desc_p->is_configurable
|| (property_desc.is_enumerable_defined || (property_desc_p->is_enumerable_defined
&& property_desc.is_enumerable != ecma_is_property_enumerable (current_p))) && property_desc_p->is_enumerable != ecma_is_property_enumerable (current_p)))
{ {
// a., b. // a., b.
return ecma_reject (is_throw); 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)) if (!ecma_is_property_writable (current_p))
{ {
// i. // i.
if (property_desc.is_writable) if (property_desc_p->is_writable)
{ {
return ecma_reject (is_throw); return ecma_reject (is_throw);
} }
// ii. // ii.
if (property_desc.is_value_defined if (property_desc_p->is_value_defined
&& !ecma_op_same_value (property_desc.value, && !ecma_op_same_value (property_desc_p->value,
ecma_get_named_data_property_value (current_p))) ecma_get_named_data_property_value (current_p)))
{ {
return ecma_reject (is_throw); return ecma_reject (is_throw);
@@ -830,10 +831,10 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec
{ {
// a. // a.
if ((property_desc.is_get_defined if ((property_desc_p->is_get_defined
&& 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))
|| (property_desc.is_set_defined || (property_desc_p->is_set_defined
&& 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)))
{ {
// i., ii. // i., ii.
return ecma_reject (is_throw); return ecma_reject (is_throw);
@@ -842,44 +843,48 @@ ecma_op_general_object_define_own_property (ecma_object_t *obj_p, /**< the objec
} }
// 12. // 12.
if (property_desc.is_value_defined) if (property_desc_p->is_value_defined)
{ {
JERRY_ASSERT(is_current_data_descriptor); 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); 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); JERRY_ASSERT(is_current_accessor_descriptor);
ECMA_SET_POINTER(current_p->u.named_accessor_property.get_p, property_desc.get_p); ecma_object_t *get_p = property_desc_p->get_p;
ecma_gc_update_may_ref_younger_object_flag_by_object (obj_p, property_desc.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); JERRY_ASSERT(is_current_accessor_descriptor);
ECMA_SET_POINTER(current_p->u.named_accessor_property.set_p, property_desc.set_p); ecma_object_t *set_p = property_desc_p->set_p;
ecma_gc_update_may_ref_younger_object_flag_by_object (obj_p, property_desc.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); return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_TRUE);
+5 -4
View File
@@ -48,10 +48,11 @@ extern ecma_completion_value_t ecma_op_general_object_delete (ecma_object_t *obj
bool is_throw); bool is_throw);
extern ecma_completion_value_t ecma_op_general_object_default_value (ecma_object_t *obj_p, extern ecma_completion_value_t ecma_op_general_object_default_value (ecma_object_t *obj_p,
ecma_preferred_type_hint_t hint); ecma_preferred_type_hint_t hint);
extern ecma_completion_value_t ecma_op_general_object_define_own_property (ecma_object_t *obj_p, extern ecma_completion_value_t
ecma_string_t *property_name_p, ecma_op_general_object_define_own_property (ecma_object_t *obj_p,
ecma_property_descriptor_t property_desc, ecma_string_t *property_name_p,
bool is_throw); const ecma_property_descriptor_t* property_desc_p,
bool is_throw);
/** /**
* @} * @}
+4 -3
View File
@@ -380,7 +380,8 @@ ecma_op_object_default_value (ecma_object_t *obj_p, /**< the object */
ecma_completion_value_t ecma_completion_value_t
ecma_op_object_define_own_property (ecma_object_t *obj_p, /**< the object */ ecma_op_object_define_own_property (ecma_object_t *obj_p, /**< the object */
ecma_string_t *property_name_p, /**< property name */ 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 */ bool is_throw) /**< flag that controls failure handling */
{ {
JERRY_ASSERT(obj_p != NULL 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 *, typedef ecma_completion_value_t (*define_own_property_ptr_t) (ecma_object_t *,
ecma_string_t *, ecma_string_t *,
ecma_property_descriptor_t, const ecma_property_descriptor_t*,
bool); bool);
static const define_own_property_ptr_t define_own_property [ECMA_OBJECT_TYPE__COUNT] = 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, return define_own_property[type] (obj_p,
property_name_p, property_name_p,
property_desc, property_desc_p,
is_throw); is_throw);
} /* ecma_op_object_define_own_property */ } /* ecma_op_object_define_own_property */
+5 -4
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, ecma_string_t *property_name_p,
bool is_throw); 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_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, extern ecma_completion_value_t
ecma_string_t *property_name_p, ecma_op_object_define_own_property (ecma_object_t *obj_p,
ecma_property_descriptor_t property_desc, ecma_string_t *property_name_p,
bool is_throw); 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, extern ecma_completion_value_t ecma_op_object_has_instance (ecma_object_t *obj_p,
ecma_value_t value); ecma_value_t value);
/** /**