aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen/CodegenRust.py
diff options
context:
space:
mode:
authorIgor Matuszewski <Xanewok@gmail.com>2018-03-16 15:54:36 +0100
committerIgor Matuszewski <Xanewok@gmail.com>2018-03-16 16:53:38 +0100
commit64dc0c4b9eeba6f5c56a917a0d32125df9248ed2 (patch)
treef435c0934e3f32c4dc4edcfce27d94fe2f92d086 /components/script/dom/bindings/codegen/CodegenRust.py
parent760e0a5b5792fb3c8967aee53cc41e1e25adf07d (diff)
downloadservo-64dc0c4b9eeba6f5c56a917a0d32125df9248ed2.tar.gz
servo-64dc0c4b9eeba6f5c56a917a0d32125df9248ed2.zip
Root `any` members in dictionaries
Diffstat (limited to 'components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py23
1 files changed, 12 insertions, 11 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index 916c8770d34..24054de8e95 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -1084,13 +1084,7 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
assert isMember != "Union"
if isMember == "Dictionary" or isAutoRooted:
- # TODO: Need to properly root dictionaries
- # https://github.com/servo/servo/issues/6381
- if isMember == "Dictionary":
- declType = CGGeneric("Heap<JSVal>")
- # AutoRooter can trace properly inner raw GC thing pointers
- else:
- declType = CGGeneric("JSVal")
+ templateBody = "${val}.get()"
if defaultValue is None:
default = None
@@ -1100,7 +1094,17 @@ def getJSToNativeConversionInfo(type, descriptorProvider, failureCode=None,
default = "UndefinedValue()"
else:
raise TypeError("Can't handle non-null, non-undefined default value here")
- return handleOptional("${val}.get()", declType, default)
+
+ if isMember == "Dictionary":
+ templateBody = "RootedTraceableBox::from_box(Heap::boxed(%s))" % templateBody
+ if default is not None:
+ default = "RootedTraceableBox::from_box(Heap::boxed(%s))" % default
+ declType = CGGeneric("RootedTraceableBox<Heap<JSVal>>")
+ # AutoRooter can trace properly inner raw GC thing pointers
+ else:
+ declType = CGGeneric("JSVal")
+
+ return handleOptional(templateBody, declType, default)
declType = CGGeneric("HandleValue")
@@ -6165,9 +6169,6 @@ class CGDictionary(CGThing):
conversion = self.getMemberConversion(memberInfo, member.type)
if isInitial:
return CGGeneric("%s: %s,\n" % (name, conversion.define()))
- # TODO: Root Heap<JSVal> using RootedTraceableBox
- if member.type.isAny():
- return CGGeneric("dictionary.%s.set(%s);\n" % (name, conversion.define()))
return CGGeneric("dictionary.%s = %s;\n" % (name, conversion.define()))
def varInsert(varName, dictionaryName):