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:
Zoltan Herczeg
2021-01-07 11:09:07 +01:00
committed by GitHub
parent cab266f21d
commit 7baaafa405
5 changed files with 39 additions and 38 deletions
+9 -6
View File
@@ -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
View File
@@ -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 */
/** /**
+3 -4
View File
@@ -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))
+1 -1
View File
@@ -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.
*/ */
+10 -2
View File
@@ -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 */