Bug 1249606 - Automatically generate operator== for WebIDL dictionaries. r=bzbarsky

This commit is contained in:
Diego Pino Garcia 2018-11-29 17:07:30 -05:00
Родитель 59d8cce642
Коммит fb55ca75b7
3 изменённых файлов: 33 добавлений и 4 удалений

Просмотреть файл

@ -619,10 +619,7 @@ ChromeUtils::IsOriginAttributesEqual(dom::GlobalObject& aGlobal,
ChromeUtils::IsOriginAttributesEqual(const dom::OriginAttributesDictionary& aA,
const dom::OriginAttributesDictionary& aB)
{
return aA.mAppId == aB.mAppId &&
aA.mInIsolatedMozBrowser == aB.mInIsolatedMozBrowser &&
aA.mUserContextId == aB.mUserContextId &&
aA.mPrivateBrowsingId == aB.mPrivateBrowsingId;
return aA == aB;
}
#ifdef NIGHTLY_BUILD

Просмотреть файл

@ -163,6 +163,11 @@ public:
return mImpl == aOther.mImpl;
}
bool operator!=(const Optional_base<T, InternalType>& aOther) const
{
return mImpl != aOther.mImpl;
}
template<typename T1, typename T2>
explicit Optional_base(const T1& aValue1, const T2& aValue2)
{

Просмотреть файл

@ -12996,6 +12996,30 @@ class CGDictionary(CGThing):
"aOther")],
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):
d = self.dictionary
selfName = self.makeClassName(d)
@ -13076,6 +13100,9 @@ class CGDictionary(CGThing):
else:
disallowCopyConstruction = True
if self.canHaveEqualsOperator():
methods.append(self.equalsOperator())
struct = CGClass(selfName,
bases=[ClassBase(self.base())],
members=members,