From 6d0978226e413af828c114dfdf8e66ff71537671 Mon Sep 17 00:00:00 2001 From: Tom Schuster Date: Sun, 11 Oct 2020 02:37:25 +0200 Subject: [PATCH] Basic block support in JIT --- src/compile.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/compile.rs b/src/compile.rs index f92eadf..13eac5e 100644 --- a/src/compile.rs +++ b/src/compile.rs @@ -1388,14 +1388,18 @@ impl Compiler { self.emit(Instruction::CompareOperation { op: to_operator(ops.last().unwrap()), }); - self.emit(Instruction::Jump { target: last_label }); - // early exit left us with stack: `rhs, comparison_result`. We need to clean up rhs. - self.set_label(break_label); - self.emit(Instruction::Rotate { amount: 2 }); - self.emit(Instruction::Pop); + if vals.len() > 2 { + self.emit(Instruction::Jump { target: last_label }); + + // early exit left us with stack: `rhs, comparison_result`. We need to clean up rhs. + self.set_label(break_label); + self.emit(Instruction::Rotate { amount: 2 }); + self.emit(Instruction::Pop); + + self.set_label(last_label); + } - self.set_label(last_label); Ok(()) }