From 4f7ba56d1f7c683129aace6ab1516a6e277e0b3d Mon Sep 17 00:00:00 2001 From: Scott Richmond Date: Fri, 23 May 2025 17:59:09 -0400 Subject: [PATCH] properly compile when expressions? --- src/compiler.rs | 8 ++++---- src/main.rs | 10 +--------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/src/compiler.rs b/src/compiler.rs index 3c9c32d..c1975a3 100644 --- a/src/compiler.rs +++ b/src/compiler.rs @@ -604,24 +604,24 @@ impl Compiler { When(clauses) => { let mut jump_idxes = vec![]; let mut clauses = clauses.iter(); - let stack_depth = self.stack_depth; while let Some((WhenClause(cond, body), _)) = clauses.next() { self.visit(cond.as_ref()); self.emit_op(Op::JumpIfFalse); let jif_jump_idx = self.len(); self.emit_byte(0xff); + self.stack_depth -= 1; self.visit(body); self.emit_op(Op::Jump); jump_idxes.push(self.len()); self.emit_byte(0xff); self.chunk.bytecode[jif_jump_idx] = self.len() as u8 - jif_jump_idx as u8 - 1; - self.stack_depth = stack_depth; + self.stack_depth -= 1; } - self.stack_depth += 1; self.emit_op(Op::PanicNoWhen); for idx in jump_idxes { - self.chunk.bytecode[idx] = self.len() as u8 - idx as u8 + 1; + self.chunk.bytecode[idx] = self.len() as u8 - idx as u8 - 1; } + self.stack_depth += 1; } WhenClause(..) => unreachable!(), Match(scrutinee, clauses) => { diff --git a/src/main.rs b/src/main.rs index dfe5715..10b374c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -74,15 +74,7 @@ pub fn run(src: &'static str) { pub fn main() { env::set_var("RUST_BACKTRACE", "1"); let src = " -let x = when { - false -> :no - nil -> { - let x = :no - x - } - :else -> :yes -} -x + "; run(src); }