Implement from and to property descriptor API function (#4245)

Also added two new helper method:
ecma_property_descriptor -> jerry_property_descriptor converter method
jerry_property_descriptor -> ecma_property_descriptor converter method

JerryScript-DCO-1.0-Signed-off-by: bence gabor kis kisbg@inf.u-szeged.hu
This commit is contained in:
kisbg
2020-11-03 14:27:26 +01:00
committed by GitHub
parent d0e385f9eb
commit b2084e0a02
5 changed files with 463 additions and 76 deletions
+100
View File
@@ -3911,6 +3911,106 @@ example (void)
- [jerry_create_promise](#jerry_create_promise)
- [jerry_promise_state_t](#jerry_promise_state_t)
## jerry_from_property_descriptor
**Summary**
This API function is equivalent to FromPropertyDescriptor operation defined in ECMA 262 v11 6.2.5.4.
It returns with an ECMAScript Object which represents the property attributes.
*Notes*:
- Returned value must be freed with [jerry_release_value](#jerry_release_value) when it
is no longer needed.
**Prototype**
```c
jerry_value_t
jerry_from_property_descriptor (const jerry_property_descriptor_t *src_prop_desc_p)
```
- `src_prop_desc_p` - the input property descriptor.
- return
- [jerry_value_t](#jerry_value_t)
- jerry value - if success
- value marked with error flag - otherwise
**Example**
[doctest]: # (test="compile")
```c
#include <jerryscript.h>
static void
example (void)
{
jerry_value_t prop_name = jerry_create_string_from_utf8 ((jerry_char_t *) "value");
jerry_property_descriptor_t prop_desc;
jerry_init_property_descriptor_fields (&prop_desc);
prop_desc.value = prop_name;
prop_desc.is_value_defined = true;
jerry_value_t from_object = jerry_from_property_descriptor (&prop_desc);
jerry_release_value (prop_name);
jerry_release_value (from_object);
jerry_free_property_descriptor_fields (&prop_desc);
}
```
## jerry_to_property_descriptor
**Summary**
This API function is equivalent to ToPropertyDescriptor operation defined in ECMA 262 v11 6.2.5.5.
It decodes the ECMAScript object and fills the fields of a JerryScript property descriptor.
*Notes*:
- The es.next profile enables this by default.
**Prototype**
```c
bool
jerry_to_property_descriptor (jerry_value_t obj_value, jerry_property_descriptor_t *out_prop_desc_p);
```
- `obj_value` - the input object
- `src_prop_desc_p` - the output property descriptor.
- return
- [jerry_value_t](#jerry_value_t)
- true - if success
- false - if error occurs
**Example**
[doctest]: # (test="compile")
```c
#include <jerryscript.h>
static void
example (void)
{
jerry_value_t object = jerry_create_object ();
jerry_value_t prop_name = jerry_create_string_from_utf8 ((jerry_char_t *) "value");
jerry_value_t value = jerry_create_boolean (true);
jerry_property_descriptor_t prop_desc;
jerry_set_property (object, prop_name, prop_name);
jerry_to_property_descriptor (object, &prop_desc);
jerry_release_value (object);
jerry_release_value (prop_name);
jerry_release_value (value);
jerry_free_property_descriptor_fields (&prop_desc);
}
```
## jerry_resolve_or_reject_promise
**Summary**