From 45a3d52d70f5105966f0a60903526cca6f1e7d30 Mon Sep 17 00:00:00 2001 From: Ruben Ayrapetyan Date: Wed, 30 Jul 2014 18:24:14 +0400 Subject: [PATCH] Fixing [[DefineOwnProperty]]: correctly setting up value of data named property; correctly increasing reference counters of getter and setter. --- .../ecma-objects-properties.c | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/libecmaoperations/ecma-objects-properties.c b/src/libecmaoperations/ecma-objects-properties.c index 2a7a93876..9d418b6fc 100644 --- a/src/libecmaoperations/ecma-objects-properties.c +++ b/src/libecmaoperations/ecma-objects-properties.c @@ -14,6 +14,7 @@ */ #include "ecma-exceptions.h" +#include "ecma-gc.h" #include "ecma-globals.h" #include "ecma-helpers.h" #include "ecma-objects-properties.h" @@ -546,17 +547,29 @@ ecma_op_object_define_own_property( ecma_object_t *obj_p, /**< the object */ if ( is_property_desc_generic_descriptor || is_property_desc_data_descriptor ) { - ecma_create_named_data_property( obj_p, - property_name_p, - property_desc.writable, - property_desc.enumerable, - property_desc.configurable); + ecma_property_t *new_prop_p = ecma_create_named_data_property( obj_p, + property_name_p, + property_desc.writable, + property_desc.enumerable, + property_desc.configurable); + + new_prop_p->u.named_data_property.value = ecma_copy_value( property_desc.value); } else { // b. JERRY_ASSERT( is_property_desc_accessor_descriptor ); + if ( property_desc.get_p != NULL ) + { + ecma_ref_object( property_desc.get_p); + } + + if ( property_desc.set_p != NULL ) + { + ecma_ref_object( property_desc.set_p); + } + ecma_create_named_accessor_property( obj_p, property_name_p, property_desc.get_p,