Introducing constructor for ecma_property_descriptor_t.
This commit is contained in:
@@ -742,6 +742,38 @@ ecma_free_array( ecma_array_first_chunk_t *first_chunk_p) /**< first chunk of th
|
|||||||
}
|
}
|
||||||
} /* ecma_free_array */
|
} /* ecma_free_array */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct empty property descriptor.
|
||||||
|
*
|
||||||
|
* @return property descriptor with all *_defined properties set to false,
|
||||||
|
* and rest properties set to default values (ECMA-262 v5, Table 7).
|
||||||
|
*/
|
||||||
|
ecma_property_descriptor_t
|
||||||
|
ecma_make_empty_property_descriptor( void)
|
||||||
|
{
|
||||||
|
ecma_property_descriptor_t prop_desc = (ecma_property_descriptor_t) {
|
||||||
|
.is_value_defined = false,
|
||||||
|
.value = ecma_make_simple_value( ECMA_SIMPLE_VALUE_UNDEFINED),
|
||||||
|
|
||||||
|
.is_writable_defined = false,
|
||||||
|
.writable = ECMA_PROPERTY_NOT_WRITABLE,
|
||||||
|
|
||||||
|
.is_enumerable_defined = false,
|
||||||
|
.enumerable = ECMA_PROPERTY_NOT_ENUMERABLE,
|
||||||
|
|
||||||
|
.is_configurable_defined = false,
|
||||||
|
.configurable = ECMA_PROPERTY_NOT_CONFIGURABLE,
|
||||||
|
|
||||||
|
.is_get_defined = false,
|
||||||
|
.get_p = NULL,
|
||||||
|
|
||||||
|
.is_set_defined = false,
|
||||||
|
.set_p = NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
return prop_desc;
|
||||||
|
} /* ecma_make_empty_property_descriptor */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
* @}
|
* @}
|
||||||
|
|||||||
@@ -69,10 +69,10 @@ extern bool ecma_is_completion_value_normal_true( ecma_completion_value_t value)
|
|||||||
extern bool ecma_is_completion_value_normal_false( ecma_completion_value_t value);
|
extern bool ecma_is_completion_value_normal_false( ecma_completion_value_t value);
|
||||||
extern bool ecma_is_empty_completion_value( ecma_completion_value_t value);
|
extern bool ecma_is_empty_completion_value( ecma_completion_value_t value);
|
||||||
|
|
||||||
|
/* ecma-helpers.c */
|
||||||
extern ecma_object_t* ecma_create_object( ecma_object_t *prototype_object_p, bool is_extensible, ecma_object_type_t type);
|
extern ecma_object_t* ecma_create_object( ecma_object_t *prototype_object_p, bool is_extensible, ecma_object_type_t type);
|
||||||
extern ecma_object_t* ecma_create_lexical_environment( ecma_object_t *outer_lexical_environment_p, ecma_lexical_environment_type_t type);
|
extern ecma_object_t* ecma_create_lexical_environment( ecma_object_t *outer_lexical_environment_p, ecma_lexical_environment_type_t type);
|
||||||
|
|
||||||
/* ecma-helpers.c */
|
|
||||||
extern ecma_property_t* ecma_create_internal_property(ecma_object_t *object_p, ecma_internal_property_id_t property_id);
|
extern ecma_property_t* ecma_create_internal_property(ecma_object_t *object_p, ecma_internal_property_id_t property_id);
|
||||||
extern ecma_property_t* ecma_find_internal_property(ecma_object_t *object_p, ecma_internal_property_id_t property_id);
|
extern ecma_property_t* ecma_find_internal_property(ecma_object_t *object_p, ecma_internal_property_id_t property_id);
|
||||||
extern ecma_property_t* ecma_get_internal_property(ecma_object_t *object_p, ecma_internal_property_id_t property_id);
|
extern ecma_property_t* ecma_get_internal_property(ecma_object_t *object_p, ecma_internal_property_id_t property_id);
|
||||||
@@ -97,6 +97,8 @@ 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 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 void ecma_free_array( ecma_array_first_chunk_t *first_chunk_p);
|
||||||
|
|
||||||
|
extern ecma_property_descriptor_t ecma_make_empty_property_descriptor( void);
|
||||||
|
|
||||||
#endif /* !JERRY_ECMA_HELPERS_H */
|
#endif /* !JERRY_ECMA_HELPERS_H */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -153,25 +153,21 @@ ecma_op_create_function_object( const ecma_char_t* formal_parameter_list_p[], /*
|
|||||||
// 17.
|
// 17.
|
||||||
ecma_ref_object( f);
|
ecma_ref_object( f);
|
||||||
|
|
||||||
ecma_property_descriptor_t prop_desc = (ecma_property_descriptor_t) {
|
ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor();
|
||||||
.is_value_defined = true,
|
{
|
||||||
.value = ecma_make_object_value( f),
|
prop_desc.is_value_defined = true;
|
||||||
|
prop_desc.value = ecma_make_object_value( f);
|
||||||
|
|
||||||
.is_writable_defined = true,
|
prop_desc.is_writable_defined = true;
|
||||||
.writable = ECMA_PROPERTY_WRITABLE,
|
prop_desc.writable = ECMA_PROPERTY_WRITABLE;
|
||||||
|
|
||||||
.is_enumerable_defined = true,
|
prop_desc.is_enumerable_defined = true;
|
||||||
.enumerable = ECMA_PROPERTY_NOT_ENUMERABLE,
|
prop_desc.enumerable = ECMA_PROPERTY_NOT_ENUMERABLE;
|
||||||
|
|
||||||
.is_configurable_defined = true,
|
prop_desc.is_configurable_defined = true;
|
||||||
.configurable = ECMA_PROPERTY_CONFIGURABLE,
|
prop_desc.configurable = ECMA_PROPERTY_CONFIGURABLE;
|
||||||
|
}
|
||||||
|
|
||||||
.is_get_defined = false,
|
|
||||||
.get_p = NULL,
|
|
||||||
|
|
||||||
.is_set_defined = false,
|
|
||||||
.set_p = NULL
|
|
||||||
};
|
|
||||||
ecma_op_object_define_own_property( proto_p,
|
ecma_op_object_define_own_property( proto_p,
|
||||||
ecma_get_magic_string( ECMA_MAGIC_STRING_CONSTRUCTOR),
|
ecma_get_magic_string( ECMA_MAGIC_STRING_CONSTRUCTOR),
|
||||||
prop_desc,
|
prop_desc,
|
||||||
@@ -194,25 +190,20 @@ ecma_op_create_function_object( const ecma_char_t* formal_parameter_list_p[], /*
|
|||||||
{
|
{
|
||||||
ecma_object_t *thrower_p = ecma_op_get_throw_type_error();
|
ecma_object_t *thrower_p = ecma_op_get_throw_type_error();
|
||||||
|
|
||||||
prop_desc = (ecma_property_descriptor_t) {
|
prop_desc = ecma_make_empty_property_descriptor();
|
||||||
.is_value_defined = false,
|
{
|
||||||
.value = ecma_make_simple_value( ECMA_SIMPLE_VALUE_UNDEFINED),
|
prop_desc.is_enumerable_defined = true;
|
||||||
|
prop_desc.enumerable = ECMA_PROPERTY_NOT_ENUMERABLE;
|
||||||
|
|
||||||
.is_writable_defined = false,
|
prop_desc.is_configurable_defined = true;
|
||||||
.writable = ECMA_PROPERTY_NOT_WRITABLE,
|
prop_desc.configurable = ECMA_PROPERTY_NOT_CONFIGURABLE;
|
||||||
|
|
||||||
.is_enumerable_defined = true,
|
prop_desc.is_get_defined = true;
|
||||||
.enumerable = ECMA_PROPERTY_NOT_ENUMERABLE,
|
prop_desc.get_p = thrower_p;
|
||||||
|
|
||||||
.is_configurable_defined = true,
|
prop_desc.is_set_defined = true;
|
||||||
.configurable = ECMA_PROPERTY_NOT_CONFIGURABLE,
|
prop_desc.set_p = thrower_p;
|
||||||
|
}
|
||||||
.is_get_defined = true,
|
|
||||||
.get_p = thrower_p,
|
|
||||||
|
|
||||||
.is_set_defined = true,
|
|
||||||
.set_p = thrower_p
|
|
||||||
};
|
|
||||||
|
|
||||||
ecma_op_object_define_own_property( f,
|
ecma_op_object_define_own_property( f,
|
||||||
ecma_get_magic_string( ECMA_MAGIC_STRING_CALLER),
|
ecma_get_magic_string( ECMA_MAGIC_STRING_CALLER),
|
||||||
|
|||||||
@@ -196,25 +196,11 @@ ecma_op_object_put( ecma_object_t *obj_p, /**< the object */
|
|||||||
if ( own_desc_p->type == ECMA_PROPERTY_NAMEDDATA )
|
if ( own_desc_p->type == ECMA_PROPERTY_NAMEDDATA )
|
||||||
{
|
{
|
||||||
// a.
|
// a.
|
||||||
ecma_property_descriptor_t value_desc = (ecma_property_descriptor_t) {
|
ecma_property_descriptor_t value_desc = ecma_make_empty_property_descriptor();
|
||||||
.is_value_defined = true,
|
{
|
||||||
.value = value,
|
value_desc.is_value_defined = true;
|
||||||
|
value_desc.value = value;
|
||||||
.is_get_defined = false,
|
}
|
||||||
.get_p = NULL,
|
|
||||||
|
|
||||||
.is_set_defined = false,
|
|
||||||
.set_p = NULL,
|
|
||||||
|
|
||||||
.is_writable_defined = false,
|
|
||||||
.writable = ECMA_PROPERTY_NOT_WRITABLE,
|
|
||||||
|
|
||||||
.is_enumerable_defined = false,
|
|
||||||
.enumerable = ECMA_PROPERTY_NOT_ENUMERABLE,
|
|
||||||
|
|
||||||
.is_configurable_defined = false,
|
|
||||||
.configurable = ECMA_PROPERTY_NOT_CONFIGURABLE,
|
|
||||||
};
|
|
||||||
|
|
||||||
// b., c.
|
// b., c.
|
||||||
return ecma_op_object_define_own_property( obj_p,
|
return ecma_op_object_define_own_property( obj_p,
|
||||||
@@ -245,26 +231,21 @@ ecma_op_object_put( ecma_object_t *obj_p, /**< the object */
|
|||||||
// 6.
|
// 6.
|
||||||
|
|
||||||
// a.
|
// a.
|
||||||
ecma_property_descriptor_t new_desc = (ecma_property_descriptor_t) {
|
ecma_property_descriptor_t new_desc = ecma_make_empty_property_descriptor();
|
||||||
.is_value_defined = true,
|
{
|
||||||
.value = value,
|
new_desc.is_value_defined = true;
|
||||||
|
new_desc.value = value;
|
||||||
|
|
||||||
.is_get_defined = false,
|
new_desc.is_writable_defined = true;
|
||||||
.get_p = NULL,
|
new_desc.writable = ECMA_PROPERTY_WRITABLE;
|
||||||
|
|
||||||
.is_set_defined = false,
|
new_desc.is_enumerable_defined = true;
|
||||||
.set_p = NULL,
|
new_desc.enumerable = ECMA_PROPERTY_ENUMERABLE;
|
||||||
|
|
||||||
.is_writable_defined = true,
|
new_desc.is_configurable_defined = true;
|
||||||
.writable = ECMA_PROPERTY_WRITABLE,
|
new_desc.configurable = ECMA_PROPERTY_CONFIGURABLE;
|
||||||
|
}
|
||||||
|
|
||||||
.is_enumerable_defined = true,
|
|
||||||
.enumerable = ECMA_PROPERTY_ENUMERABLE,
|
|
||||||
|
|
||||||
.is_configurable_defined = true,
|
|
||||||
.configurable = ECMA_PROPERTY_CONFIGURABLE
|
|
||||||
};
|
|
||||||
|
|
||||||
// b.
|
// b.
|
||||||
return ecma_op_object_define_own_property( obj_p,
|
return ecma_op_object_define_own_property( obj_p,
|
||||||
property_name_p,
|
property_name_p,
|
||||||
|
|||||||
Reference in New Issue
Block a user