Simplify [[DefineOwnProperty]] usage, use the helper function where possible.

JerryScript-DCO-1.0-Signed-off-by: Zsolt Borbély zsborbely.u-szeged@partner.samsung.com
This commit is contained in:
Zsolt Borbély
2015-10-22 14:32:12 +02:00
committed by Peter Gal
parent fcebf654cc
commit 4aaa0ace17
10 changed files with 157 additions and 367 deletions
@@ -15,6 +15,7 @@
*/
#include "ecma-alloc.h"
#include "ecma-builtin-helpers.h"
#include "ecma-builtins.h"
#include "ecma-conversion.h"
#include "ecma-exceptions.h"
@@ -299,24 +300,13 @@ ecma_builtin_function_prototype_object_bind (ecma_value_t this_arg, /**< this ar
}
/* 17. */
ecma_property_descriptor_t length_prop_desc = ecma_make_empty_property_descriptor ();
{
length_prop_desc.is_value_defined = true;
length_prop_desc.value = ecma_make_number_value (length_p);
length_prop_desc.is_writable_defined = true;
length_prop_desc.is_writable = false;
length_prop_desc.is_enumerable_defined = true;
length_prop_desc.is_enumerable = false;
length_prop_desc.is_configurable_defined = true;
length_prop_desc.is_configurable = false;
}
ecma_completion_value_t completion = ecma_op_object_define_own_property (function_p,
magic_string_length_p,
&length_prop_desc,
false);
ecma_completion_value_t completion = ecma_builtin_helper_def_prop (function_p,
magic_string_length_p,
ecma_make_number_value (length_p),
false, /* Writable */
false, /* Enumerable */
false, /* Configurable */
false); /* Failure handling */
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)
|| ecma_is_completion_value_normal_false (completion));
@@ -236,25 +236,13 @@ ecma_builtin_helper_object_get_properties (ecma_object_t *obj_p, /** < object */
ecma_string_t *index_string_p = ecma_new_ecma_string_from_uint32 (index);
ecma_property_descriptor_t item_prop_desc = ecma_make_empty_property_descriptor ();
{
item_prop_desc.is_value_defined = true;
item_prop_desc.value = ecma_make_string_value (property_name_p);
item_prop_desc.is_writable_defined = true;
item_prop_desc.is_writable = true;
item_prop_desc.is_enumerable_defined = true;
item_prop_desc.is_enumerable = true;
item_prop_desc.is_configurable_defined = true;
item_prop_desc.is_configurable = true;
}
ecma_completion_value_t completion = ecma_op_object_define_own_property (new_array_p,
index_string_p,
&item_prop_desc,
false);
ecma_completion_value_t completion = ecma_builtin_helper_def_prop (new_array_p,
index_string_p,
ecma_make_string_value (property_name_p),
true, /* Writable */
true, /* Enumerable */
true, /* Configurable */
false); /* Failure handling */
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion));
@@ -394,27 +382,16 @@ ecma_builtin_helper_array_concat_value (ecma_object_t *obj_p, /**< array */
array_index_string_p),
ret_value);
ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor ();
{
prop_desc.is_value_defined = true;
prop_desc.value = get_value;
prop_desc.is_writable_defined = true;
prop_desc.is_writable = true;
prop_desc.is_enumerable_defined = true;
prop_desc.is_enumerable = true;
prop_desc.is_configurable_defined = true;
prop_desc.is_configurable = true;
}
/* 5.b.iii.3.b */
/* This will always be a simple value since 'is_throw' is false, so no need to free. */
ecma_completion_value_t put_comp = ecma_op_object_define_own_property (obj_p,
new_array_index_string_p,
&prop_desc,
false);
ecma_completion_value_t put_comp = ecma_builtin_helper_def_prop (obj_p,
new_array_index_string_p,
get_value,
true, /* Writable */
true, /* Enumerable */
true, /* Configurable */
false); /* Failure handling */
JERRY_ASSERT (ecma_is_completion_value_normal_true (put_comp));
ECMA_FINALIZE (get_value);
@@ -434,27 +411,16 @@ ecma_builtin_helper_array_concat_value (ecma_object_t *obj_p, /**< array */
{
ecma_string_t *new_array_index_string_p = ecma_new_ecma_string_from_uint32 ((*length_p)++);
ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor ();
{
prop_desc.is_value_defined = true;
prop_desc.value = value;
prop_desc.is_writable_defined = true;
prop_desc.is_writable = true;
prop_desc.is_enumerable_defined = true;
prop_desc.is_enumerable = true;
prop_desc.is_configurable_defined = true;
prop_desc.is_configurable = true;
}
/* 5.c.i */
/* This will always be a simple value since 'is_throw' is false, so no need to free. */
ecma_completion_value_t put_comp = ecma_op_object_define_own_property (obj_p,
new_array_index_string_p,
&prop_desc,
false);
ecma_completion_value_t put_comp = ecma_builtin_helper_def_prop (obj_p,
new_array_index_string_p,
value,
true, /* Writable */
true, /* Enumerable */
true, /* Configurable */
false); /* Failure handling */
JERRY_ASSERT (ecma_is_completion_value_normal_true (put_comp));
ecma_deref_ecma_string (new_array_index_string_p);
@@ -701,23 +667,14 @@ ecma_builtin_helper_def_prop (ecma_object_t *obj_p, /**< object */
prop_desc.is_value_defined = true;
prop_desc.value = value;
if (writable)
{
prop_desc.is_writable_defined = true;
prop_desc.is_writable = true;
}
prop_desc.is_writable_defined = true;
prop_desc.is_writable = writable;
if (enumerable)
{
prop_desc.is_enumerable_defined = true;
prop_desc.is_enumerable = true;
}
prop_desc.is_enumerable_defined = true;
prop_desc.is_enumerable = enumerable;
if (configurable)
{
prop_desc.is_configurable_defined = true;
prop_desc.is_configurable = true;
}
prop_desc.is_configurable_defined = true;
prop_desc.is_configurable = configurable;
return ecma_op_object_define_own_property (obj_p,
index_p,
@@ -424,25 +424,14 @@ ecma_builtin_json_define_value_property (ecma_object_t *obj_p, /**< this object
ecma_string_t *property_name_p, /**< property name */
ecma_value_t value) /**< value */
{
ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor ();
{
prop_desc.is_value_defined = true;
prop_desc.value = value;
ecma_completion_value_t completion_value = ecma_builtin_helper_def_prop (obj_p,
property_name_p,
value,
true, /* Writable */
true, /* Enumerable */
true, /* Configurable */
false); /* Failure handling */
prop_desc.is_writable_defined = true;
prop_desc.is_writable = true;
prop_desc.is_enumerable_defined = true;
prop_desc.is_enumerable = true;
prop_desc.is_configurable_defined = true;
prop_desc.is_configurable = true;
}
ecma_completion_value_t completion_value = ecma_op_object_define_own_property (obj_p,
property_name_p,
&prop_desc,
false);
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion_value)
|| ecma_is_completion_value_normal_false (completion_value));
} /* ecma_builtin_json_define_value_property */
@@ -575,27 +564,16 @@ ecma_builtin_json_parse_value (ecma_json_token_t *token_p) /**< token argument *
break;
}
ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor ();
{
prop_desc.is_value_defined = true;
prop_desc.value = value;
prop_desc.is_writable_defined = true;
prop_desc.is_writable = true;
prop_desc.is_enumerable_defined = true;
prop_desc.is_enumerable = true;
prop_desc.is_configurable_defined = true;
prop_desc.is_configurable = true;
}
ecma_string_t *index_str_p = ecma_new_ecma_string_from_uint32 (length);
ecma_completion_value_t completion = ecma_op_object_define_own_property (array_p,
index_str_p,
&prop_desc,
false);
ecma_completion_value_t completion = ecma_builtin_helper_def_prop (array_p,
index_str_p,
value,
true, /* Writable */
true, /* Enumerable */
true, /* Configurable */
false); /* Failure handling */
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion));
ecma_deref_ecma_string (index_str_p);
@@ -665,28 +665,17 @@ ecma_builtin_string_prototype_object_match (ecma_value_t this_arg, /**< this arg
ecma_op_object_get (exec_obj_p, index_zero_string_p),
ret_value);
/* 8.f.iii.5. */
ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor ();
{
prop_desc.is_value_defined = true;
prop_desc.value = match_string_value;
prop_desc.is_writable_defined = true;
prop_desc.is_writable = true;
prop_desc.is_enumerable_defined = true;
prop_desc.is_enumerable = true;
prop_desc.is_configurable_defined = true;
prop_desc.is_configurable = true;
}
ecma_string_t *current_index_str_p = ecma_new_ecma_string_from_uint32 (n);
ecma_completion_value_t completion = ecma_op_object_define_own_property (new_array_obj_p,
current_index_str_p,
&prop_desc,
false);
/* 8.f.iii.5. */
ecma_completion_value_t completion = ecma_builtin_helper_def_prop (new_array_obj_p,
current_index_str_p,
match_string_value,
true, /* Writable */
true, /* Enumerable */
true, /* Configurable */
false); /* Failure handling */
JERRY_ASSERT (ecma_is_completion_value_normal_true (completion));
ecma_deref_ecma_string (current_index_str_p);