diff options
author | Zoltan Herczeg <zherczeg.u-szeged@partner.samsung.com> | 2018-01-10 15:55:56 +0100 |
---|---|---|
committer | Dániel Bátyai <dbatyai@inf.u-szeged.hu> | 2018-01-10 15:55:56 +0100 |
commit | b9560b7c70f3191f1a06318108afe680c3805ec0 (patch) | |
tree | c731ec37b6ecf29f6d5a8f5ba997c4038711f66a /jerry-core/ecma/builtin-objects/ecma-builtin-object.c | |
parent | f833da2c13d07478e33aed0fc6005e9583896769 (diff) |
Rework ecma collection. (#2153)
Greatly simplify the iterator part and make it compatible with 32 bit cpointers.
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
Diffstat (limited to 'jerry-core/ecma/builtin-objects/ecma-builtin-object.c')
-rw-r--r-- | jerry-core/ecma/builtin-objects/ecma-builtin-object.c | 57 |
1 files changed, 27 insertions, 30 deletions
diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-object.c b/jerry-core/ecma/builtin-objects/ecma-builtin-object.c index 8b57e4de..4a7cb7f9 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-object.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-object.c @@ -315,13 +315,12 @@ ecma_builtin_object_object_seal (ecma_value_t this_arg, /**< 'this' argument */ ecma_collection_header_t *props_p = ecma_op_object_get_property_names (obj_p, false, false, false); - ecma_collection_iterator_t iter; - ecma_collection_iterator_init (&iter, props_p); + ecma_value_t *ecma_value_p = ecma_collection_iterator_init (props_p); - while (ecma_collection_iterator_next (&iter) - && ecma_is_value_empty (ret_value)) + while (ecma_value_p != NULL && ecma_is_value_empty (ret_value)) { - ecma_string_t *property_name_p = ecma_get_string_from_value (*iter.current_value_p); + ecma_string_t *property_name_p = ecma_get_string_from_value (*ecma_value_p); + ecma_value_p = ecma_collection_iterator_next (ecma_value_p); /* 2.a */ ecma_property_descriptor_t prop_desc; @@ -389,14 +388,12 @@ ecma_builtin_object_object_freeze (ecma_value_t this_arg, /**< 'this' argument * ecma_collection_header_t *props_p = ecma_op_object_get_property_names (obj_p, false, false, false); + ecma_value_t *ecma_value_p = ecma_collection_iterator_init (props_p); - ecma_collection_iterator_t iter; - ecma_collection_iterator_init (&iter, props_p); - - while (ecma_collection_iterator_next (&iter) - && ecma_is_value_empty (ret_value)) + while (ecma_value_p != NULL && ecma_is_value_empty (ret_value)) { - ecma_string_t *property_name_p = ecma_get_string_from_value (*iter.current_value_p); + ecma_string_t *property_name_p = ecma_get_string_from_value (*ecma_value_p); + ecma_value_p = ecma_collection_iterator_next (ecma_value_p); /* 2.a */ ecma_property_descriptor_t prop_desc; @@ -513,12 +510,12 @@ ecma_builtin_object_object_is_sealed (ecma_value_t this_arg, /**< 'this' argumen /* 2. */ ecma_collection_header_t *props_p = ecma_op_object_get_property_names (obj_p, false, false, false); - ecma_collection_iterator_t iter; - ecma_collection_iterator_init (&iter, props_p); + ecma_value_t *ecma_value_p = ecma_collection_iterator_init (props_p); - while (ecma_collection_iterator_next (&iter)) + while (ecma_value_p != NULL) { - ecma_string_t *property_name_p = ecma_get_string_from_value (*iter.current_value_p); + ecma_string_t *property_name_p = ecma_get_string_from_value (*ecma_value_p); + ecma_value_p = ecma_collection_iterator_next (ecma_value_p); /* 2.a */ ecma_property_t property = ecma_op_object_get_own_property (obj_p, @@ -583,12 +580,12 @@ ecma_builtin_object_object_is_frozen (ecma_value_t this_arg, /**< 'this' argumen /* 2. */ ecma_collection_header_t *props_p = ecma_op_object_get_property_names (obj_p, false, false, false); - ecma_collection_iterator_t iter; - ecma_collection_iterator_init (&iter, props_p); + ecma_value_t *ecma_value_p = ecma_collection_iterator_init (props_p); - while (ecma_collection_iterator_next (&iter)) + while (ecma_value_p != NULL) { - ecma_string_t *property_name_p = ecma_get_string_from_value (*iter.current_value_p); + ecma_string_t *property_name_p = ecma_get_string_from_value (*ecma_value_p); + ecma_value_p = ecma_collection_iterator_next (ecma_value_p); /* 2.a */ ecma_property_t property = ecma_op_object_get_own_property (obj_p, @@ -829,22 +826,20 @@ ecma_builtin_object_object_define_properties (ecma_value_t this_arg, /**< 'this' ecma_object_t *props_p = ecma_get_object_from_value (props); /* 3. */ ecma_collection_header_t *prop_names_p = ecma_op_object_get_property_names (props_p, false, true, false); - uint32_t property_number = prop_names_p->unit_number; + uint32_t property_number = prop_names_p->item_count; - ecma_collection_iterator_t iter; - ecma_collection_iterator_init (&iter, prop_names_p); + ecma_value_t *ecma_value_p = ecma_collection_iterator_init (prop_names_p); /* 4. */ JMEM_DEFINE_LOCAL_ARRAY (property_descriptors, property_number, ecma_property_descriptor_t); uint32_t property_descriptor_number = 0; - while (ecma_collection_iterator_next (&iter) - && ecma_is_value_empty (ret_value)) + while (ecma_value_p != NULL && ecma_is_value_empty (ret_value)) { /* 5.a */ ECMA_TRY_CATCH (desc_obj, - ecma_op_object_get (props_p, ecma_get_string_from_value (*iter.current_value_p)), + ecma_op_object_get (props_p, ecma_get_string_from_value (*ecma_value_p)), ret_value); /* 5.b */ @@ -857,25 +852,27 @@ ecma_builtin_object_object_define_properties (ecma_value_t this_arg, /**< 'this' ECMA_FINALIZE (conv_result); ECMA_FINALIZE (desc_obj); + + ecma_value_p = ecma_collection_iterator_next (ecma_value_p); } /* 6. */ - ecma_collection_iterator_init (&iter, prop_names_p); + ecma_value_p = ecma_collection_iterator_init (prop_names_p); + for (uint32_t index = 0; index < property_number && ecma_is_value_empty (ret_value); index++) { - bool is_next = ecma_collection_iterator_next (&iter); - JERRY_ASSERT (is_next); - ECMA_TRY_CATCH (define_own_prop_ret, ecma_op_object_define_own_property (obj_p, - ecma_get_string_from_value (*iter.current_value_p), + ecma_get_string_from_value (*ecma_value_p), &property_descriptors[index], true), ret_value); ECMA_FINALIZE (define_own_prop_ret); + + ecma_value_p = ecma_collection_iterator_next (ecma_value_p); } /* Clean up. */ |