diff options
author | Emilio Cobos Álvarez <me@emiliocobos.me> | 2016-05-12 20:31:48 +0200 |
---|---|---|
committer | Emilio Cobos Álvarez <me@emiliocobos.me> | 2016-05-13 09:42:51 +0200 |
commit | 92ba0b9c39a1eaf7c0546fea385b96b67d78c95c (patch) | |
tree | 737ddc6a31a35e71fcd45579399f34ee16c37c9f /components/script/dom/bindings/codegen/CodegenRust.py | |
parent | f893a2eaacee70b1044cea88dd184cd05dda31fa (diff) | |
download | servo-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.py | 19 |
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]) |