From 904fd111bcd539190cf6bcf10f60c29813c7012b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gustav=20S=C3=B6rn=C3=A4s?= Date: Thu, 28 Jan 2021 21:56:51 +0100 Subject: assign to blob fields First try babyyyyyyyyy --- src/vm.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/vm.rs') diff --git a/src/vm.rs b/src/vm.rs index 5b0abae..4e501ba 100644 --- a/src/vm.rs +++ b/src/vm.rs @@ -22,7 +22,7 @@ macro_rules! error { #[derive(Clone)] pub enum Value { Blob(usize), - BlobInstance(usize, Vec), + BlobInstance(usize, Rc>>), Float(f64), Int(i64), Bool(bool), @@ -422,7 +422,7 @@ impl VM { let inst = self.stack.pop(); if let Some(Value::BlobInstance(ty, values)) = inst { let slot = self.blobs[ty].name_to_field.get(&field).unwrap().0; - self.stack.push(values[slot].clone()); + self.stack.push(values.borrow()[slot].clone()); } else { error!(self, ErrorKind::RuntimeTypeError(Op::Get(field.clone()), vec![inst.unwrap()])); } @@ -431,9 +431,9 @@ impl VM { Op::Set(field) => { let value = self.stack.pop().unwrap(); let inst = self.stack.pop(); - if let Some(Value::BlobInstance(ty, mut values)) = inst { + if let Some(Value::BlobInstance(ty, values)) = inst { let slot = self.blobs[ty].name_to_field.get(&field).unwrap().0; - values[slot] = value; + values.borrow_mut()[slot] = value; } else { error!(self, ErrorKind::RuntimeTypeError(Op::Get(field.clone()), vec![inst.unwrap()])); } @@ -601,7 +601,7 @@ impl VM { } self.stack.pop(); - self.stack.push(Value::BlobInstance(blob_id, values)); + self.stack.push(Value::BlobInstance(blob_id, Rc::new(RefCell::new(values)))); } Value::Function(_, block) => { let inner = block.borrow(); @@ -809,7 +809,7 @@ impl VM { } self.stack.pop(); - self.stack.push(Value::BlobInstance(blob_id, values)); + self.stack.push(Value::BlobInstance(blob_id, Rc::new(RefCell::new(values)))); } Value::Function(_, block) => { let inner = block.borrow(); -- cgit v1.2.1