mirror of
https://github.com/servo/servo.git
synced 2025-08-04 05:00:08 +01:00
Rewrite the dictionary codegen to use pattern matching rather than is_some/unwrap.
This commit is contained in:
parent
2a91e987b4
commit
ebd9b9a519
1 changed files with 9 additions and 8 deletions
|
@ -4123,25 +4123,26 @@ class CGDictionary(CGThing):
|
||||||
return declType.define()
|
return declType.define()
|
||||||
|
|
||||||
def getMemberConversion(self, memberInfo):
|
def getMemberConversion(self, memberInfo):
|
||||||
|
def indent(s):
|
||||||
|
return CGIndenter(CGGeneric(s), 8).define()
|
||||||
|
|
||||||
member, (templateBody, default, declType, _) = memberInfo
|
member, (templateBody, default, declType, _) = memberInfo
|
||||||
if not member.defaultValue:
|
if not member.defaultValue:
|
||||||
raise TypeError("We don't support dictionary members without a "
|
raise TypeError("We don't support dictionary members without a "
|
||||||
"default value.")
|
"default value.")
|
||||||
|
|
||||||
replacements = { "val": "value.unwrap()" }
|
replacements = { "val": "value" }
|
||||||
conversion = string.Template(templateBody).substitute(replacements)
|
conversion = string.Template(templateBody).substitute(replacements)
|
||||||
conversion = CGIndenter(
|
|
||||||
CGIfElseWrapper("value.is_some()",
|
|
||||||
CGGeneric(conversion),
|
|
||||||
CGGeneric(default)), 8).define()
|
|
||||||
|
|
||||||
conversion = (
|
conversion = (
|
||||||
"match get_dictionary_property(cx, object, \"%s\") {\n"
|
"match get_dictionary_property(cx, object, \"%s\") {\n"
|
||||||
" Err(()) => return Err(()),\n"
|
" Err(()) => return Err(()),\n"
|
||||||
" Ok(value) => {\n"
|
" Ok(Some(value)) => {\n"
|
||||||
"%s\n"
|
"%s\n"
|
||||||
" },\n"
|
" },\n"
|
||||||
"}") % (member.identifier.name, conversion)
|
" Ok(None) => {\n"
|
||||||
|
"%s\n"
|
||||||
|
" },\n"
|
||||||
|
"}") % (member.identifier.name, indent(conversion), indent(default))
|
||||||
|
|
||||||
return CGGeneric(conversion)
|
return CGGeneric(conversion)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue