aboutsummaryrefslogtreecommitdiff
path: root/crates/sloth_vm/src/vm.rs
diff options
context:
space:
mode:
authorCody <cody@codyq.dev>2023-04-14 04:50:53 -0500
committerCody <cody@codyq.dev>2023-04-14 04:50:53 -0500
commit5dbfa844a37cf00125db891d095d94620ba24879 (patch)
tree441c8408ae873e6926e8864d353e71fdad809b4e /crates/sloth_vm/src/vm.rs
parent97b7cd10d2bec408cc237e13c61562c810d8fd29 (diff)
downloadsloth-5dbfa844a37cf00125db891d095d94620ba24879.tar.gz
awful
Diffstat (limited to 'crates/sloth_vm/src/vm.rs')
-rw-r--r--crates/sloth_vm/src/vm.rs17
1 files changed, 14 insertions, 3 deletions
diff --git a/crates/sloth_vm/src/vm.rs b/crates/sloth_vm/src/vm.rs
index 2d58c3d..3600719 100644
--- a/crates/sloth_vm/src/vm.rs
+++ b/crates/sloth_vm/src/vm.rs
@@ -3,7 +3,7 @@ use std::mem::MaybeUninit;
use sloth_bytecode::Opcode;
use crate::value::{Function, Object, ObjectType, Primitive};
-use crate::{native, ObjectMap, Stack};
+use crate::{native, vm, ObjectMap, Stack};
#[derive(Clone, Copy)]
pub struct CallFrame {
@@ -62,10 +62,11 @@ impl CallStack {
}
}
+// TODO: Fix visibility
pub struct VM {
- stack: Stack,
+ pub stack: Stack,
call_stack: CallStack,
- objects: ObjectMap,
+ pub objects: ObjectMap,
}
impl Default for VM {
@@ -128,6 +129,16 @@ impl VM {
self.stack[self.call_stack.peek().stack_offset + idx] = value;
}
+ Opcode::Box => {
+ // FIXME: TODO: MEGA CURSED
+ let pos = self.read_u16() as usize;
+ let value = self.stack.pop();
+
+ let object = vm::Object::new(ObjectType::Box(value));
+
+ self.objects.heap[pos] = object;
+ self.stack.push(Object(pos as u32));
+ }
Opcode::Add => {
let value = match self.stack.pop2() {