aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/script/dom/bindings/codegen/CodegenRust.py
diff options
context:
space:
mode:
authorMs2ger <ms2ger@gmail.com>2014-05-06 12:16:03 +0200
committerMs2ger <ms2ger@gmail.com>2014-05-06 12:16:03 +0200
commit8ea3cbf18a72efed413b75d95f71099c16886ac2 (patch)
treefb36904a9ffa8346bd93194a2e6f1d2d57cb088e /src/components/script/dom/bindings/codegen/CodegenRust.py
parent3a5fc11bb8d734cb9113e5e90cb85c025c778fdb (diff)
downloadservo-8ea3cbf18a72efed413b75d95f71099c16886ac2.tar.gz
servo-8ea3cbf18a72efed413b75d95f71099c16886ac2.zip
Enter a compartment when calling callbacks.
Diffstat (limited to 'src/components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r--src/components/script/dom/bindings/codegen/CodegenRust.py15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/components/script/dom/bindings/codegen/CodegenRust.py b/src/components/script/dom/bindings/codegen/CodegenRust.py
index 3e86f722869..4429298f5a4 100644
--- a/src/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/src/components/script/dom/bindings/codegen/CodegenRust.py
@@ -4859,14 +4859,21 @@ class CallbackMember(CGNativeMember):
# Avoid weird 0-sized arrays
replacements["argvDecl"] = ""
- return string.Template(
- # Newlines and semicolons are in the values
+ # Newlines and semicolons are in the values
+ pre = string.Template(
"${setupCall}"
"${declRval}"
- "${argvDecl}"
+ "${argvDecl}").substitute(replacements)
+ body = string.Template(
"${convertArgs}"
"${doCall}"
"${returnResult}").substitute(replacements)
+ return CGList([
+ CGGeneric(pre),
+ CGWrapper(CGIndenter(CGGeneric(body)),
+ pre="with_compartment(cx, self.parent.callback, || {\n",
+ post="})")
+ ], "\n").define()
def getResultConversion(self):
replacements = {
@@ -4889,7 +4896,7 @@ class CallbackMember(CGNativeMember):
assignRetval = string.Template(
self.getRetvalInfo(self.retvalType,
False)[2]).substitute(replacements)
- return convertType.define() + "\n" + assignRetval
+ return convertType.define() + "\n" + assignRetval + "\n"
def getArgConversions(self):
# Just reget the arglist from self.originalSig, because our superclasses