Assigning numbers to named data properties' values without reallocating pool chunk if the value already contains a number.

This commit is contained in:
Ruben Ayrapetyan
2014-12-03 16:03:13 +03:00
parent 3190089818
commit e955d8f742
+15 -4
View File
@@ -883,10 +883,21 @@ ecma_named_data_property_assign_value (ecma_object_t *obj_p, /**< object */
JERRY_ASSERT (prop_iter_p != NULL);
#endif /* !JERRY_NDEBUG */
ecma_free_value (ecma_get_named_data_property_value (prop_p), false);
prop_p->u.named_data_property.value = ecma_copy_value (value, false);
ecma_gc_update_may_ref_younger_object_flag_by_value (obj_p,
prop_p->u.named_data_property.value);
if (ecma_is_value_number (value)
&& ecma_is_value_number (prop_p->u.named_data_property.value))
{
const ecma_number_t *num_src_p = ecma_get_number_from_value (value);
ecma_number_t *num_dst_p = ecma_get_number_from_value (prop_p->u.named_data_property.value);
*num_dst_p = *num_src_p;
}
else
{
ecma_free_value (ecma_get_named_data_property_value (prop_p), false);
prop_p->u.named_data_property.value = ecma_copy_value (value, false);
ecma_gc_update_may_ref_younger_object_flag_by_value (obj_p,
prop_p->u.named_data_property.value);
}
} /* ecma_named_data_property_assign_value */
/**