diff --git a/jit-compiler/src/codegen.rs b/jit-compiler/src/codegen.rs index 3eb3f9996..3f785fdae 100644 --- a/jit-compiler/src/codegen.rs +++ b/jit-compiler/src/codegen.rs @@ -277,7 +277,7 @@ impl<'a, T: FieldElement> CodeGenerator<'a, T> { .map(|MatchArm { pattern, value }| { Ok(format!( "{} => {},", - self.format_pattern(pattern), + format_pattern(pattern), self.format_expr(value)?, )) }) @@ -289,35 +289,36 @@ impl<'a, T: FieldElement> CodeGenerator<'a, T> { }) } - fn format_pattern(&mut self, pattern: &Pattern) -> String { - match pattern { - Pattern::CatchAll(_) => "_".to_string(), - Pattern::Ellipsis(_) => "..".to_string(), - Pattern::Number(_, n) => n.to_string(), - Pattern::String(_, s) => quote(s), - Pattern::Tuple(_, items) => format!( - "({})", - items.iter().map(|p| self.format_pattern(p)).join(", ") - ), - Pattern::Array(_, items) => format!( - "[{}]", - items.iter().map(|p| self.format_pattern(p)).join(", ") - ), - Pattern::Variable(_, var) => var.clone(), - Pattern::Enum(_, name, None) => escape_symbol(&name.to_string()), - Pattern::Enum(_, name, Some(fields)) => format!( - "{}({})", - escape_symbol(&name.to_string()), - fields.iter().map(|p| self.format_pattern(p)).join(", ") - ), - } - } - fn format_statement(&mut self, s: &StatementInsideBlock) -> Result { Err(format!("Implement {s}")) } } +fn format_pattern(pattern: &Pattern) -> String { + match pattern { + Pattern::CatchAll(_) => "_".to_string(), + Pattern::Ellipsis(_) => "..".to_string(), + Pattern::Number(_, n) => { + // TODO this should probably fail if the number is too large. + n.to_string() + } + Pattern::String(_, s) => quote(s), + Pattern::Tuple(_, items) => { + format!("({})", items.iter().map(format_pattern).join(", ")) + } + Pattern::Array(_, items) => { + format!("[{}]", items.iter().map(format_pattern).join(", ")) + } + Pattern::Variable(_, var) => var.clone(), + Pattern::Enum(_, name, None) => escape_symbol(&name.to_string()), + Pattern::Enum(_, name, Some(fields)) => format!( + "{}({})", + escape_symbol(&name.to_string()), + fields.iter().map(format_pattern).join(", ") + ), + } +} + pub fn escape_symbol(s: &str) -> String { // TODO better escaping s.replace('.', "_").replace("::", "_") diff --git a/jit-compiler/src/compiler.rs b/jit-compiler/src/compiler.rs index 27127d5e0..1e9f3ebf9 100644 --- a/jit-compiler/src/compiler.rs +++ b/jit-compiler/src/compiler.rs @@ -103,7 +103,7 @@ pub fn call_cargo(code: &str) -> Result<(Temp, String), String> { let lib_path = dir .join("target") .join("release") - .join(&format!("libpowdr_jit_compiled.{extension}")); + .join(format!("libpowdr_jit_compiled.{extension}")); Ok((dir, lib_path.to_str().unwrap().to_string())) }