|
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