|
14 | 14 | */
|
15 | 15 |
|
16 | 16 | #include "ecma-alloc.h"
|
| 17 | +#include "ecma-array-object.h" |
17 | 18 | #include "ecma-builtins.h"
|
18 | 19 | #include "ecma-builtin-helpers.h"
|
19 | 20 | #include "ecma-exceptions.h"
|
@@ -246,28 +247,27 @@ ecma_op_container_to_key (ecma_value_t key_arg) /**< key argument */
|
246 | 247 | ecma_object_t *obj_p = ecma_get_object_from_value (key_arg);
|
247 | 248 | ecma_string_t *key_string_p = ecma_get_magic_string (LIT_INTERNAL_MAGIC_STRING_MAP_KEY);
|
248 | 249 |
|
249 |
| - ecma_property_ref_t property_ref; |
250 |
| - ecma_property_t property = ecma_op_object_get_own_property (obj_p, |
251 |
| - key_string_p, |
252 |
| - &property_ref, |
253 |
| - ECMA_PROPERTY_GET_NO_OPTIONS); |
| 250 | + if (ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_ARRAY |
| 251 | + && ((ecma_extended_object_t *) obj_p)->u.array.is_fast_mode) |
| 252 | + { |
| 253 | + ecma_fast_array_convert_to_normal (obj_p); |
| 254 | + } |
254 | 255 |
|
| 256 | + ecma_property_t *property_p = ecma_find_named_property (obj_p, key_string_p); |
255 | 257 | ecma_string_t *object_key_string;
|
256 | 258 |
|
257 |
| - if (property == ECMA_PROPERTY_TYPE_NOT_FOUND || property == ECMA_PROPERTY_TYPE_NOT_FOUND_AND_STOP) |
| 259 | + if (property_p == NULL) |
258 | 260 | {
|
259 | 261 | object_key_string = ecma_new_map_key_string (key_arg);
|
260 |
| - ecma_value_t put_comp = ecma_builtin_helper_def_prop (obj_p, |
261 |
| - key_string_p, |
262 |
| - ecma_make_string_value (object_key_string), |
263 |
| - ECMA_PROPERTY_CONFIGURABLE_ENUMERABLE_WRITABLE); |
264 |
| - |
265 |
| - JERRY_ASSERT (ecma_is_value_true (put_comp)); |
266 |
| - ecma_deref_ecma_string (object_key_string); |
| 262 | + ecma_property_value_t *value_p = ecma_create_named_data_property (obj_p, |
| 263 | + key_string_p, |
| 264 | + ECMA_PROPERTY_CONFIGURABLE_ENUMERABLE_WRITABLE, |
| 265 | + NULL); |
| 266 | + value_p->value = ecma_make_string_value (object_key_string); |
267 | 267 | }
|
268 | 268 | else
|
269 | 269 | {
|
270 |
| - object_key_string = ecma_get_string_from_value (property_ref.value_p->value); |
| 270 | + object_key_string = ecma_get_string_from_value (ECMA_PROPERTY_VALUE_PTR (property_p)->value); |
271 | 271 | }
|
272 | 272 |
|
273 | 273 | ecma_ref_ecma_string (object_key_string);
|
|
0 commit comments