|
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