aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen/CodegenRust.py
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py14
1 files changed, 12 insertions, 2 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index cf918feb8e3..78748cea869 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -6508,7 +6508,8 @@ class CallbackMethod(CallbackMember):
def getCall(self):
replacements = {
"thisObj": self.getThisObj(),
- "getCallable": self.getCallableDecl()
+ "getCallable": self.getCallableDecl(),
+ "callGuard": self.getCallGuard(),
}
if self.argCount > 0:
replacements["argv"] = "argv.as_ptr()"
@@ -6519,7 +6520,7 @@ class CallbackMethod(CallbackMember):
return string.Template(
"${getCallable}"
"rooted!(in(cx) let rootedThis = ${thisObj});\n"
- "let ok = JS_CallFunctionValue(\n"
+ "let ok = ${callGuard}JS_CallFunctionValue(\n"
" cx, rootedThis.handle(), callable.handle(),\n"
" &HandleValueArray {\n"
" length_: ${argc} as ::libc::size_t,\n"
@@ -6535,6 +6536,7 @@ class CallbackMethod(CallbackMember):
class CallCallback(CallbackMethod):
def __init__(self, callback, descriptorProvider):
+ self.callback = callback
CallbackMethod.__init__(self, callback.signatures()[0], "Call",
descriptorProvider, needThisHandling=True)
@@ -6544,6 +6546,11 @@ class CallCallback(CallbackMethod):
def getCallableDecl(self):
return "rooted!(in(cx) let callable = ObjectValue(&*self.parent.callback()));\n"
+ def getCallGuard(self):
+ if self.callback._treatNonObjectAsNull:
+ return "!IsCallable(self.parent.callback()) || "
+ return ""
+
class CallbackOperationBase(CallbackMethod):
"""
@@ -6579,6 +6586,9 @@ class CallbackOperationBase(CallbackMethod):
CGGeneric('ObjectValue(&*self.parent.callback())'),
CGGeneric(getCallableFromProp))).define() + ');\n')
+ def getCallGuard(self):
+ return ""
+
class CallbackOperation(CallbackOperationBase):
"""