Refactor jerry_property_descriptor_t to use status flags (#4594)
JerryScript-DCO-1.0-Signed-off-by: Peter Marki marpeter@inf.u-szeged.hu
This commit is contained in:
+74
-67
@@ -484,6 +484,28 @@ Enum that contains the supported binary operation types
|
||||
|
||||
- [jerry_binary_operation](#jerry_binary_operation)
|
||||
|
||||
## jerry_property_descriptor_flags_t
|
||||
|
||||
Enum that contains the flags of property descriptors.
|
||||
|
||||
- JERRY_PROP_NO_OPTS - empty property descriptor
|
||||
- JERRY_PROP_IS_GET_DEFINED - Is [[Get]] defined?
|
||||
- JERRY_PROP_IS_SET_DEFINED - Is [[Set]] defined?
|
||||
- JERRY_PROP_IS_CONFIGURABLE - [[Configurable]]
|
||||
- JERRY_PROP_IS_ENUMERABLE - [[Enumerable]]
|
||||
- JERRY_PROP_IS_WRITABLE - [[Writable]]
|
||||
- JERRY_PROP_IS_THROW - Flag that controls failure handling
|
||||
- JERRY_PROP_IS_VALUE_DEFINED - Is [[Value]] defined?
|
||||
- JERRY_PROP_IS_CONFIGURABLE_DEFINED - Is [[Configurable]] defined?
|
||||
- JERRY_PROP_IS_ENUMERABLE_DEFINED - Is [[Enumerable]] defined?
|
||||
- JERRY_PROP_IS_WRITABLE_DEFINED - Is [[Writable]] defined?
|
||||
|
||||
*New in version [[NEXT_RELEASE]]*.
|
||||
|
||||
**See also**
|
||||
|
||||
- [jerry_property_descriptor_t](#jerry_property_descriptor_t)
|
||||
|
||||
## jerry_property_descriptor_t
|
||||
|
||||
**Summary**
|
||||
@@ -502,32 +524,8 @@ the `value` field should contain the value for the property.
|
||||
```c
|
||||
typedef struct
|
||||
{
|
||||
/** Is [[Value]] defined? */
|
||||
bool is_value_defined;
|
||||
|
||||
/** Is [[Get]] defined? */
|
||||
bool is_get_defined;
|
||||
|
||||
/** Is [[Set]] defined? */
|
||||
bool is_set_defined;
|
||||
|
||||
/** Is [[Writable]] defined? */
|
||||
bool is_writable_defined;
|
||||
|
||||
/** [[Writable]] */
|
||||
bool is_writable;
|
||||
|
||||
/** Is [[Enumerable]] defined? */
|
||||
bool is_enumerable_defined;
|
||||
|
||||
/** [[Enumerable]] */
|
||||
bool is_enumerable;
|
||||
|
||||
/** Is [[Configurable]] defined? */
|
||||
bool is_configurable_defined;
|
||||
|
||||
/** [[Configurable]] */
|
||||
bool is_configurable;
|
||||
/** any combination of jerry_property_descriptor_flags_t bits */
|
||||
uint16_t flags;
|
||||
|
||||
/** [[Value]] */
|
||||
jerry_value_t value;
|
||||
@@ -542,6 +540,7 @@ typedef struct
|
||||
|
||||
**See also**
|
||||
|
||||
- [jerry_property_descriptor_flags_t](#jerry_property_descriptor_flags_t)
|
||||
- [jerry_define_own_property](#jerry_define_own_property)
|
||||
|
||||
## jerry_backtrace_location_t
|
||||
@@ -4461,17 +4460,16 @@ 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);
|
||||
jerry_property_descriptor_t prop_desc = jerry_property_descriptor_create ();
|
||||
|
||||
prop_desc.value = prop_name;
|
||||
prop_desc.is_value_defined = true;
|
||||
prop_desc.flags |= JERRY_PROP_IS_VALUE_DEFINED;
|
||||
|
||||
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_property_descriptor_free (&prop_desc);
|
||||
}
|
||||
```
|
||||
|
||||
@@ -4524,7 +4522,7 @@ example (void)
|
||||
jerry_release_value (object);
|
||||
jerry_release_value (prop_name);
|
||||
jerry_release_value (value);
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
}
|
||||
```
|
||||
|
||||
@@ -7308,32 +7306,31 @@ main (void)
|
||||
- [jerry_get_internal_property](#jerry_get_internal_property)
|
||||
|
||||
|
||||
## jerry_init_property_descriptor_fields
|
||||
## jerry_property_descriptor_create
|
||||
|
||||
**Summary**
|
||||
|
||||
Initialize property descriptor. This means that all fields in the `jerry_property_descriptor_t`
|
||||
struct will be set to zero or false depending on the field's type.
|
||||
Create a property descriptor and initialize it with default values. This means that all fields in
|
||||
the `jerry_property_descriptor_t` struct will be set to zero or false depending on the field's type.
|
||||
|
||||
**Prototype**
|
||||
|
||||
```c
|
||||
void
|
||||
jerry_init_property_descriptor_fields (jerry_property_descriptor_t *prop_desc_p);
|
||||
jerry_property_descriptor_t
|
||||
jerry_property_descriptor_create (void);
|
||||
```
|
||||
|
||||
- `prop_desc_p` - pointer to property descriptor
|
||||
*New in version [[NEXT_RELEASE]]*: Replaces `jerry_init_property_descriptor_fields`.
|
||||
|
||||
**Example**
|
||||
|
||||
```c
|
||||
{
|
||||
jerry_property_descriptor_t prop_desc;
|
||||
jerry_init_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_t prop_desc = jerry_property_descriptor_create ();
|
||||
|
||||
... // usage of prop_desc
|
||||
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
}
|
||||
```
|
||||
|
||||
@@ -7344,7 +7341,7 @@ For a more complete example see [jerry_define_own_property](#jerry_define_own_pr
|
||||
- [jerry_property_descriptor_t](#jerry_property_descriptor_t)
|
||||
- [jerry_define_own_property](#jerry_define_own_property)
|
||||
- [jerry_get_own_property_descriptor](#jerry_get_own_property_descriptor)
|
||||
- [jerry_free_property_descriptor_fields](#jerry_free_property_descriptor_fields)
|
||||
- [jerry_property_descriptor_free](#jerry_property_descriptor_free)
|
||||
|
||||
|
||||
## jerry_define_own_property
|
||||
@@ -7389,19 +7386,23 @@ main (void)
|
||||
jerry_value_t global_obj_val = jerry_get_global_object ();
|
||||
|
||||
// configure the property
|
||||
jerry_property_descriptor_t prop_desc;
|
||||
jerry_init_property_descriptor_fields (&prop_desc);
|
||||
|
||||
jerry_value_t value_to_set;
|
||||
jerry_property_descriptor_t prop_desc = jerry_property_descriptor_create ();
|
||||
|
||||
// create or acquire value to set
|
||||
// For example:
|
||||
value_to_set = jerry_create_number (33);
|
||||
jerry_value_t value_to_set = jerry_create_number (33);
|
||||
|
||||
// set the property descriptor fields:
|
||||
// set the "is_value_defined" field to "true" to indicate the "value"
|
||||
// set the "JERRY_PROP_IS_VALUE_DEFINED" flag to indicate the "value"
|
||||
// field should be used during the property registration.
|
||||
prop_desc.is_value_defined = true;
|
||||
// set the writable, configurable, enumerable flags to true
|
||||
prop_desc.flags |= (JERRY_PROP_IS_WRITABLE_DEFINED
|
||||
| JERRY_PROP_IS_WRITABLE
|
||||
| JERRY_PROP_IS_CONFIGURABLE_DEFINED
|
||||
| JERRY_PROP_IS_CONFIGURABLE
|
||||
| JERRY_PROP_IS_ENUMERABLE_DEFINED
|
||||
| JERRY_PROP_IS_ENUMERABLE
|
||||
| JERRY_PROP_IS_VALUE_DEFINED);
|
||||
|
||||
// set the "value" field to the number 33
|
||||
prop_desc.value = value_to_set;
|
||||
@@ -7414,12 +7415,20 @@ main (void)
|
||||
// there was an error
|
||||
}
|
||||
|
||||
// re-define the property with the enumerable flag set to false
|
||||
prop_desc.flags &= (uint16_t) ~JERRY_PROP_IS_ENUMERABLE;
|
||||
return_value = jerry_define_own_property (global_obj_val, prop_name, &prop_desc);
|
||||
if (jerry_value_is_error (return_value))
|
||||
{
|
||||
// there was an error
|
||||
}
|
||||
|
||||
// if there was no error at this point the global object should have a "my_prop" property
|
||||
|
||||
jerry_release_value (return_value);
|
||||
jerry_release_value (prop_name);
|
||||
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
jerry_release_value (global_obj_val);
|
||||
|
||||
jerry_cleanup ();
|
||||
@@ -7474,14 +7483,12 @@ main (void)
|
||||
jerry_value_t global_obj_val = jerry_get_global_object ();
|
||||
|
||||
// configure the property
|
||||
jerry_property_descriptor_t prop_desc;
|
||||
jerry_init_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_t prop_desc = jerry_property_descriptor_create ();
|
||||
|
||||
// set the property descriptor fields:
|
||||
|
||||
prop_desc.is_get_defined = true;
|
||||
prop_desc.flags |= JERRY_PROP_IS_GET_DEFINED | JERRY_PROP_IS_SET_DEFINED;
|
||||
prop_desc.getter = jerry_create_external_function (method_getter);
|
||||
prop_desc.is_set_defined = true;
|
||||
prop_desc.setter = jerry_create_external_function (method_setter);
|
||||
|
||||
// add the property as "my_prop" for the global object
|
||||
@@ -7497,7 +7504,7 @@ main (void)
|
||||
jerry_release_value (return_value);
|
||||
jerry_release_value (prop_name);
|
||||
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
jerry_release_value (global_obj_val);
|
||||
|
||||
// run an example js code to use the getter/setters
|
||||
@@ -7518,9 +7525,9 @@ main (void)
|
||||
**See also**
|
||||
|
||||
- [jerry_property_descriptor_t](#jerry_property_descriptor_t)
|
||||
- [jerry_init_property_descriptor_fields](#jerry_init_property_descriptor_fields)
|
||||
- [jerry_property_descriptor_create](#jerry_property_descriptor_create)
|
||||
- [jerry_get_own_property_descriptor](#jerry_get_own_property_descriptor)
|
||||
- [jerry_free_property_descriptor_fields](#jerry_free_property_descriptor_fields)
|
||||
- [jerry_property_descriptor_free](#jerry_property_descriptor_free)
|
||||
|
||||
|
||||
## jerry_get_own_property_descriptor
|
||||
@@ -7549,8 +7556,7 @@ jerry_get_own_property_descriptor (const jerry_value_t obj_val,
|
||||
{
|
||||
jerry_value_t global_obj_val = jerry_get_global_object ();
|
||||
|
||||
jerry_property_descriptor_t prop_desc;
|
||||
jerry_init_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_t prop_desc = jerry_property_descriptor_create ();
|
||||
|
||||
jerry_value_t prop_name = jerry_create_string ((const jerry_char_t *) "my_prop");
|
||||
jerry_get_own_property_descriptor (global_obj_val, prop_name, &prop_desc);
|
||||
@@ -7558,7 +7564,7 @@ jerry_get_own_property_descriptor (const jerry_value_t obj_val,
|
||||
|
||||
... // usage of property descriptor
|
||||
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
jerry_release_value (global_obj_val);
|
||||
}
|
||||
```
|
||||
@@ -7566,12 +7572,12 @@ jerry_get_own_property_descriptor (const jerry_value_t obj_val,
|
||||
**See also**
|
||||
|
||||
- [jerry_property_descriptor_t](#jerry_property_descriptor_t)
|
||||
- [jerry_init_property_descriptor_fields](#jerry_init_property_descriptor_fields)
|
||||
- [jerry_property_descriptor_create](#jerry_property_descriptor_create)
|
||||
- [jerry_define_own_property](#jerry_define_own_property)
|
||||
- [jerry_free_property_descriptor_fields](#jerry_free_property_descriptor_fields)
|
||||
- [jerry_property_descriptor_free](#jerry_property_descriptor_free)
|
||||
|
||||
|
||||
## jerry_free_property_descriptor_fields
|
||||
## jerry_property_descriptor_free
|
||||
|
||||
**Summary**
|
||||
|
||||
@@ -7581,27 +7587,28 @@ Free fields of property descriptor (setter, getter and value).
|
||||
|
||||
```c
|
||||
void
|
||||
jerry_free_property_descriptor_fields (const jerry_property_descriptor_t *prop_desc_p);
|
||||
jerry_property_descriptor_free (const jerry_property_descriptor_t *prop_desc_p);
|
||||
```
|
||||
|
||||
- `prop_desc_p` - pointer to property descriptor
|
||||
|
||||
*New in version [[NEXT_RELEASE]]*: Replaces `jerry_free_property_descriptor_fields`.
|
||||
|
||||
**Example**
|
||||
|
||||
```c
|
||||
{
|
||||
jerry_property_descriptor_t prop_desc;
|
||||
jerry_init_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_t prop_desc = jerry_property_descriptor_create ();
|
||||
|
||||
... // usage of property descriptor
|
||||
|
||||
jerry_free_property_descriptor_fields (&prop_desc);
|
||||
jerry_property_descriptor_free (&prop_desc);
|
||||
}
|
||||
```
|
||||
|
||||
**See also**
|
||||
|
||||
- [jerry_init_property_descriptor_fields](#jerry_init_property_descriptor_fields)
|
||||
- [jerry_property_descriptor_create](#jerry_property_descriptor_create)
|
||||
- [jerry_define_own_property](#jerry_define_own_property)
|
||||
- [jerry_get_own_property_descriptor](#jerry_get_own_property_descriptor)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user