@@ -69,6 +69,53 @@ 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+
76+ do
77+ {
78+ ecma_string_t * property_name_p = NULL ;
79+ ecma_string_t uint32_string ;
80+
81+ if (ecma_is_value_integer_number (property ))
82+ {
83+ ecma_integer_value_t int_value = ecma_get_integer_from_value (property );
84+
85+ if (int_value < 0 )
86+ {
87+ break ;
88+ }
89+
90+ /* Statically allocated string for searching. */
91+ ecma_init_ecma_string_from_uint32 (& uint32_string , (uint32_t ) int_value );
92+ property_name_p = & uint32_string ;
93+ }
94+ else if (ecma_is_value_string (property ))
95+ {
96+ property_name_p = ecma_get_string_from_value (property );
97+ }
98+ else
99+ {
100+ break ;
101+ }
102+
103+ JERRY_ASSERT (property_name_p != NULL );
104+
105+ ecma_property_t * property_p = ecma_lcache_lookup (object_p , property_name_p );
106+
107+ if (property_p != NULL &&
108+ ECMA_PROPERTY_GET_TYPE (property_p ) == ECMA_PROPERTY_TYPE_NAMEDDATA )
109+ {
110+ return ecma_fast_copy_value (ecma_get_named_data_property_value (property_p ));
111+ }
112+
113+ /* There is no need to free the name. */
114+ return ecma_op_get_value_object_base (object , property_name_p );
115+ }
116+ while (0 );
117+ }
118+
72119 if (unlikely (ecma_is_value_undefined (object ) || ecma_is_value_null (object )))
73120 {
74121 return ecma_raise_type_error (ECMA_ERR_MSG ("" ));
@@ -83,20 +130,6 @@ vm_op_get_value (ecma_value_t object, /**< base object */
83130
84131 ecma_string_t * property_name_p = ecma_get_string_from_value (prop_to_string_result );
85132
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-
100133 ecma_value_t get_value_result = ecma_op_get_value_object_base (object , property_name_p );
101134
102135 ecma_deref_ecma_string (property_name_p );
0 commit comments