aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom/bindings/codegen/CodegenRust.py
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <me@emiliocobos.me>2016-05-12 20:31:48 +0200
committerEmilio Cobos Álvarez <me@emiliocobos.me>2016-05-13 09:42:51 +0200
commit92ba0b9c39a1eaf7c0546fea385b96b67d78c95c (patch)
tree737ddc6a31a35e71fcd45579399f34ee16c37c9f /components/script/dom/bindings/codegen/CodegenRust.py
parentf893a2eaacee70b1044cea88dd184cd05dda31fa (diff)
downloadservo-92ba0b9c39a1eaf7c0546fea385b96b67d78c95c.tar.gz
servo-92ba0b9c39a1eaf7c0546fea385b96b67d78c95c.zip
codegen: Don't unconditionally set non-required dictionary attributes
Diffstat (limited to 'components/script/dom/bindings/codegen/CodegenRust.py')
-rw-r--r--components/script/dom/bindings/codegen/CodegenRust.py19
1 files changed, 14 insertions, 5 deletions
diff --git a/components/script/dom/bindings/codegen/CodegenRust.py b/components/script/dom/bindings/codegen/CodegenRust.py
index bfdea910159..3fc5bde830b 100644
--- a/components/script/dom/bindings/codegen/CodegenRust.py
+++ b/components/script/dom/bindings/codegen/CodegenRust.py
@@ -5295,14 +5295,23 @@ class CGDictionary(CGThing):
conversion = self.getMemberConversion(memberInfo, member.type)
return CGGeneric("%s: %s,\n" % (name, conversion.define()))
+ def varInsert(varName, dictionaryName):
+ insertion = ("let mut %s_js = RootedValue::new(cx, UndefinedValue());\n"
+ "%s.to_jsval(cx, %s_js.handle_mut());\n"
+ "set_dictionary_property(cx, obj.handle(), \"%s\", %s_js.handle()).unwrap();"
+ % (varName, varName, varName, dictionaryName, varName))
+ return CGGeneric(insertion)
+
def memberInsert(memberInfo):
member, _ = memberInfo
name = self.makeMemberName(member.identifier.name)
- insertion = ("let mut %s = RootedValue::new(cx, UndefinedValue());\n"
- "self.%s.to_jsval(cx, %s.handle_mut());\n"
- "set_dictionary_property(cx, obj.handle(), \"%s\", %s.handle()).unwrap();"
- % (name, name, name, member.identifier.name, name))
- return CGGeneric("%s\n" % insertion)
+ if member.optional and not member.defaultValue:
+ insertion = CGIfWrapper("let Some(ref %s) = self.%s" % (name, name),
+ varInsert(name, member.identifier.name))
+ else:
+ insertion = CGGeneric("let %s = &self.%s;\n%s" %
+ (name, name, varInsert(name, member.identifier.name).define()))
+ return CGGeneric("%s\n" % insertion.define())
memberInits = CGList([memberInit(m) for m in self.memberInfo])
memberInserts = CGList([memberInsert(m) for m in self.memberInfo])