зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1249606 - Automatically generate operator== for WebIDL dictionaries. r=bzbarsky
This commit is contained in:
Родитель
59d8cce642
Коммит
fb55ca75b7
|
@ -619,10 +619,7 @@ ChromeUtils::IsOriginAttributesEqual(dom::GlobalObject& aGlobal,
|
||||||
ChromeUtils::IsOriginAttributesEqual(const dom::OriginAttributesDictionary& aA,
|
ChromeUtils::IsOriginAttributesEqual(const dom::OriginAttributesDictionary& aA,
|
||||||
const dom::OriginAttributesDictionary& aB)
|
const dom::OriginAttributesDictionary& aB)
|
||||||
{
|
{
|
||||||
return aA.mAppId == aB.mAppId &&
|
return aA == aB;
|
||||||
aA.mInIsolatedMozBrowser == aB.mInIsolatedMozBrowser &&
|
|
||||||
aA.mUserContextId == aB.mUserContextId &&
|
|
||||||
aA.mPrivateBrowsingId == aB.mPrivateBrowsingId;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef NIGHTLY_BUILD
|
#ifdef NIGHTLY_BUILD
|
||||||
|
|
|
@ -163,6 +163,11 @@ public:
|
||||||
return mImpl == aOther.mImpl;
|
return mImpl == aOther.mImpl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool operator!=(const Optional_base<T, InternalType>& aOther) const
|
||||||
|
{
|
||||||
|
return mImpl != aOther.mImpl;
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T1, typename T2>
|
template<typename T1, typename T2>
|
||||||
explicit Optional_base(const T1& aValue1, const T2& aValue2)
|
explicit Optional_base(const T1& aValue1, const T2& aValue2)
|
||||||
{
|
{
|
||||||
|
|
|
@ -12996,6 +12996,30 @@ class CGDictionary(CGThing):
|
||||||
"aOther")],
|
"aOther")],
|
||||||
body=body.define())
|
body=body.define())
|
||||||
|
|
||||||
|
def canHaveEqualsOperator(self):
|
||||||
|
return all(m.type.isString() or m.type.isPrimitive() for (m,_) in
|
||||||
|
self.memberInfo)
|
||||||
|
|
||||||
|
def equalsOperator(self):
|
||||||
|
body = CGList([])
|
||||||
|
|
||||||
|
for m, _ in self.memberInfo:
|
||||||
|
memberName = self.makeMemberName(m.identifier.name)
|
||||||
|
memberTest = CGGeneric(fill(
|
||||||
|
"""
|
||||||
|
if (${memberName} != aOther.${memberName}) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
""",
|
||||||
|
memberName=memberName))
|
||||||
|
body.append(memberTest)
|
||||||
|
body.append(CGGeneric("return true;\n"))
|
||||||
|
return ClassMethod(
|
||||||
|
"operator==", "bool",
|
||||||
|
[Argument("const %s&" % self.makeClassName(self.dictionary),
|
||||||
|
"aOther")
|
||||||
|
], const=True, body=body.define())
|
||||||
|
|
||||||
def getStructs(self):
|
def getStructs(self):
|
||||||
d = self.dictionary
|
d = self.dictionary
|
||||||
selfName = self.makeClassName(d)
|
selfName = self.makeClassName(d)
|
||||||
|
@ -13076,6 +13100,9 @@ class CGDictionary(CGThing):
|
||||||
else:
|
else:
|
||||||
disallowCopyConstruction = True
|
disallowCopyConstruction = True
|
||||||
|
|
||||||
|
if self.canHaveEqualsOperator():
|
||||||
|
methods.append(self.equalsOperator())
|
||||||
|
|
||||||
struct = CGClass(selfName,
|
struct = CGClass(selfName,
|
||||||
bases=[ClassBase(self.base())],
|
bases=[ClassBase(self.base())],
|
||||||
members=members,
|
members=members,
|
||||||
|
|
Загрузка…
Ссылка в новой задаче