Fix the return value of jerry_to_property_descriptor function (#4371)
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
@@ -4071,12 +4071,13 @@ This API function is equivalent to ToPropertyDescriptor operation defined in ECM
|
|||||||
It decodes the ECMAScript object and fills the fields of a JerryScript property descriptor.
|
It decodes the ECMAScript object and fills the fields of a JerryScript property descriptor.
|
||||||
|
|
||||||
*Notes*:
|
*Notes*:
|
||||||
- The es.next profile enables this by default.
|
- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
|
||||||
|
is no longer needed.
|
||||||
|
|
||||||
**Prototype**
|
**Prototype**
|
||||||
|
|
||||||
```c
|
```c
|
||||||
bool
|
jerry_value_t
|
||||||
jerry_to_property_descriptor (jerry_value_t obj_value, jerry_property_descriptor_t *out_prop_desc_p);
|
jerry_to_property_descriptor (jerry_value_t obj_value, jerry_property_descriptor_t *out_prop_desc_p);
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -4084,8 +4085,10 @@ jerry_to_property_descriptor (jerry_value_t obj_value, jerry_property_descriptor
|
|||||||
- `src_prop_desc_p` - the output property descriptor.
|
- `src_prop_desc_p` - the output property descriptor.
|
||||||
- return
|
- return
|
||||||
- [jerry_value_t](#jerry_value_t)
|
- [jerry_value_t](#jerry_value_t)
|
||||||
- true - if success
|
- true, if success
|
||||||
- false - if error occurs
|
- thrown error, otherwise
|
||||||
|
|
||||||
|
*New in version [[NEXT_RELEASE]]*.
|
||||||
|
|
||||||
**Example**
|
**Example**
|
||||||
|
|
||||||
@@ -4102,9 +4105,9 @@ example (void)
|
|||||||
jerry_value_t value = jerry_create_boolean (true);
|
jerry_value_t value = jerry_create_boolean (true);
|
||||||
jerry_property_descriptor_t prop_desc;
|
jerry_property_descriptor_t prop_desc;
|
||||||
|
|
||||||
jerry_set_property (object, prop_name, prop_name);
|
jerry_release_value (jerry_set_property (object, prop_name, prop_name));
|
||||||
|
|
||||||
jerry_to_property_descriptor (object, &prop_desc);
|
jerry_release_value (jerry_to_property_descriptor (object, &prop_desc));
|
||||||
|
|
||||||
jerry_release_value (object);
|
jerry_release_value (object);
|
||||||
jerry_release_value (prop_name);
|
jerry_release_value (prop_name);
|
||||||
|
|||||||
+16
-25
@@ -4043,7 +4043,8 @@ jerry_object_get_property_names (const jerry_value_t obj_val, /**< object */
|
|||||||
return ecma_op_new_array_object_from_collection (result_p, false);
|
return ecma_op_new_array_object_from_collection (result_p, false);
|
||||||
} /* jerry_object_get_property_names */
|
} /* jerry_object_get_property_names */
|
||||||
|
|
||||||
/** FromPropertyDescriptor abstract operation.
|
/**
|
||||||
|
* FromPropertyDescriptor abstract operation.
|
||||||
*
|
*
|
||||||
* @return new jerry_value_t - if success
|
* @return new jerry_value_t - if success
|
||||||
* value marked with error flag - otherwise
|
* value marked with error flag - otherwise
|
||||||
@@ -4066,41 +4067,31 @@ jerry_from_property_descriptor (const jerry_property_descriptor_t *src_prop_desc
|
|||||||
} /* jerry_from_property_descriptor */
|
} /* jerry_from_property_descriptor */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ToPropertyDescriptor abstract operation.
|
* ToPropertyDescriptor abstract operation.
|
||||||
*
|
*
|
||||||
* @return thrown error - if any conversion error happens
|
* @return true - if the conversion is successful
|
||||||
* ECMA_VALUE_TRUE - otherwise.
|
* thrown error - otherwise
|
||||||
*/
|
*/
|
||||||
bool
|
jerry_value_t
|
||||||
jerry_to_property_descriptor (jerry_value_t obj_value, /**< object value */
|
jerry_to_property_descriptor (jerry_value_t obj_value, /**< object value */
|
||||||
jerry_property_descriptor_t *out_prop_desc_p) /**< [out] filled property descriptor
|
jerry_property_descriptor_t *out_prop_desc_p) /**< [out] filled property descriptor
|
||||||
if return value is normal
|
* if return value is true,
|
||||||
empty completion value */
|
* unmodified otherwise */
|
||||||
{
|
{
|
||||||
jerry_assert_api_available ();
|
jerry_assert_api_available ();
|
||||||
|
|
||||||
if (!ecma_is_value_object (obj_value))
|
|
||||||
{
|
|
||||||
jerry_throw (ecma_raise_type_error (ECMA_ERR_MSG (wrong_args_msg_p)));
|
|
||||||
}
|
|
||||||
|
|
||||||
ecma_property_descriptor_t prop_desc;
|
ecma_property_descriptor_t prop_desc;
|
||||||
jerry_value_t result = ecma_op_to_property_descriptor (obj_value, &prop_desc);
|
jerry_value_t result = ecma_op_to_property_descriptor (obj_value, &prop_desc);
|
||||||
|
|
||||||
if (ECMA_IS_VALUE_ERROR (result))
|
if (ECMA_IS_VALUE_ERROR (result))
|
||||||
{
|
{
|
||||||
return false;
|
return jerry_throw (result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JERRY_ASSERT (result == ECMA_VALUE_EMPTY);
|
||||||
|
|
||||||
*out_prop_desc_p = jerry_property_descriptor_from_ecma (&prop_desc);
|
*out_prop_desc_p = jerry_property_descriptor_from_ecma (&prop_desc);
|
||||||
|
return ECMA_VALUE_TRUE;
|
||||||
if (ECMA_IS_VALUE_ERROR (out_prop_desc_p->value))
|
|
||||||
{
|
|
||||||
jerry_release_value (result);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
jerry_release_value (result);
|
|
||||||
return true;
|
|
||||||
} /* jerry_to_property_descriptor */
|
} /* jerry_to_property_descriptor */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -717,14 +717,13 @@ ecma_op_from_property_descriptor (const ecma_property_descriptor_t *src_prop_des
|
|||||||
* See also:
|
* See also:
|
||||||
* ECMA-262 v5, 8.10.5
|
* ECMA-262 v5, 8.10.5
|
||||||
*
|
*
|
||||||
* @return ecma value
|
* @return ECMA_VALUE_EMPTY if successful, ECMA_VALUE_ERROR otherwise
|
||||||
* Returned value must be freed with ecma_free_value
|
|
||||||
*/
|
*/
|
||||||
ecma_value_t
|
ecma_value_t
|
||||||
ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */
|
ecma_op_to_property_descriptor (ecma_value_t obj_value, /**< object value */
|
||||||
ecma_property_descriptor_t *out_prop_desc_p) /**< [out] filled property descriptor
|
ecma_property_descriptor_t *out_prop_desc_p) /**< [out] filled property descriptor
|
||||||
if return value is normal
|
* if the operation is successful,
|
||||||
empty completion value */
|
* unmodified otherwise */
|
||||||
{
|
{
|
||||||
/* 1. */
|
/* 1. */
|
||||||
if (!ecma_is_value_object (obj_value))
|
if (!ecma_is_value_object (obj_value))
|
||||||
|
|||||||
@@ -663,7 +663,7 @@ bool jerry_foreach_object_property (const jerry_value_t obj_val, jerry_object_pr
|
|||||||
|
|
||||||
jerry_value_t jerry_object_get_property_names (const jerry_value_t obj_val, jerry_property_filter_t filter);
|
jerry_value_t jerry_object_get_property_names (const jerry_value_t obj_val, jerry_property_filter_t filter);
|
||||||
jerry_value_t jerry_from_property_descriptor (const jerry_property_descriptor_t *src_prop_desc_p);
|
jerry_value_t jerry_from_property_descriptor (const jerry_property_descriptor_t *src_prop_desc_p);
|
||||||
bool jerry_to_property_descriptor (jerry_value_t obj_value, jerry_property_descriptor_t *out_prop_desc_p);
|
jerry_value_t jerry_to_property_descriptor (jerry_value_t obj_value, jerry_property_descriptor_t *out_prop_desc_p);
|
||||||
/**
|
/**
|
||||||
* Promise functions.
|
* Promise functions.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -44,8 +44,9 @@ main (void)
|
|||||||
prop_name = jerry_create_string_from_utf8 ((jerry_char_t *) "configurable");
|
prop_name = jerry_create_string_from_utf8 ((jerry_char_t *) "configurable");
|
||||||
TEST_ASSERT (jerry_set_property (object, prop_name, value));
|
TEST_ASSERT (jerry_set_property (object, prop_name, value));
|
||||||
|
|
||||||
bool result = jerry_to_property_descriptor (object, &prop_desc);
|
jerry_value_t result = jerry_to_property_descriptor (object, &prop_desc);
|
||||||
TEST_ASSERT (result);
|
TEST_ASSERT (jerry_value_is_boolean (result) && jerry_get_boolean_value (result));
|
||||||
|
jerry_release_value (result);
|
||||||
|
|
||||||
prop_name = jerry_create_string_from_utf8 ((jerry_char_t *) "value");
|
prop_name = jerry_create_string_from_utf8 ((jerry_char_t *) "value");
|
||||||
value = jerry_get_property (object, prop_name);
|
value = jerry_get_property (object, prop_name);
|
||||||
@@ -71,6 +72,13 @@ main (void)
|
|||||||
jerry_release_value (prop_name);
|
jerry_release_value (prop_name);
|
||||||
jerry_release_value (value);
|
jerry_release_value (value);
|
||||||
jerry_free_property_descriptor_fields (&prop_desc);
|
jerry_free_property_descriptor_fields (&prop_desc);
|
||||||
|
|
||||||
|
object = jerry_create_null ();
|
||||||
|
result = jerry_to_property_descriptor (object, &prop_desc);
|
||||||
|
TEST_ASSERT (jerry_value_is_error (result));
|
||||||
|
jerry_release_value (result);
|
||||||
|
jerry_release_value (object);
|
||||||
|
|
||||||
jerry_cleanup ();
|
jerry_cleanup ();
|
||||||
return 0;
|
return 0;
|
||||||
} /* main */
|
} /* main */
|
||||||
|
|||||||
Reference in New Issue
Block a user