summaryrefslogtreecommitdiffstats
path: root/dom/bindings/Codegen.py
diff options
context:
space:
mode:
Diffstat (limited to 'dom/bindings/Codegen.py')
-rw-r--r--dom/bindings/Codegen.py24
1 files changed, 16 insertions, 8 deletions
diff --git a/dom/bindings/Codegen.py b/dom/bindings/Codegen.py
index a6a49f9b2f..de9444b42f 100644
--- a/dom/bindings/Codegen.py
+++ b/dom/bindings/Codegen.py
@@ -8937,10 +8937,12 @@ def wrapTypeIntoCurrentCompartment(type, value, isMember=True):
return CGList(memberWraps) if len(memberWraps) != 0 else None
if type.isUnion():
- memberWraps = []
+ origValue = value
+ origType = type
if type.nullable():
type = type.inner
value = "%s.Value()" % value
+ memberWraps = []
for member in type.flatMemberTypes:
memberName = getUnionMemberName(member)
memberWrap = wrapTypeIntoCurrentCompartment(
@@ -8949,7 +8951,12 @@ def wrapTypeIntoCurrentCompartment(type, value, isMember=True):
if memberWrap:
memberWrap = CGIfWrapper(memberWrap, "%s.Is%s()" % (value, memberName))
memberWraps.append(memberWrap)
- return CGList(memberWraps, "else ") if len(memberWraps) != 0 else None
+ if len(memberWraps) == 0:
+ return None
+ wrapCode = CGList(memberWraps, "else ")
+ if origType.nullable():
+ wrapCode = CGIfWrapper(wrapCode, "!%s.IsNull()" % origValue)
+ return wrapCode
if (
type.isUndefined()
@@ -8996,7 +9003,8 @@ class CGPerSignatureCall(CGThing):
actual return value (e.g. this is an attribute setter) or an
IDLType if there's an IDL type involved (including |void|).
2) An argument list, which is allowed to be empty.
- 3) A name of a native method to call.
+ 3) A name of a native method to call. It is ignored for methods
+ annotated with the "[WebExtensionStub=...]" extended attribute.
4) Whether or not this method is static. Note that this only controls how
the method is called (|self->nativeMethodName(...)| vs
|nativeMethodName(...)|).
@@ -9370,7 +9378,7 @@ class CGPerSignatureCall(CGThing):
nativeMethodName,
argsPre,
args,
- ] = self.processWebExtensionStubAttribute(idlNode, cgThings)
+ ] = self.processWebExtensionStubAttribute(cgThings)
else:
args = self.getArguments()
@@ -9439,9 +9447,9 @@ class CGPerSignatureCall(CGThing):
def getArguments(self):
return list(zip(self.arguments, self.getArgumentNames()))
- def processWebExtensionStubAttribute(self, idlNode, cgThings):
+ def processWebExtensionStubAttribute(self, cgThings):
nativeMethodName = "CallWebExtMethod"
- stubNameSuffix = idlNode.getExtendedAttribute("WebExtensionStub")
+ stubNameSuffix = self.idlNode.getExtendedAttribute("WebExtensionStub")
if isinstance(stubNameSuffix, list):
nativeMethodName += stubNameSuffix[0]
@@ -9454,7 +9462,7 @@ class CGPerSignatureCall(CGThing):
if singleVariadicArg:
argsPre = [
"cx",
- 'u"%s"_ns' % idlNode.identifier.name,
+ 'u"%s"_ns' % self.idlNode.identifier.name,
"Constify(%s)" % "arg0",
]
args = []
@@ -9462,7 +9470,7 @@ class CGPerSignatureCall(CGThing):
argsPre = [
"cx",
- 'u"%s"_ns' % idlNode.identifier.name,
+ 'u"%s"_ns' % self.idlNode.identifier.name,
"Constify(%s)" % "args_sequence",
]
args = []