From 5dbfa844a37cf00125db891d095d94620ba24879 Mon Sep 17 00:00:00 2001 From: Cody Date: Fri, 14 Apr 2023 04:50:53 -0500 Subject: awful --- crates/sloth_vm/src/vm.rs | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) (limited to 'crates/sloth_vm/src/vm.rs') 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() { -- cgit v1.2.3