Skip to content

Commit 013bce8

Browse files
kkristofgalpeter
authored andcommitted
Fix ecma_get_property_descriptor_from_property function
JerryScript-DCO-1.0-Signed-off-by: Kristof Kosztyo [email protected]
1 parent 62cb842 commit 013bce8

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

jerry-core/ecma/base/ecma-helpers.cpp

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1240,29 +1240,54 @@ ecma_free_property_descriptor (ecma_property_descriptor_t *prop_desc_p) /**< pro
12401240
} /* ecma_free_property_descriptor */
12411241

12421242
/**
1243-
* Return property descriptor of property.
1243+
* Construct property descriptor from specified property
1244+
*
1245+
* @return property descriptor, corresponding to type and content of the specified property, i.e.:
1246+
* - for named data properties: { [Value], [Writable], [Enumerable], [Configurable] };
1247+
* - for named accessor properties: { [Get] - if defined,
1248+
* [Set] - if defined,
1249+
* [Enumerable], [Configurable]
1250+
* }.
12441251
*/
12451252
ecma_property_descriptor_t
12461253
ecma_get_property_descriptor_from_property (ecma_property_t *prop_p) /**< property */
12471254
{
12481255
ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor ();
12491256

12501257
prop_desc.is_enumerable = ecma_is_property_enumerable (prop_p);
1258+
prop_desc.is_enumerable_defined = true;
12511259
prop_desc.is_configurable = ecma_is_property_configurable (prop_p);
1260+
prop_desc.is_configurable_defined = true;
12521261

12531262
if (prop_p->type == ECMA_PROPERTY_NAMEDDATA)
12541263
{
1255-
prop_desc.value = ecma_get_named_data_property_value (prop_p);
1264+
prop_desc.value = ecma_copy_value (ecma_get_named_data_property_value (prop_p), true);
12561265
prop_desc.is_value_defined = true;
12571266
prop_desc.is_writable = ecma_is_property_writable (prop_p);
12581267
prop_desc.is_writable_defined = true;
12591268
}
12601269
else if (prop_p->type == ECMA_PROPERTY_NAMEDACCESSOR)
12611270
{
12621271
prop_desc.get_p = ecma_get_named_accessor_property_getter (prop_p);
1263-
prop_desc.is_get_defined = prop_desc.get_p != NULL ? true : false;
1272+
if (prop_desc.get_p != NULL)
1273+
{
1274+
prop_desc.is_get_defined = true;
1275+
ecma_ref_object (prop_desc.get_p);
1276+
}
1277+
else
1278+
{
1279+
prop_desc.is_get_defined = false;
1280+
}
12641281
prop_desc.set_p = ecma_get_named_accessor_property_setter (prop_p);
1265-
prop_desc.is_set_defined = prop_desc.set_p != NULL ? true : false;
1282+
if (prop_desc.set_p != NULL)
1283+
{
1284+
prop_desc.is_set_defined = true;
1285+
ecma_ref_object (prop_desc.set_p);
1286+
}
1287+
else
1288+
{
1289+
prop_desc.is_set_defined = false;
1290+
}
12661291
}
12671292

12681293
return prop_desc;

jerry-core/ecma/builtin-objects/ecma-builtin-object.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -367,6 +367,8 @@ ecma_builtin_object_object_get_own_property_descriptor (ecma_value_t this_arg __
367367
// 4.
368368
ecma_object_t* desc_obj_p = ecma_op_from_property_descriptor (&prop_desc);
369369

370+
ecma_free_property_descriptor (&prop_desc);
371+
370372
ret_value = ecma_make_normal_completion_value (ecma_make_object_value (desc_obj_p));
371373
}
372374
else

0 commit comments

Comments
 (0)