From b8e916a0ab251a526beb9eacf4266e9f85925e54 Mon Sep 17 00:00:00 2001 From: Chris Fallin Date: Sat, 4 Sep 2021 20:37:47 -0700 Subject: [PATCH] Another example, testing rule priorities a bit --- cranelift/isle/isle_examples/test2.isle | 19 +++++++++++++++++++ cranelift/isle/src/codegen.rs | 15 ++++++++++----- 2 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 cranelift/isle/isle_examples/test2.isle diff --git a/cranelift/isle/isle_examples/test2.isle b/cranelift/isle/isle_examples/test2.isle new file mode 100644 index 0000000000..34c5f1c170 --- /dev/null +++ b/cranelift/isle/isle_examples/test2.isle @@ -0,0 +1,19 @@ +(type u32 (primitive u32)) +(type A (enum + (A1 (x B) (y B)))) +(type B (enum + (B1 (x u32)))) + +(decl A2B (A) B) + +(rule 1 + (A2B (A.A1 _ (B.B1 x))) + (B.B1 x)) + +(rule 1 + (A2B (A.A1 (B.B1 x) _)) + (B.B1 x)) + +(rule -1 + (A2B (A.A1 _ _)) + (B.B1 42)) diff --git a/cranelift/isle/src/codegen.rs b/cranelift/isle/src/codegen.rs index 42257f7fee..f15781e8b6 100644 --- a/cranelift/isle/src/codegen.rs +++ b/cranelift/isle/src/codegen.rs @@ -712,7 +712,11 @@ impl<'a> Codegen<'a> { let mut body_ctx: BodyContext = Default::default(); body_ctx.expected_return_vals = 1; - self.generate_body(code, /* depth = */ 0, trie, " ", &mut body_ctx)?; + let returned = + self.generate_body(code, /* depth = */ 0, trie, " ", &mut body_ctx)?; + if !returned { + writeln!(code, " return None;")?; + } writeln!(code, "}}")?; } @@ -768,7 +772,11 @@ impl<'a> Codegen<'a> { let mut body_ctx: BodyContext = Default::default(); body_ctx.expected_return_vals = ret_tuple_tys.len(); body_ctx.tuple_return = true; - self.generate_body(code, /* depth = */ 0, trie, " ", &mut body_ctx)?; + let returned = + self.generate_body(code, /* depth = */ 0, trie, " ", &mut body_ctx)?; + if !returned { + writeln!(code, " return None;")?; + } writeln!(code, "}}")?; } @@ -1092,9 +1100,6 @@ impl<'a> Codegen<'a> { } } - if !returned { - writeln!(code, "{}return None;", indent)?; - } Ok(returned) } }