diff options
| author | Gustav Sörnäs <gustav@sornas.net> | 2021-01-28 21:56:51 +0100 |
|---|---|---|
| committer | Gustav Sörnäs <gustav@sornas.net> | 2021-01-28 21:56:51 +0100 |
| commit | 904fd111bcd539190cf6bcf10f60c29813c7012b (patch) | |
| tree | 9d048a633a63108c7dcc543584e85e5569a9f478 /src/vm.rs | |
| parent | 0159d05e183f58ae81d4697e0b178a487f0bde34 (diff) | |
| download | sylt-904fd111bcd539190cf6bcf10f60c29813c7012b.tar.gz | |
assign to blob fields
First try babyyyyyyyyy
Diffstat (limited to 'src/vm.rs')
| -rw-r--r-- | src/vm.rs | 12 |
1 files changed, 6 insertions, 6 deletions
@@ -22,7 +22,7 @@ macro_rules! error { #[derive(Clone)] pub enum Value { Blob(usize), - BlobInstance(usize, Vec<Value>), + BlobInstance(usize, Rc<RefCell<Vec<Value>>>), 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(); |
