Skip to content

Commit 9ed60d6

Browse files
committed
address review comment
1 parent bb59c0f commit 9ed60d6

File tree

1 file changed

+31
-24
lines changed

1 file changed

+31
-24
lines changed

lib/Runtime/Library/JavascriptProxy.cpp

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -904,39 +904,46 @@ namespace Js
904904
JsUtil::BaseDictionary<const char16*, Var, Recycler> dict(scriptContext->GetRecycler());
905905
JavascriptArray* arrResult = scriptContext->GetLibrary()->CreateArray();
906906

907-
// 13.7.5.15EnumerateObjectProperties(O)#
908-
// for (let key of Reflect.ownKeys(obj)) {
907+
// 13.7.5.15 EnumerateObjectProperties(O) (https://tc39.github.io/ecma262/#sec-enumerate-object-properties)
908+
// for (let key of Reflect.ownKeys(obj)) {
909909
Var trapResult = JavascriptOperators::GetOwnPropertyNames(this, scriptContext);
910-
Assert(JavascriptArray::Is(trapResult));
911-
((JavascriptArray*)trapResult)->GetEnumerator(false, &enmeratorObj, scriptContext);
912-
JavascriptEnumerator* pEnumerator = JavascriptEnumerator::FromVar(enmeratorObj);
913-
while ((propertyName = pEnumerator->GetCurrentAndMoveNext(propertyId)) != NULL)
914-
{
915-
PropertyId propId = JavascriptOperators::GetPropertyId(propertyName, scriptContext);
916-
Var prop = JavascriptOperators::GetProperty(RecyclableObject::FromVar(trapResult), propId, scriptContext);
917-
// if (typeof key === "string") {
918-
if (JavascriptString::Is(prop))
910+
if (JavascriptArray::Is(trapResult))
911+
{
912+
((JavascriptArray*)trapResult)->GetEnumerator(false, &enmeratorObj, scriptContext);
913+
JavascriptEnumerator* pEnumerator = JavascriptEnumerator::FromVar(enmeratorObj);
914+
while ((propertyName = pEnumerator->GetCurrentAndMoveNext(propertyId)) != NULL)
919915
{
920-
Js::PropertyDescriptor desc;
921-
JavascriptString* str = JavascriptString::FromVar(prop);
922-
// let desc = Reflect.getOwnPropertyDescriptor(obj, key);
923-
BOOL ret = JavascriptOperators::GetOwnPropertyDescriptor(this, str, scriptContext, &desc);
924-
// if (desc && !visited.has(key)) {
925-
if (ret && !dict.ContainsKey(str->GetSz()))
916+
PropertyId propId = JavascriptOperators::GetPropertyId(propertyName, scriptContext);
917+
Var prop = JavascriptOperators::GetProperty(RecyclableObject::FromVar(trapResult), propId, scriptContext);
918+
// if (typeof key === "string") {
919+
if (JavascriptString::Is(prop))
926920
{
927-
dict.Add(str->GetSz(), prop);
928-
//if (desc.enumerable) yield key;
929-
if (desc.IsEnumerable())
921+
Js::PropertyDescriptor desc;
922+
JavascriptString* str = JavascriptString::FromVar(prop);
923+
// let desc = Reflect.getOwnPropertyDescriptor(obj, key);
924+
BOOL ret = JavascriptOperators::GetOwnPropertyDescriptor(this, str, scriptContext, &desc);
925+
// if (desc && !visited.has(key)) {
926+
if (ret && !dict.ContainsKey(str->GetSz()))
930927
{
931-
ret = arrResult->SetItem(index++, prop, PropertyOperation_None);
932-
Assert(ret);
928+
dict.Add(str->GetSz(), prop);
929+
// if (desc.enumerable) yield key;
930+
if (desc.IsEnumerable())
931+
{
932+
ret = arrResult->SetItem(index++, prop, PropertyOperation_None);
933+
Assert(ret);
934+
}
933935
}
934936
}
935-
}
937+
}
938+
}
939+
else
940+
{
941+
AssertMsg(false, "Expect GetOwnPropertyNames result to be array");
936942
}
937943

938-
*enumerator = IteratorObjectEnumerator::Create(scriptContext,
944+
*enumerator = IteratorObjectEnumerator::Create(scriptContext,
939945
JavascriptOperators::GetIterator(RecyclableObject::FromVar(arrResult), scriptContext));
946+
940947
return TRUE;
941948
}
942949

0 commit comments

Comments
 (0)