15.2.1
change upstmykoqqumnrnxonzqsyuwyqknrtnr
commit d326cf4c4caa0d1d069f44e6158ebbedf5b0cd23
author Alpha Chen <alpha@kejadlen.dev>
date
parent tzlptylk
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]
+    }
 }