Bug 1335000 - return type& for copy assignment operator. r?peterv draft
authorAndi-Bogdan Postelnicu <bpostelnicu@mozilla.com>
Wed, 01 Feb 2017 17:54:49 +0200
changeset 469077 e65b58a9a9c25775a90397f26b3bff2a215a3608
parent 469044 9e7b1041929fccc06f6fad91cf66b9edcdfc0129
child 544085 595e414e98a99158071de4733b6d3a4ce3dda125
push id43607
push userbmo:bpostelnicu@mozilla.com
push dateWed, 01 Feb 2017 15:55:24 +0000
reviewerspeterv
bugs1335000
milestone54.0a1
Bug 1335000 - return type& for copy assignment operator. r?peterv MozReview-Commit-ID: 7kHt2l30ZP6
dom/bindings/Codegen.py
--- 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),