mirror of
https://github.com/jerryscript-project/jerryscript.git
synced 2025-12-15 16:29:21 +00:00
Introducing ECMA property descriptor (8.10) type and helpers for it: constructor and destructor.
This commit is contained in:
parent
3ee0e8a8a5
commit
b073701da4
@ -189,7 +189,51 @@ typedef enum
|
||||
} ecma_property_configurable_value_t;
|
||||
|
||||
/**
|
||||
* Description of ecma-property.
|
||||
* Description of ECMA property descriptor
|
||||
*
|
||||
* See also: ECMA-262 v5, 8.10.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
/** Is [[Value]] defined? */
|
||||
unsigned int is_value_defined : 1;
|
||||
|
||||
/** Is [[Get]] defined? */
|
||||
unsigned int is_get_defined : 1;
|
||||
|
||||
/** Is [[Set]] defined? */
|
||||
unsigned int is_set_defined : 1;
|
||||
|
||||
/** Is [[Writable]] defined? */
|
||||
unsigned int is_writable_defined : 1;
|
||||
|
||||
/** Is [[Enumerable]] defined? */
|
||||
unsigned int is_enumerable_defined : 1;
|
||||
|
||||
/** Is [[Configurable]] defined? */
|
||||
unsigned int is_configurable_defined : 1;
|
||||
|
||||
/** [[Value]] */
|
||||
ecma_value_t value;
|
||||
|
||||
/** [[Get]] */
|
||||
ecma_value_t get;
|
||||
|
||||
/** [[Set]] */
|
||||
ecma_value_t set;
|
||||
|
||||
/** [[Writable]] */
|
||||
ecma_property_writable_value_t writable;
|
||||
|
||||
/** [[Enumerable]] */
|
||||
ecma_property_enumerable_value_t enumerable;
|
||||
|
||||
/** [[Configurable]] */
|
||||
ecma_property_configurable_value_t configurable;
|
||||
} ecma_property_descriptor_t;
|
||||
|
||||
/**
|
||||
* Description of ecma-property
|
||||
*/
|
||||
typedef struct ecma_property_t {
|
||||
/** Property's type (ecma_property_type_t) */
|
||||
|
||||
@ -700,6 +700,96 @@ ecma_free_array( ecma_array_first_chunk_t *first_chunk_p) /**< first chunk of th
|
||||
}
|
||||
} /* ecma_free_array */
|
||||
|
||||
/**
|
||||
* ECMA property descriptor constructor.
|
||||
*
|
||||
* @return ecma property descriptor
|
||||
*/
|
||||
ecma_property_descriptor_t
|
||||
ecma_make_property_descriptor( bool is_value_defined, /**< is [[Value]] defined */
|
||||
bool is_get_defined, /**< is [[Get]] defined */
|
||||
bool is_set_defined, /**< is [[Set]] defined */
|
||||
bool is_writable_defined, /**< is [[Writable]] defined */
|
||||
bool is_enumerable_defined, /**< is [[Enumerable]] defined */
|
||||
bool is_configurable_defined, /**< is [[Configurable]] defined */
|
||||
ecma_value_t value, /**< [[Value]] */
|
||||
ecma_value_t get, /**< [[Get]] */
|
||||
ecma_value_t set, /**< [[Set]] */
|
||||
ecma_property_writable_value_t writable, /**< [[Writable]] */
|
||||
ecma_property_enumerable_value_t enumerable, /**< [[Enumerable]] */
|
||||
ecma_property_configurable_value_t configurable) /**< [[Configurable]] */
|
||||
{
|
||||
ecma_property_descriptor_t prop_desc;
|
||||
|
||||
prop_desc.is_value_defined = is_value_defined;
|
||||
prop_desc.is_get_defined = is_get_defined;
|
||||
prop_desc.is_set_defined = is_set_defined;
|
||||
prop_desc.is_writable_defined = is_writable_defined;
|
||||
prop_desc.is_enumerable_defined = is_enumerable_defined;
|
||||
prop_desc.is_configurable_defined = is_configurable_defined;
|
||||
|
||||
if ( prop_desc.is_value_defined )
|
||||
{
|
||||
prop_desc.value = value;
|
||||
}
|
||||
|
||||
if ( prop_desc.is_get_defined )
|
||||
{
|
||||
prop_desc.get = get;
|
||||
}
|
||||
|
||||
if ( prop_desc.is_set_defined )
|
||||
{
|
||||
prop_desc.set = set;
|
||||
}
|
||||
|
||||
if ( prop_desc.is_writable_defined )
|
||||
{
|
||||
prop_desc.writable = writable;
|
||||
}
|
||||
|
||||
if ( prop_desc.is_enumerable_defined )
|
||||
{
|
||||
prop_desc.enumerable = enumerable;
|
||||
}
|
||||
|
||||
if ( prop_desc.is_configurable_defined )
|
||||
{
|
||||
prop_desc.configurable = configurable;
|
||||
}
|
||||
|
||||
return prop_desc;
|
||||
} /* ecma_make_property_descriptor */
|
||||
|
||||
/**
|
||||
* Free the ecma property descriptor.
|
||||
*/
|
||||
void
|
||||
ecma_free_property_descriptor( ecma_property_descriptor_t prop_desc) /**< ECMA property descriptor */
|
||||
{
|
||||
if ( prop_desc.is_value_defined )
|
||||
{
|
||||
ecma_free_value( prop_desc.value);
|
||||
}
|
||||
|
||||
if ( prop_desc.is_get_defined )
|
||||
{
|
||||
ecma_free_value( prop_desc.get);
|
||||
}
|
||||
|
||||
if ( prop_desc.is_set_defined )
|
||||
{
|
||||
ecma_free_value( prop_desc.set);
|
||||
}
|
||||
|
||||
prop_desc.is_value_defined = false;
|
||||
prop_desc.is_get_defined = false;
|
||||
prop_desc.is_set_defined = false;
|
||||
prop_desc.is_writable_defined = false;
|
||||
prop_desc.is_enumerable_defined = false;
|
||||
prop_desc.is_configurable_defined = false;
|
||||
} /* ecma_free_property_descriptor */
|
||||
|
||||
/**
|
||||
* @}
|
||||
* @}
|
||||
|
||||
@ -96,6 +96,21 @@ extern bool ecma_compare_zt_string_to_ecma_string( const ecma_char_t *string_p,
|
||||
extern bool ecma_compare_ecma_string_to_ecma_string(const ecma_array_first_chunk_t *string1_p, const ecma_array_first_chunk_t *string2_p);
|
||||
extern void ecma_free_array( ecma_array_first_chunk_t *first_chunk_p);
|
||||
|
||||
extern ecma_property_descriptor_t ecma_make_property_descriptor( bool is_value_defined,
|
||||
bool is_get_defined,
|
||||
bool is_set_defined,
|
||||
bool is_writable_defined,
|
||||
bool is_enumerable_defined,
|
||||
bool is_configurable_defined,
|
||||
ecma_value_t value,
|
||||
ecma_value_t get,
|
||||
ecma_value_t set,
|
||||
ecma_property_writable_value_t writable,
|
||||
ecma_property_enumerable_value_t enumerable,
|
||||
ecma_property_configurable_value_t configurable);
|
||||
|
||||
extern void ecma_free_property_descriptor( ecma_property_descriptor_t prop_desc);
|
||||
|
||||
#endif /* !JERRY_ECMA_HELPERS_H */
|
||||
|
||||
/**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user