mirror of
https://github.com/servo/servo.git
synced 2025-06-14 19:34:29 +00:00
codegen: Don't unconditionally set non-required dictionary attributes
This commit is contained in:
parent
f893a2eaac
commit
92ba0b9c39
1 changed files with 14 additions and 5 deletions
|
@ -5295,14 +5295,23 @@ class CGDictionary(CGThing):
|
||||||
conversion = self.getMemberConversion(memberInfo, member.type)
|
conversion = self.getMemberConversion(memberInfo, member.type)
|
||||||
return CGGeneric("%s: %s,\n" % (name, conversion.define()))
|
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):
|
def memberInsert(memberInfo):
|
||||||
member, _ = memberInfo
|
member, _ = memberInfo
|
||||||
name = self.makeMemberName(member.identifier.name)
|
name = self.makeMemberName(member.identifier.name)
|
||||||
insertion = ("let mut %s = RootedValue::new(cx, UndefinedValue());\n"
|
if member.optional and not member.defaultValue:
|
||||||
"self.%s.to_jsval(cx, %s.handle_mut());\n"
|
insertion = CGIfWrapper("let Some(ref %s) = self.%s" % (name, name),
|
||||||
"set_dictionary_property(cx, obj.handle(), \"%s\", %s.handle()).unwrap();"
|
varInsert(name, member.identifier.name))
|
||||||
% (name, name, name, member.identifier.name, name))
|
else:
|
||||||
return CGGeneric("%s\n" % insertion)
|
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])
|
memberInits = CGList([memberInit(m) for m in self.memberInfo])
|
||||||
memberInserts = CGList([memberInsert(m) for m in self.memberInfo])
|
memberInserts = CGList([memberInsert(m) for m in self.memberInfo])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue