diff --git a/rust/src/vm.rs b/rust/src/vm.rs index cc2eb68..db7c172 100644 --- a/rust/src/vm.rs +++ b/rust/src/vm.rs @@ -1,7 +1,10 @@ use color_eyre::eyre::Result; use thiserror::Error; -use crate::chunk::{Chunk, DisassembledInstruction, OpCode}; +use crate::{ + chunk::{Chunk, DisassembledInstruction, OpCode}, + value::Value, +}; use tracing::debug; #[derive(Error, Debug)] @@ -15,11 +18,18 @@ pub enum InterpretError { pub struct VM { chunk: Chunk, ip: usize, + stack: [Value; 256], + stack_top: usize, } impl VM { pub fn new(chunk: Chunk) -> Self { - Self { chunk, ip: 0 } + Self { + chunk, + ip: 0, + stack: [0.0; 256], + stack_top: 0, + } } pub fn interpret(&mut self) -> Result<()> { @@ -37,4 +47,14 @@ impl VM { self.ip += 1; } } + + fn push(&mut self, value: Value) { + self.stack[self.stack_top] = value; + self.stack_top += 1; + } + + fn pop(&mut self) -> Value { + self.stack_top -= 1; + self.stack[self.stack_top] + } }