@@ -69,6 +69,43 @@ static ecma_value_t
6969vm_op_get_value (ecma_value_t object , /**< base object */
7070 ecma_value_t property ) /**< property name */
7171{
72+ if (ecma_is_value_object (object ))
73+ {
74+ ecma_object_t * object_p = ecma_get_object_from_value (object );
75+ ecma_string_t * property_name_p = NULL ;
76+ ecma_string_t uint32_string ;
77+
78+ if (ecma_is_value_integer_number (property ))
79+ {
80+ ecma_integer_value_t int_value = ecma_get_integer_from_value (property );
81+
82+ if (int_value >= 0 )
83+ {
84+ /* Statically allocated string for searching. */
85+ ecma_init_ecma_string_from_uint32 (& uint32_string , (uint32_t ) int_value );
86+ property_name_p = & uint32_string ;
87+ }
88+ }
89+ else if (ecma_is_value_string (property ))
90+ {
91+ property_name_p = ecma_get_string_from_value (property );
92+ }
93+
94+ if (property_name_p != NULL )
95+ {
96+ ecma_property_t * property_p = ecma_lcache_lookup (object_p , property_name_p );
97+
98+ if (property_p != NULL &&
99+ ECMA_PROPERTY_GET_TYPE (property_p ) == ECMA_PROPERTY_TYPE_NAMEDDATA )
100+ {
101+ return ecma_fast_copy_value (ecma_get_named_data_property_value (property_p ));
102+ }
103+
104+ /* There is no need to free the name. */
105+ return ecma_op_get_value_object_base (object , property_name_p );
106+ }
107+ }
108+
72109 if (unlikely (ecma_is_value_undefined (object ) || ecma_is_value_null (object )))
73110 {
74111 return ecma_raise_type_error (ECMA_ERR_MSG ("" ));
@@ -83,20 +120,6 @@ vm_op_get_value (ecma_value_t object, /**< base object */
83120
84121 ecma_string_t * property_name_p = ecma_get_string_from_value (prop_to_string_result );
85122
86- if (ecma_is_value_object (object ))
87- {
88- ecma_object_t * object_p = ecma_get_object_from_value (object );
89-
90- ecma_property_t * property_p = ecma_lcache_lookup (object_p , property_name_p );
91-
92- if (property_p != NULL &&
93- ECMA_PROPERTY_GET_TYPE (property_p ) == ECMA_PROPERTY_TYPE_NAMEDDATA )
94- {
95- ecma_deref_ecma_string (property_name_p );
96- return ecma_fast_copy_value (ecma_get_named_data_property_value (property_p ));
97- }
98- }
99-
100123 ecma_value_t get_value_result = ecma_op_get_value_object_base (object , property_name_p );
101124
102125 ecma_deref_ecma_string (property_name_p );
0 commit comments