Introducing ecma_free_property_descriptor.
This commit is contained in:
@@ -831,6 +831,33 @@ ecma_make_empty_property_descriptor (void)
|
|||||||
return prop_desc;
|
return prop_desc;
|
||||||
} /* ecma_make_empty_property_descriptor */
|
} /* 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 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
* @}
|
* @}
|
||||||
|
|||||||
@@ -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 bool ecma_is_property_configurable (ecma_property_t* prop_p);
|
||||||
|
|
||||||
extern ecma_property_descriptor_t ecma_make_empty_property_descriptor (void);
|
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 */
|
/* ecma-helpers-conversion.c */
|
||||||
extern ecma_number_t ecma_zt_string_to_number (const ecma_char_t *str_p);
|
extern ecma_number_t ecma_zt_string_to_number (const ecma_char_t *str_p);
|
||||||
|
|||||||
@@ -878,30 +878,13 @@ ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */
|
|||||||
if (!ecma_is_completion_value_throw (ret_value))
|
if (!ecma_is_completion_value_throw (ret_value))
|
||||||
{
|
{
|
||||||
JERRY_ASSERT (ecma_is_completion_value_empty (ret_value));
|
JERRY_ASSERT (ecma_is_completion_value_empty (ret_value));
|
||||||
|
|
||||||
*out_prop_desc_p = prop_desc;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
*out_prop_desc_p = ecma_make_empty_property_descriptor ();
|
ecma_free_property_descriptor (&prop_desc);
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*out_prop_desc_p = prop_desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret_value;
|
return ret_value;
|
||||||
|
|||||||
Reference in New Issue
Block a user