From 4aaa0ace1749ab490cdf6c0885719d28f01b8112 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zsolt=20Borb=C3=A9ly?= Date: Thu, 22 Oct 2015 14:32:12 +0200 Subject: [PATCH] Simplify [[DefineOwnProperty]] usage, use the helper function where possible. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit JerryScript-DCO-1.0-Signed-off-by: Zsolt Borbély zsborbely.u-szeged@partner.samsung.com --- .../ecma-builtin-function-prototype.cpp | 26 ++--- .../builtin-objects/ecma-builtin-helpers.cpp | 101 +++++------------- .../builtin-objects/ecma-builtin-json.cpp | 52 +++------ .../ecma-builtin-string-prototype.cpp | 29 ++--- .../ecma/operations/ecma-array-object.cpp | 27 ++--- .../ecma/operations/ecma-function-object.cpp | 81 +++++--------- jerry-core/ecma/operations/ecma-lex-env.cpp | 28 ++--- .../operations/ecma-objects-arguments.cpp | 93 ++++++---------- .../ecma/operations/ecma-objects-general.cpp | 32 ++---- .../ecma/operations/ecma-regexp-object.cpp | 55 +++------- 10 files changed, 157 insertions(+), 367 deletions(-) diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.cpp b/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.cpp index 5791a2122..8f3b8c23a 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.cpp +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.cpp @@ -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)); diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-helpers.cpp b/jerry-core/ecma/builtin-objects/ecma-builtin-helpers.cpp index 766b789ed..175ef86b8 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-helpers.cpp +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-helpers.cpp @@ -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, diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-json.cpp b/jerry-core/ecma/builtin-objects/ecma-builtin-json.cpp index dbf5b7795..f0fa4645f 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-json.cpp +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-json.cpp @@ -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); diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.cpp b/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.cpp index e7dba817d..4c9e42953 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.cpp +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.cpp @@ -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); diff --git a/jerry-core/ecma/operations/ecma-array-object.cpp b/jerry-core/ecma/operations/ecma-array-object.cpp index 69c8f283d..354f59efc 100644 --- a/jerry-core/ecma/operations/ecma-array-object.cpp +++ b/jerry-core/ecma/operations/ecma-array-object.cpp @@ -15,6 +15,7 @@ #include "ecma-alloc.h" #include "ecma-array-object.h" +#include "ecma-builtin-helpers.h" #include "ecma-builtins.h" #include "ecma-exceptions.h" #include "ecma-gc.h" @@ -138,25 +139,13 @@ ecma_op_create_array_object (const ecma_value_t *arguments_list_p, /**< list of ecma_string_t* item_name_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 = array_items_p[index]; - - 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_op_object_define_own_property (obj_p, - item_name_string_p, - &item_prop_desc, - false); + ecma_builtin_helper_def_prop (obj_p, + item_name_string_p, + array_items_p[index], + true, /* Writable */ + true, /* Enumerable */ + true, /* Configurable */ + false); /* Failure handling */ ecma_deref_ecma_string (item_name_string_p); } diff --git a/jerry-core/ecma/operations/ecma-function-object.cpp b/jerry-core/ecma/operations/ecma-function-object.cpp index 8203b8e6e..0639ede9b 100644 --- a/jerry-core/ecma/operations/ecma-function-object.cpp +++ b/jerry-core/ecma/operations/ecma-function-object.cpp @@ -14,6 +14,7 @@ */ #include "ecma-alloc.h" +#include "ecma-builtin-helpers.h" #include "ecma-builtins.h" #include "ecma-exceptions.h" #include "ecma-function-object.h" @@ -377,26 +378,15 @@ ecma_op_function_try_lazy_instantiate_property (ecma_object_t *obj_p, /**< the f ecma_object_t *proto_p = ecma_op_create_object_object_noarg (); // 17. - ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor (); - { - prop_desc.is_value_defined = true; - prop_desc.value = ecma_make_object_value (obj_p); - - prop_desc.is_writable_defined = true; - prop_desc.is_writable = true; - - prop_desc.is_enumerable_defined = true; - prop_desc.is_enumerable = false; - - prop_desc.is_configurable_defined = true; - prop_desc.is_configurable = true; - } - ecma_string_t *magic_string_constructor_p = ecma_get_magic_string (LIT_MAGIC_STRING_CONSTRUCTOR); - ecma_op_object_define_own_property (proto_p, - magic_string_constructor_p, - &prop_desc, - false); + ecma_builtin_helper_def_prop (proto_p, + magic_string_constructor_p, + ecma_make_object_value (obj_p), + true, /* Writable */ + false, /* Enumerable */ + true, /* Configurable */ + false); /* Failure handling */ + ecma_deref_ecma_string (magic_string_constructor_p); // 18. @@ -485,26 +475,15 @@ ecma_op_create_external_function_object (ecma_external_pointer_t code_p) /**< po (ecma_external_pointer_t) code_p); JERRY_ASSERT (is_created); - ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor (); - { - prop_desc.is_value_defined = true; - prop_desc.value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED); - - prop_desc.is_writable_defined = true; - prop_desc.is_writable = true; - - prop_desc.is_enumerable_defined = true; - prop_desc.is_enumerable = false; - - prop_desc.is_configurable_defined = true; - prop_desc.is_configurable = false; - } - ecma_string_t *magic_string_prototype_p = ecma_get_magic_string (LIT_MAGIC_STRING_PROTOTYPE); - ecma_op_object_define_own_property (function_obj_p, - magic_string_prototype_p, - &prop_desc, - false); + ecma_builtin_helper_def_prop (function_obj_p, + magic_string_prototype_p, + ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED), + true, /* Writable */ + false, /* Enumerable */ + false, /* Configurable */ + false); /* Failure handling */ + ecma_deref_ecma_string (magic_string_prototype_p); return function_obj_p; @@ -1153,25 +1132,15 @@ ecma_op_function_declaration (ecma_object_t *lex_env_p, /**< lexical environment if (ecma_is_property_configurable (existing_prop_p)) { - ecma_property_descriptor_t property_desc = ecma_make_empty_property_descriptor (); - { - property_desc.is_value_defined = true; - property_desc.value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED); + ecma_completion_value_t completion; + completion = ecma_builtin_helper_def_prop (glob_obj_p, + function_name_p, + ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED), + true, /* Writable */ + true, /* Enumerable */ + is_configurable_bindings, /* Configurable */ + true); /* Failure handling */ - property_desc.is_writable_defined = true; - property_desc.is_writable = true; - - property_desc.is_enumerable_defined = true; - property_desc.is_enumerable = true; - - property_desc.is_configurable_defined = true; - property_desc.is_configurable = is_configurable_bindings; - } - - ecma_completion_value_t completion = ecma_op_object_define_own_property (glob_obj_p, - function_name_p, - &property_desc, - true); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); } else if (existing_prop_p->type == ECMA_PROPERTY_NAMEDACCESSOR) diff --git a/jerry-core/ecma/operations/ecma-lex-env.cpp b/jerry-core/ecma/operations/ecma-lex-env.cpp index 5329a8877..a798e7e16 100644 --- a/jerry-core/ecma/operations/ecma-lex-env.cpp +++ b/jerry-core/ecma/operations/ecma-lex-env.cpp @@ -13,6 +13,7 @@ * limitations under the License. */ +#include "ecma-builtin-helpers.h" #include "ecma-builtins.h" #include "ecma-exceptions.h" #include "ecma-gc.h" @@ -161,25 +162,14 @@ ecma_op_create_mutable_binding (ecma_object_t *lex_env_p, /**< lexical environme ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p); - ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor (); - { - prop_desc.is_value_defined = true; - prop_desc.value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED); - - 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 = is_deletable; - } - - ecma_completion_value_t completion = ecma_op_object_define_own_property (binding_obj_p, - name_p, - &prop_desc, - true); + ecma_completion_value_t completion; + completion = ecma_builtin_helper_def_prop (binding_obj_p, + name_p, + ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED), + true, /* Writable */ + true, /* Enumerable */ + is_deletable, /* Configurable */ + true); /* Failure handling */ if (ecma_is_completion_value_throw (completion)) { diff --git a/jerry-core/ecma/operations/ecma-objects-arguments.cpp b/jerry-core/ecma/operations/ecma-objects-arguments.cpp index 62ba6bbb4..e48c8f4d5 100644 --- a/jerry-core/ecma/operations/ecma-objects-arguments.cpp +++ b/jerry-core/ecma/operations/ecma-objects-arguments.cpp @@ -21,6 +21,7 @@ */ #include "ecma-alloc.h" +#include "ecma-builtin-helpers.h" #include "ecma-builtins.h" #include "ecma-function-object.h" #include "ecma-gc.h" @@ -66,25 +67,15 @@ ecma_op_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function class_prop_p->u.internal_property.value = LIT_MAGIC_STRING_ARGUMENTS_UL; // 7. - ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor (); - { - prop_desc.is_value_defined = true; - prop_desc.value = ecma_make_number_value (len_p); - - prop_desc.is_writable_defined = true; - prop_desc.is_writable = true; - - prop_desc.is_enumerable_defined = true; - prop_desc.is_enumerable = false; - - prop_desc.is_configurable_defined = true; - prop_desc.is_configurable = true; - } ecma_string_t *length_magic_string_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH); - ecma_completion_value_t completion = ecma_op_object_define_own_property (obj_p, - length_magic_string_p, - &prop_desc, - false); + ecma_completion_value_t completion = ecma_builtin_helper_def_prop (obj_p, + length_magic_string_p, + ecma_make_number_value (len_p), + true, /* Writable */ + false, /* Enumerable */ + true, /* Configurable */ + false); /* Failure handling */ + JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); ecma_deref_ecma_string (length_magic_string_p); @@ -101,32 +92,22 @@ ecma_op_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function bool is_moved = ecma_collection_iterator_next (&args_iterator); JERRY_ASSERT (is_moved); - prop_desc = ecma_make_empty_property_descriptor (); - { - prop_desc.is_value_defined = true; - prop_desc.value = *args_iterator.current_value_p; - - 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 *indx_string_p = ecma_new_ecma_string_from_uint32 (indx); + completion = ecma_builtin_helper_def_prop (obj_p, + indx_string_p, + *args_iterator.current_value_p, + true, /* Writable */ + true, /* Enumerable */ + true, /* Configurable */ + false); /* Failure handling */ - completion = ecma_op_object_define_own_property (obj_p, - indx_string_p, - &prop_desc, - false); JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); ecma_deref_ecma_string (indx_string_p); } + ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor (); + if (formal_params_p != NULL) { const ecma_length_t formal_params_number = formal_params_p->unit_number; @@ -186,14 +167,11 @@ ecma_op_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function { ecma_string_t *indx_string_p = ecma_new_ecma_string_from_uint32 ((uint32_t) indx); - prop_desc = ecma_make_empty_property_descriptor (); - { - prop_desc.is_value_defined = true; - prop_desc.value = ecma_make_string_value (name_p); + prop_desc.is_value_defined = true; + prop_desc.value = ecma_make_string_value (name_p); - prop_desc.is_configurable_defined = true; - prop_desc.is_configurable = true; - } + prop_desc.is_configurable_defined = true; + prop_desc.is_configurable = true; completion = ecma_op_object_define_own_property (map_p, indx_string_p, @@ -232,27 +210,16 @@ ecma_op_create_arguments_object (ecma_object_t *func_obj_p, /**< callee function // 13. if (!is_strict) { - prop_desc = ecma_make_empty_property_descriptor (); - { - prop_desc.is_value_defined = true; - prop_desc.value = ecma_make_object_value (func_obj_p); - - prop_desc.is_writable_defined = true; - prop_desc.is_writable = true; - - prop_desc.is_enumerable_defined = true; - prop_desc.is_enumerable = false; - - prop_desc.is_configurable_defined = true; - prop_desc.is_configurable = true; - } - ecma_string_t *callee_magic_string_p = ecma_get_magic_string (LIT_MAGIC_STRING_CALLEE); - completion = ecma_op_object_define_own_property (obj_p, - callee_magic_string_p, - &prop_desc, - false); + completion = ecma_builtin_helper_def_prop (obj_p, + callee_magic_string_p, + ecma_make_object_value (func_obj_p), + true, /* Writable */ + false, /* Enumerable */ + true, /* Configurable */ + false); /* Failure handling */ + JERRY_ASSERT (ecma_is_completion_value_normal_true (completion)); ecma_deref_ecma_string (callee_magic_string_p); diff --git a/jerry-core/ecma/operations/ecma-objects-general.cpp b/jerry-core/ecma/operations/ecma-objects-general.cpp index 468057aa6..ba06c3633 100644 --- a/jerry-core/ecma/operations/ecma-objects-general.cpp +++ b/jerry-core/ecma/operations/ecma-objects-general.cpp @@ -13,6 +13,7 @@ * limitations under the License. */ +#include "ecma-builtin-helpers.h" #include "ecma-builtins.h" #include "ecma-exceptions.h" #include "ecma-function-object.h" @@ -327,29 +328,14 @@ ecma_op_general_object_put (ecma_object_t *obj_p, /**< the object */ } else { - // 6. - - // a. - ecma_property_descriptor_t new_desc = ecma_make_empty_property_descriptor (); - { - new_desc.is_value_defined = true; - new_desc.value = value; - - new_desc.is_writable_defined = true; - new_desc.is_writable = true; - - new_desc.is_enumerable_defined = true; - new_desc.is_enumerable = true; - - new_desc.is_configurable_defined = true; - new_desc.is_configurable = true; - } - - // b. - return ecma_op_object_define_own_property (obj_p, - property_name_p, - &new_desc, - is_throw); + // 6.a., 6.b. + return ecma_builtin_helper_def_prop (obj_p, + property_name_p, + value, + true, /* Writable */ + true, /* Enumerable */ + true, /* Configurable */ + is_throw); /* Failure handling */ } JERRY_UNREACHABLE (); diff --git a/jerry-core/ecma/operations/ecma-regexp-object.cpp b/jerry-core/ecma/operations/ecma-regexp-object.cpp index 2154ea17e..7bdd9bc98 100644 --- a/jerry-core/ecma/operations/ecma-regexp-object.cpp +++ b/jerry-core/ecma/operations/ecma-regexp-object.cpp @@ -16,6 +16,7 @@ #include "ecma-alloc.h" #include "ecma-array-object.h" +#include "ecma-builtin-helpers.h" #include "ecma-exceptions.h" #include "ecma-gc.h" #include "ecma-globals.h" @@ -1144,27 +1145,16 @@ re_set_result_array_properties (ecma_object_t *array_obj_p, /**< result array */ /* Set index property of the result array */ ecma_string_t *result_prop_str_p = ecma_get_magic_string (LIT_MAGIC_STRING_INDEX); { - ecma_property_descriptor_t array_item_prop_desc = ecma_make_empty_property_descriptor (); - - array_item_prop_desc.is_value_defined = true; - ecma_number_t *num_p = ecma_alloc_number (); *num_p = (ecma_number_t) index; - array_item_prop_desc.value = ecma_make_number_value (num_p); - array_item_prop_desc.is_writable_defined = true; - array_item_prop_desc.is_writable = true; - - array_item_prop_desc.is_enumerable_defined = true; - array_item_prop_desc.is_enumerable = true; - - array_item_prop_desc.is_configurable_defined = true; - array_item_prop_desc.is_configurable = true; - - ecma_op_object_define_own_property (array_obj_p, - result_prop_str_p, - &array_item_prop_desc, - true); + ecma_builtin_helper_def_prop (array_obj_p, + result_prop_str_p, + ecma_make_number_value (num_p), + true, /* Writable */ + true, /* Enumerable */ + true, /* Configurable */ + true); /* Failure handling */ ecma_dealloc_number (num_p); } @@ -1172,26 +1162,15 @@ re_set_result_array_properties (ecma_object_t *array_obj_p, /**< result array */ /* Set input property of the result array */ result_prop_str_p = ecma_get_magic_string (LIT_MAGIC_STRING_INPUT); - { - ecma_property_descriptor_t array_item_prop_desc = ecma_make_empty_property_descriptor (); - array_item_prop_desc.is_value_defined = true; - array_item_prop_desc.value = ecma_make_string_value (input_str_p); + ecma_builtin_helper_def_prop (array_obj_p, + result_prop_str_p, + ecma_make_string_value (input_str_p), + true, /* Writable */ + true, /* Enumerable */ + true, /* Configurable */ + true); /* Failure handling */ - array_item_prop_desc.is_writable_defined = true; - array_item_prop_desc.is_writable = true; - - array_item_prop_desc.is_enumerable_defined = true; - array_item_prop_desc.is_enumerable = true; - - array_item_prop_desc.is_configurable_defined = true; - array_item_prop_desc.is_configurable = true; - - ecma_op_object_define_own_property (array_obj_p, - result_prop_str_p, - &array_item_prop_desc, - true); - } ecma_deref_ecma_string (result_prop_str_p); /* Set length property of the result array */ @@ -1205,10 +1184,6 @@ re_set_result_array_properties (ecma_object_t *array_obj_p, /**< result array */ *num_p = (ecma_number_t) (num_of_elements); array_item_prop_desc.value = ecma_make_number_value (num_p); - array_item_prop_desc.is_writable_defined = false; - array_item_prop_desc.is_enumerable_defined = false; - array_item_prop_desc.is_configurable_defined = false; - ecma_op_object_define_own_property (array_obj_p, result_prop_str_p, &array_item_prop_desc,