Introducing ecma_free_property_descriptor.

This commit is contained in:
Ruben Ayrapetyan 2014-09-25 14:19:09 +04:00
parent 4c5c48eef2
commit c06c6a5ed8
3 changed files with 31 additions and 20 deletions

View File

@ -831,6 +831,33 @@ ecma_make_empty_property_descriptor (void)
return prop_desc;
} /* ecma_make_empty_property_descriptor */
/**
* Free values contained in the property descriptor
* and make it empty property descriptor
*/
void
ecma_free_property_descriptor (ecma_property_descriptor_t *prop_desc_p) /**< property descriptor */
{
if (prop_desc_p->is_value_defined)
{
ecma_free_value (prop_desc_p->value, true);
}
if (prop_desc_p->is_get_defined
&& prop_desc_p->get_p != NULL)
{
ecma_deref_object (prop_desc_p->get_p);
}
if (prop_desc_p->is_set_defined
&& prop_desc_p->set_p != NULL)
{
ecma_deref_object (prop_desc_p->set_p);
}
*prop_desc_p = ecma_make_empty_property_descriptor ();
} /* ecma_free_property_descriptor */
/**
* @}
* @}

View File

@ -224,6 +224,7 @@ extern bool ecma_is_property_enumerable (ecma_property_t* prop_p);
extern bool ecma_is_property_configurable (ecma_property_t* prop_p);
extern ecma_property_descriptor_t ecma_make_empty_property_descriptor (void);
extern void ecma_free_property_descriptor (ecma_property_descriptor_t *prop_desc_p);
/* ecma-helpers-conversion.c */
extern ecma_number_t ecma_zt_string_to_number (const ecma_char_t *str_p);

View File

@ -878,30 +878,13 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */
if (!ecma_is_completion_value_throw (ret_value))
{
JERRY_ASSERT (ecma_is_completion_value_empty (ret_value));
*out_prop_desc_p = prop_desc;
}
else
{
*out_prop_desc_p = ecma_make_empty_property_descriptor ();
if (prop_desc.is_value_defined)
{
ecma_free_value (prop_desc.value, true);
}
if (prop_desc.is_get_defined
&& prop_desc.get_p != NULL)
{
ecma_deref_object (prop_desc.get_p);
}
if (prop_desc.is_set_defined
&& prop_desc.set_p != NULL)
{
ecma_deref_object (prop_desc.set_p);
}
ecma_free_property_descriptor (&prop_desc);
}
*out_prop_desc_p = prop_desc;
}
return ret_value;