@@ -221,22 +221,31 @@ _Ret_notnull_ Var
221221JSONStringifier::ReadValue (_In_ JavascriptString* key, _In_opt_ const PropertyRecord* propertyRecord, _In_ RecyclableObject* holder)
222222{
223223 Var value = nullptr ;
224- PropertyString* propertyString = JavascriptOperators::TryFromVar<PropertyString>(key);
225224 PropertyValueInfo info;
226- if (propertyString != nullptr )
227- {
228- PropertyValueInfo::SetCacheInfo (&info, propertyString, propertyString->GetLdElemInlineCache (), false );
229- if (propertyString->TryGetPropertyFromCache <false /* ownPropertyOnly */ , false /* OutputExistence */ >(holder, holder, &value, this ->scriptContext , &info))
230- {
231- return value;
232- }
233- }
234225
235226 if (propertyRecord == nullptr )
236227 {
237228 key->GetPropertyRecord (&propertyRecord);
238229 }
239- JavascriptOperators::GetProperty (holder, propertyRecord->GetPropertyId (), &value, this ->scriptContext , &info);
230+
231+ if (propertyRecord->IsNumeric ())
232+ {
233+ JavascriptOperators::GetItem (holder, propertyRecord->GetNumericValue (), &value, this ->scriptContext );
234+ }
235+ else
236+ {
237+ PropertyString* propertyString = JavascriptOperators::TryFromVar<PropertyString>(key);
238+ if (propertyString != nullptr )
239+ {
240+ PropertyValueInfo::SetCacheInfo (&info, propertyString, propertyString->GetLdElemInlineCache (), false );
241+ if (propertyString->TryGetPropertyFromCache <false /* ownPropertyOnly */ , false /* OutputExistence */ >(holder, holder, &value, this ->scriptContext , &info))
242+ {
243+ return value;
244+ }
245+ }
246+ JavascriptOperators::GetProperty (holder, propertyRecord->GetPropertyId (), &value, this ->scriptContext , &info);
247+ }
248+
240249 return value;
241250}
242251
0 commit comments