@@ -8670,6 +8670,7 @@ namespace Js
86708670
86718671 return true ;
86728672 }
8673+
86738674 BOOL JavascriptOperators::ToPropertyDescriptorForProxyObjects (Var propertySpec, PropertyDescriptor* descriptor, ScriptContext* scriptContext)
86748675 {
86758676 if (!JavascriptOperators::IsObject (propertySpec))
@@ -8815,7 +8816,8 @@ namespace Js
88158816
88168817 BOOL JavascriptOperators::ToPropertyDescriptor (Var propertySpec, PropertyDescriptor* descriptor, ScriptContext* scriptContext)
88178818 {
8818- if (JavascriptProxy::Is (propertySpec))
8819+ if (JavascriptProxy::Is (propertySpec) ||
8820+ JavascriptOperators::CheckIfPrototypeChainContainsProxyObject (RecyclableObject::FromVar (propertySpec)->GetPrototype ()))
88198821 {
88208822 if (ToPropertyDescriptorForProxyObjects (propertySpec, descriptor, scriptContext) == FALSE )
88218823 {
@@ -9953,16 +9955,13 @@ namespace Js
99539955 return !Equal (aLeft, aRight, scriptContext);
99549956 }
99559957
9956-
99579958 // NotStrictEqual() returns whether the two vars have strict equality, as
99589959 // described in (ES3.0: S11.9.5, S11.9.6).
9959-
99609960 BOOL JavascriptOperators::NotStrictEqual (Var aLeft, Var aRight, ScriptContext* scriptContext)
99619961 {
99629962 return !StrictEqual (aLeft, aRight, scriptContext);
99639963 }
99649964
9965-
99669965 bool JavascriptOperators::CheckIfObjectAndPrototypeChainHasOnlyWritableDataProperties (RecyclableObject* object)
99679966 {
99689967 Assert (object);
@@ -10033,6 +10032,24 @@ namespace Js
1003310032 return true ;
1003410033 }
1003510034
10035+ bool JavascriptOperators::CheckIfPrototypeChainContainsProxyObject (RecyclableObject* prototype)
10036+ {
10037+ Assert (JavascriptOperators::IsObjectOrNull (prototype));
10038+
10039+ if (prototype->GetTypeId () == TypeIds_Null)
10040+ {
10041+ return false ;
10042+ }
10043+ else if (prototype->GetTypeId () == TypeIds_Proxy)
10044+ {
10045+ return true ;
10046+ }
10047+ else
10048+ {
10049+ return CheckIfPrototypeChainContainsProxyObject (prototype->GetPrototype ());
10050+ }
10051+ }
10052+
1003610053 BOOL JavascriptOperators::Equal (Var aLeft, Var aRight, ScriptContext* scriptContext)
1003710054 {
1003810055 if (aLeft == aRight)
0 commit comments