From dad854677676ff24981d45277a31e5b7949a6b7d Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Wed, 17 Feb 2021 13:52:23 -0800 Subject: [PATCH] Generate more compact code for character set binary search --- cli/src/generate/render.rs | 47 ++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/cli/src/generate/render.rs b/cli/src/generate/render.rs index eb45eab5..e5d0e7dd 100644 --- a/cli/src/generate/render.rs +++ b/cli/src/generate/render.rs @@ -914,28 +914,41 @@ impl Generator { Comparator::Equal => "==", Comparator::GreaterOrEqual => ">=", }; - add!(self, "(c {} ", op); - self.add_character(*value); - add!(self, ")"); - let consequence = consequence.as_ref().map(Box::as_ref); let alternative = alternative.as_ref().map(Box::as_ref); - if alternative.is_none() { - if consequence != Some(&CharacterTree::Yes) { + + let simple = alternative.is_none() && consequence == Some(&CharacterTree::Yes); + + if !simple { + add!(self, "("); + } + + add!(self, "c {} ", op); + self.add_character(*value); + + if !simple { + if alternative.is_none() { add!(self, " && "); self.add_character_tree(consequence); + } else if consequence == Some(&CharacterTree::Yes) { + add!(self, " || "); + self.add_character_tree(alternative); + } else { + add!(self, "\n"); + indent!(self); + add_whitespace!(self); + add!(self, "? "); + self.add_character_tree(consequence); + add!(self, "\n"); + add_whitespace!(self); + add!(self, ": "); + self.add_character_tree(alternative); + dedent!(self); } - } else { - add!(self, "\n"); - indent!(self); - add_whitespace!(self); - add!(self, "? "); - self.add_character_tree(consequence); - add!(self, "\n"); - add_whitespace!(self); - add!(self, ": "); - self.add_character_tree(alternative); - dedent!(self); + } + + if !simple { + add!(self, ")"); } } Some(CharacterTree::Yes) => {