Rewrite the dictionary codegen to use pattern matching rather than is_some/unwrap.

This commit is contained in:
Ms2ger 2014-06-02 15:44:03 +02:00
parent 2a91e987b4
commit ebd9b9a519

View file

@ -4123,25 +4123,26 @@ class CGDictionary(CGThing):
return declType.define()
def getMemberConversion(self, memberInfo):
def indent(s):
return CGIndenter(CGGeneric(s), 8).define()
member, (templateBody, default, declType, _) = memberInfo
if not member.defaultValue:
raise TypeError("We don't support dictionary members without a "
"default value.")
replacements = { "val": "value.unwrap()" }
replacements = { "val": "value" }
conversion = string.Template(templateBody).substitute(replacements)
conversion = CGIndenter(
CGIfElseWrapper("value.is_some()",
CGGeneric(conversion),
CGGeneric(default)), 8).define()
conversion = (
"match get_dictionary_property(cx, object, \"%s\") {\n"
" Err(()) => return Err(()),\n"
" Ok(value) => {\n"
" Ok(Some(value)) => {\n"
"%s\n"
" },\n"
"}") % (member.identifier.name, conversion)
" Ok(None) => {\n"
"%s\n"
" },\n"
"}") % (member.identifier.name, indent(conversion), indent(default))
return CGGeneric(conversion)