diff --git a/src/main.rs b/src/main.rs index 1261fda..8b0185f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -75,12 +75,12 @@ pub fn run(src: &'static str) { pub fn main() { env::set_var("RUST_BACKTRACE", "1"); let src = " -fn add_one (x) -> add (x, 1) -fn double (x) -> add (x, x) -fn square (x) -> mult (x, x) - -double (2) - +let whatevs = nil +let mult_factor = 3 +fn mymult (x) -> mult (x, mult_factor) +fn thing (x) -> mymult (x) + +thing (2) "; run(src); } diff --git a/src/vm.rs b/src/vm.rs index 017908e..cec144f 100644 --- a/src/vm.rs +++ b/src/vm.rs @@ -896,7 +896,7 @@ impl Vm { let mut frame = CallFrame { function: val, arity, - stack_base: self.stack.len() - arity as usize, + stack_base: self.stack.len() - arity as usize - 1, ip: 0, }; @@ -976,7 +976,7 @@ impl Vm { let mut frame = CallFrame { function: val, arity, - stack_base: self.stack.len() - arity as usize, + stack_base: self.stack.len() - arity as usize - 1, ip: 0, }; @@ -1057,8 +1057,6 @@ impl Vm { GetUpvalue => { let idx = self.chunk().bytecode[self.ip + 1]; self.ip += 2; - println!("getting upvalue {idx}"); - dbg!(&self.frame.function); if let Value::Fn(ref inner) = self.frame.function { self.push(inner.as_ref().upvalue(idx)); } else {