Procházet zdrojové kódy

fix issue on duplicated ownKeys trap results. see spec change https://github.com/tc39/ecma262/pull/594 for detail

Lei Shi před 9 roky
rodič
revize
bb59c0f137

+ 10 - 7
lib/Runtime/Library/JavascriptProxy.h

@@ -178,14 +178,17 @@ namespace Js
                 JavascriptConversion::ToPropertyKey(element, scriptContext, &propertyRecord);
                 propertyId = propertyRecord->GetPropertyId();
 
-                if (propertyId != Constants::NoProperty)
+                if (!targetToTrapResultMap.ContainsKey(propertyId))
                 {
-                    targetToTrapResultMap.Add(propertyId, true);
-                }
-
-                if (fn(propertyRecord))
-                {
-                    trapResult->DirectSetItemAt(trapResultIndex++, element);
+                    if (propertyId != Constants::NoProperty)
+                    {
+                        targetToTrapResultMap.Add(propertyId, true);
+                    }
+
+                    if (fn(propertyRecord))
+                    {
+                        trapResult->DirectSetItemAt(trapResultIndex++, element);
+                    }
                 }
             }
         }

+ 0 - 2
test/es6/proxyenumremoval.js

@@ -84,7 +84,6 @@ var proxy = new Proxy({b:1,a:2}, {
 for(var key in proxy){ keys += key;}
 passed &= keys==="a";
 
-/* duplicate key does not work, assertion on inserting propertyId to dictionary. Waiting for spec clarification
 // check property descriptor trap
 var keys=""
 var already_non_enmerable = false;
@@ -115,7 +114,6 @@ var proxy = new Proxy({}, {
 for(var key in proxy){ keys += key;}
 passed &= keys==="b";
 passed &= getPrototypeOfCalled===1;
-*/
 
 if (passed) {
   WScript.Echo("PASS");