Bug 1335000 - return type& for copy assignment operator. r?peterv
MozReview-Commit-ID: 7kHt2l30ZP6
--- a/dom/bindings/Codegen.py
+++ b/dom/bindings/Codegen.py
@@ -10221,20 +10221,23 @@ class CGUnionStruct(CGThing):
if CGUnionStruct.isUnionCopyConstructible(self.type):
constructors.append(
ClassConstructor(
[Argument("const %s&" % selfName, "aOther")],
bodyInHeader=True,
visibility="public",
explicit=True,
body="*this = aOther;\n"))
+ op_body = CGList([])
+ op_body.append(CGSwitch("aOther.mType", assignmentCases))
+ op_body.append(CGGeneric("return *this;\n"))
methods.append(ClassMethod(
- "operator=", "void",
+ "operator=", "%s&" % selfName,
[Argument("const %s&" % selfName, "aOther")],
- body=CGSwitch("aOther.mType", assignmentCases).define()))
+ body=op_body.define()))
disallowCopyConstruction = False
else:
disallowCopyConstruction = True
else:
disallowCopyConstruction = True
if self.ownsMembers:
friend = " friend void ImplCycleCollectionUnlink(%s& aUnion);\n" % CGUnionStruct.unionTypeName(self.type, True)
@@ -10859,17 +10862,17 @@ class CGClass(CGThing):
if self.disallowCopyConstruction:
class DisallowedCopyConstructor(object):
def __init__(self):
self.visibility = "private"
def declare(self, cgClass):
name = cgClass.getNameString()
return ("%s(const %s&) = delete;\n"
- "void operator=(const %s&) = delete;\n" % (name, name, name))
+ "%s& operator=(const %s&) = delete;\n" % (name, name, name, name))
disallowedCopyConstructors = [DisallowedCopyConstructor()]
else:
disallowedCopyConstructors = []
order = [self.enums, self.unions,
self.typedefs, self.members,
self.constructors + disallowedCopyConstructors,
@@ -12980,18 +12983,19 @@ class CGDictionary(CGThing):
${name}.Construct(aOther.${name}.Value());
}
""",
name=memberName))
else:
memberAssign = CGGeneric(
"%s = aOther.%s;\n" % (memberName, memberName))
body.append(memberAssign)
+ body.append(CGGeneric("return *this;\n"))
return ClassMethod(
- "operator=", "void",
+ "operator=", "%s&" % self.makeClassName(self.dictionary),
[Argument("const %s&" % self.makeClassName(self.dictionary),
"aOther")],
body=body.define())
def getStructs(self):
d = self.dictionary
selfName = self.makeClassName(d)
members = [ClassMember(self.makeMemberName(m[0].identifier.name),