Fix ecma_get_property_descriptor_from_property function
JerryScript-DCO-1.0-Signed-off-by: Kristof Kosztyo kkosztyo.u-szeged@partner.samsung.com
This commit is contained in:
committed by
Peter Gal
parent
62cb842434
commit
013bce85fc
@@ -1240,7 +1240,14 @@ ecma_free_property_descriptor (ecma_property_descriptor_t *prop_desc_p) /**< pro
|
|||||||
} /* ecma_free_property_descriptor */
|
} /* ecma_free_property_descriptor */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return property descriptor of property.
|
* Construct property descriptor from specified property
|
||||||
|
*
|
||||||
|
* @return property descriptor, corresponding to type and content of the specified property, i.e.:
|
||||||
|
* - for named data properties: { [Value], [Writable], [Enumerable], [Configurable] };
|
||||||
|
* - for named accessor properties: { [Get] - if defined,
|
||||||
|
* [Set] - if defined,
|
||||||
|
* [Enumerable], [Configurable]
|
||||||
|
* }.
|
||||||
*/
|
*/
|
||||||
ecma_property_descriptor_t
|
ecma_property_descriptor_t
|
||||||
ecma_get_property_descriptor_from_property (ecma_property_t *prop_p) /**< property */
|
ecma_get_property_descriptor_from_property (ecma_property_t *prop_p) /**< property */
|
||||||
@@ -1248,11 +1255,13 @@ ecma_get_property_descriptor_from_property (ecma_property_t *prop_p) /**< proper
|
|||||||
ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor ();
|
ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor ();
|
||||||
|
|
||||||
prop_desc.is_enumerable = ecma_is_property_enumerable (prop_p);
|
prop_desc.is_enumerable = ecma_is_property_enumerable (prop_p);
|
||||||
|
prop_desc.is_enumerable_defined = true;
|
||||||
prop_desc.is_configurable = ecma_is_property_configurable (prop_p);
|
prop_desc.is_configurable = ecma_is_property_configurable (prop_p);
|
||||||
|
prop_desc.is_configurable_defined = true;
|
||||||
|
|
||||||
if (prop_p->type == ECMA_PROPERTY_NAMEDDATA)
|
if (prop_p->type == ECMA_PROPERTY_NAMEDDATA)
|
||||||
{
|
{
|
||||||
prop_desc.value = ecma_get_named_data_property_value (prop_p);
|
prop_desc.value = ecma_copy_value (ecma_get_named_data_property_value (prop_p), true);
|
||||||
prop_desc.is_value_defined = true;
|
prop_desc.is_value_defined = true;
|
||||||
prop_desc.is_writable = ecma_is_property_writable (prop_p);
|
prop_desc.is_writable = ecma_is_property_writable (prop_p);
|
||||||
prop_desc.is_writable_defined = true;
|
prop_desc.is_writable_defined = true;
|
||||||
@@ -1260,9 +1269,25 @@ ecma_get_property_descriptor_from_property (ecma_property_t *prop_p) /**< proper
|
|||||||
else if (prop_p->type == ECMA_PROPERTY_NAMEDACCESSOR)
|
else if (prop_p->type == ECMA_PROPERTY_NAMEDACCESSOR)
|
||||||
{
|
{
|
||||||
prop_desc.get_p = ecma_get_named_accessor_property_getter (prop_p);
|
prop_desc.get_p = ecma_get_named_accessor_property_getter (prop_p);
|
||||||
prop_desc.is_get_defined = prop_desc.get_p != NULL ? true : false;
|
if (prop_desc.get_p != NULL)
|
||||||
|
{
|
||||||
|
prop_desc.is_get_defined = true;
|
||||||
|
ecma_ref_object (prop_desc.get_p);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
prop_desc.is_get_defined = false;
|
||||||
|
}
|
||||||
prop_desc.set_p = ecma_get_named_accessor_property_setter (prop_p);
|
prop_desc.set_p = ecma_get_named_accessor_property_setter (prop_p);
|
||||||
prop_desc.is_set_defined = prop_desc.set_p != NULL ? true : false;
|
if (prop_desc.set_p != NULL)
|
||||||
|
{
|
||||||
|
prop_desc.is_set_defined = true;
|
||||||
|
ecma_ref_object (prop_desc.set_p);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
prop_desc.is_set_defined = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return prop_desc;
|
return prop_desc;
|
||||||
|
|||||||
@@ -367,6 +367,8 @@ ecma_builtin_object_object_get_own_property_descriptor (ecma_value_t this_arg __
|
|||||||
// 4.
|
// 4.
|
||||||
ecma_object_t* desc_obj_p = ecma_op_from_property_descriptor (&prop_desc);
|
ecma_object_t* desc_obj_p = ecma_op_from_property_descriptor (&prop_desc);
|
||||||
|
|
||||||
|
ecma_free_property_descriptor (&prop_desc);
|
||||||
|
|
||||||
ret_value = ecma_make_normal_completion_value (ecma_make_object_value (desc_obj_p));
|
ret_value = ecma_make_normal_completion_value (ecma_make_object_value (desc_obj_p));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user