diff --git a/docs/02.API-REFERENCE.md b/docs/02.API-REFERENCE.md index ae14d6cb0..275733788 100644 --- a/docs/02.API-REFERENCE.md +++ b/docs/02.API-REFERENCE.md @@ -2943,9 +2943,55 @@ jerry_delete_property (const jerry_value_t obj_val, - [jerry_has_property](#jerry_has_property) - [jerry_has_own_property](#jerry_has_own_property) +- [jerry_delete_property_by_index](#jerry_delete_property_by_index) - [jerry_get_property](#jerry_get_property) +## jerry_delete_property_by_index + +**Summary** + +Delete indexed property from the specified object. + +**Prototype** + +```c +bool +jerry_delete_property_by_index (const jerry_value_t obj_val, + uint32_t index); +``` + +- `obj_val` - object value +- `index` - index number +- return value + - true, if property was deleted successfully + - false, otherwise + +**Example** + +```c +{ + jerry_value_t object; + + ... // create or acquire object + + jerry_delete_property_by_index (object, 5); + + jerry_release_value (object); +} +``` + +**See also** + +- [jerry_has_property](#jerry_has_property) +- [jerry_has_own_property](#jerry_has_own_property) +- [jerry_delete_property](#jerry_delete_property) +- [jerry_get_property](#jerry_get_property) +- [jerry_set_property](#jerry_set_property) +- [jerry_get_property_by_index](#jerry_get_property_by_index) +- [jerry_set_property_by_index](#jerry_set_property_by_index) + + ## jerry_get_property **Summary** @@ -2988,6 +3034,7 @@ jerry_get_property (const jerry_value_t obj_val, - [jerry_has_property](#jerry_has_property) - [jerry_has_own_property](#jerry_has_own_property) - [jerry_delete_property](#jerry_delete_property) +- [jerry_delete_property_by_index](#jerry_delete_property_by_index) - [jerry_set_property](#jerry_set_property) - [jerry_get_property_by_index](#jerry_get_property_by_index) - [jerry_set_property_by_index](#jerry_set_property_by_index) @@ -3038,6 +3085,7 @@ jerry_get_property_by_index (const jerry_value_t obj_val, - [jerry_has_property](#jerry_has_property) - [jerry_has_own_property](#jerry_has_own_property) - [jerry_delete_property](#jerry_delete_property) +- [jerry_delete_property_by_index](#jerry_delete_property_by_index) - [jerry_get_property](#jerry_get_property) - [jerry_set_property](#jerry_set_property) - [jerry_set_property_by_index](#jerry_set_property_by_index) @@ -3098,6 +3146,7 @@ jerry_set_property (const jerry_value_t obj_val, - [jerry_has_property](#jerry_has_property) - [jerry_has_own_property](#jerry_has_own_property) - [jerry_delete_property](#jerry_delete_property) +- [jerry_delete_property_by_index](#jerry_delete_property_by_index) - [jerry_get_property](#jerry_get_property) - [jerry_get_property_by_index](#jerry_get_property_by_index) - [jerry_set_property_by_index](#jerry_set_property_by_index) @@ -3152,6 +3201,7 @@ jerry_set_property_by_index (const jerry_value_t obj_val, - [jerry_has_property](#jerry_has_property) - [jerry_has_own_property](#jerry_has_own_property) - [jerry_delete_property](#jerry_delete_property) +- [jerry_delete_property_by_index](#jerry_delete_property_by_index) - [jerry_get_property](#jerry_get_property) - [jerry_set_property](#jerry_set_property) - [jerry_get_property_by_index](#jerry_get_property_by_index) diff --git a/jerry-core/api/jerry.c b/jerry-core/api/jerry.c index cccfc23cb..7b11f28d8 100644 --- a/jerry-core/api/jerry.c +++ b/jerry-core/api/jerry.c @@ -1474,6 +1474,31 @@ jerry_delete_property (const jerry_value_t obj_val, /**< object value */ return ecma_is_value_true (ret_value); } /* jerry_delete_property */ +/** + * Delete indexed property from the specified object. + * + * @return true - if property was deleted successfully + * false - otherwise + */ +bool +jerry_delete_property_by_index (const jerry_value_t obj_val, /**< object value */ + uint32_t index) /**< index to be written */ +{ + jerry_assert_api_available (); + + if (!ecma_is_value_object (obj_val)) + { + return false; + } + + ecma_string_t str_idx; + ecma_init_ecma_string_from_uint32 (&str_idx, index); + ecma_value_t ret_value = ecma_op_object_delete (ecma_get_object_from_value (obj_val), + &str_idx, + false); + return ecma_is_value_true (ret_value); +} /* jerry_delete_property_by_index */ + /** * Get value of a property to the specified object with the given name. * diff --git a/jerry-core/include/jerryscript-core.h b/jerry-core/include/jerryscript-core.h index b70768a29..ae583896a 100644 --- a/jerry-core/include/jerryscript-core.h +++ b/jerry-core/include/jerryscript-core.h @@ -357,6 +357,7 @@ jerry_value_t jerry_create_undefined (void); jerry_value_t jerry_has_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); jerry_value_t jerry_has_own_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); bool jerry_delete_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); +bool jerry_delete_property_by_index (const jerry_value_t obj_val, uint32_t index); jerry_value_t jerry_get_property (const jerry_value_t obj_val, const jerry_value_t prop_name_val); jerry_value_t jerry_get_property_by_index (const jerry_value_t obj_val, uint32_t index); diff --git a/tests/unit-core/test-api.c b/tests/unit-core/test-api.c index 98721d30a..e94a5571a 100644 --- a/tests/unit-core/test-api.c +++ b/tests/unit-core/test-api.c @@ -896,8 +896,14 @@ main (void) TEST_ASSERT (jerry_value_is_number (v_out) && jerry_get_number_value (v_out) == 10.5); + jerry_delete_property_by_index (array_obj_val, 5); + jerry_value_t v_und = jerry_get_property_by_index (array_obj_val, 5); + + TEST_ASSERT (jerry_value_is_undefined (v_und)); + jerry_release_value (v_in); jerry_release_value (v_out); + jerry_release_value (v_und); jerry_release_value (array_obj_val); /* Test: init property descriptor */