|
16 | 16 |
|
17 | 17 | #include "ecma-alloc.h" |
18 | 18 | #include "ecma-array-object.h" |
| 19 | +#include "ecma-builtin-helpers.h" |
19 | 20 | #include "ecma-builtins.h" |
20 | 21 | #include "ecma-conversion.h" |
21 | 22 | #include "ecma-exceptions.h" |
@@ -142,70 +143,8 @@ ecma_builtin_object_object_get_own_property_names (ecma_value_t this_arg __attr_ |
142 | 143 | else |
143 | 144 | { |
144 | 145 | ecma_object_t *obj_p = ecma_get_object_from_value (arg); |
145 | | - |
146 | | - /* 2. */ |
147 | | - ecma_completion_value_t new_array = ecma_op_create_array_object (NULL, 0, false); |
148 | | - ecma_object_t *new_array_p = ecma_get_object_from_completion_value (new_array); |
149 | | - |
150 | | - /* 3. */ |
151 | | - uint32_t n = 0; |
152 | | - |
153 | | - /* 4. */ |
154 | | - for (ecma_property_t *property_p = ecma_get_property_list (obj_p); |
155 | | - property_p != NULL; |
156 | | - property_p = ECMA_GET_POINTER (ecma_property_t, property_p->next_property_p), n++) |
157 | | - { |
158 | | - ecma_string_t *property_name_p; |
159 | | - |
160 | | - /* 4.a. */ |
161 | | - if (property_p->type == ECMA_PROPERTY_NAMEDDATA) |
162 | | - { |
163 | | - property_name_p = ECMA_GET_NON_NULL_POINTER (ecma_string_t, |
164 | | - property_p->u.named_data_property.name_p); |
165 | | - } |
166 | | - else if (property_p->type == ECMA_PROPERTY_NAMEDACCESSOR) |
167 | | - { |
168 | | - property_name_p = ECMA_GET_NON_NULL_POINTER (ecma_string_t, |
169 | | - property_p->u.named_accessor_property.name_p); |
170 | | - } |
171 | | - else |
172 | | - { |
173 | | - continue; |
174 | | - } |
175 | | - |
176 | | - JERRY_ASSERT (property_name_p != NULL); |
177 | | - |
178 | | - /* 4.b */ |
179 | | - ecma_string_t *index_string_p = ecma_new_ecma_string_from_uint32 (n); |
180 | | - |
181 | | - ecma_property_descriptor_t item_prop_desc = ecma_make_empty_property_descriptor (); |
182 | | - { |
183 | | - item_prop_desc.is_value_defined = true; |
184 | | - item_prop_desc.value = ecma_make_string_value (property_name_p); |
185 | | - |
186 | | - item_prop_desc.is_writable_defined = true; |
187 | | - item_prop_desc.is_writable = true; |
188 | | - |
189 | | - item_prop_desc.is_enumerable_defined = true; |
190 | | - item_prop_desc.is_enumerable = true; |
191 | | - |
192 | | - item_prop_desc.is_configurable_defined = true; |
193 | | - item_prop_desc.is_configurable = true; |
194 | | - } |
195 | | - |
196 | | - ecma_completion_value_t completion = ecma_op_object_define_own_property (new_array_p, |
197 | | - index_string_p, |
198 | | - &item_prop_desc, |
199 | | - false); |
200 | | - |
201 | | - JERRY_ASSERT (ecma_is_completion_value_normal_true (completion) |
202 | | - || ecma_is_completion_value_normal_false (completion)); |
203 | | - |
204 | | - ecma_deref_ecma_string (index_string_p); |
205 | | - } |
206 | | - |
207 | | - /* 5. */ |
208 | | - ret_value = new_array; |
| 146 | + /* 2-5. */ |
| 147 | + ret_value = ecma_builtin_helper_object_get_properties (obj_p, false); |
209 | 148 | } |
210 | 149 |
|
211 | 150 | return ret_value; |
@@ -330,71 +269,8 @@ ecma_builtin_object_object_keys (ecma_value_t this_arg __attr_unused___, /**< 't |
330 | 269 | else |
331 | 270 | { |
332 | 271 | ecma_object_t *obj_p = ecma_get_object_from_value (arg); |
333 | | - |
334 | | - /* 2. */ |
335 | | - ecma_completion_value_t new_array = ecma_op_create_array_object (NULL, 0, false); |
336 | | - ecma_object_t *new_array_p = ecma_get_object_from_completion_value (new_array); |
337 | | - |
338 | | - /* 4. */ |
339 | | - uint32_t index = 0; |
340 | | - |
341 | | - /* 5. */ |
342 | | - for (ecma_property_t *property_p = ecma_get_property_list (obj_p); |
343 | | - property_p != NULL; |
344 | | - property_p = ECMA_GET_POINTER (ecma_property_t, property_p->next_property_p), index++) |
345 | | - { |
346 | | - if (property_p->type == ECMA_PROPERTY_INTERNAL |
347 | | - || !ecma_is_property_enumerable (property_p)) |
348 | | - { |
349 | | - continue; |
350 | | - } |
351 | | - |
352 | | - ecma_string_t *property_name_p; |
353 | | - |
354 | | - if (property_p->type == ECMA_PROPERTY_NAMEDDATA) |
355 | | - { |
356 | | - property_name_p = ECMA_GET_NON_NULL_POINTER (ecma_string_t, |
357 | | - property_p->u.named_data_property.name_p); |
358 | | - } |
359 | | - else if (property_p->type == ECMA_PROPERTY_NAMEDACCESSOR) |
360 | | - { |
361 | | - property_name_p = ECMA_GET_NON_NULL_POINTER (ecma_string_t, |
362 | | - property_p->u.named_accessor_property.name_p); |
363 | | - } |
364 | | - |
365 | | - JERRY_ASSERT (property_name_p != NULL); |
366 | | - |
367 | | - /* 5.a */ |
368 | | - ecma_string_t *index_string_p = ecma_new_ecma_string_from_uint32 (index); |
369 | | - |
370 | | - ecma_property_descriptor_t item_prop_desc = ecma_make_empty_property_descriptor (); |
371 | | - { |
372 | | - item_prop_desc.is_value_defined = true; |
373 | | - item_prop_desc.value = ecma_make_string_value (property_name_p); |
374 | | - |
375 | | - item_prop_desc.is_writable_defined = true; |
376 | | - item_prop_desc.is_writable = true; |
377 | | - |
378 | | - item_prop_desc.is_enumerable_defined = true; |
379 | | - item_prop_desc.is_enumerable = true; |
380 | | - |
381 | | - item_prop_desc.is_configurable_defined = true; |
382 | | - item_prop_desc.is_configurable = true; |
383 | | - } |
384 | | - |
385 | | - ecma_completion_value_t completion = ecma_op_object_define_own_property (new_array_p, |
386 | | - index_string_p, |
387 | | - &item_prop_desc, |
388 | | - false); |
389 | | - |
390 | | - JERRY_ASSERT (ecma_is_completion_value_normal_true (completion) |
391 | | - || ecma_is_completion_value_normal_false (completion)); |
392 | | - |
393 | | - ecma_deref_ecma_string (index_string_p); |
394 | | - } |
395 | | - |
396 | | - /* 6. */ |
397 | | - ret_value = new_array; |
| 272 | + /* 3-6. */ |
| 273 | + ret_value = ecma_builtin_helper_object_get_properties (obj_p, true); |
398 | 274 | } |
399 | 275 |
|
400 | 276 | return ret_value; |
|
0 commit comments