Array values are now pass-by-reference

This commit is contained in:
Daniel M 2022-02-10 21:27:05 +01:00
parent 3806a61756
commit 742d6706b0

View File

@ -41,7 +41,7 @@ pub enum RuntimeError {
pub enum Value { pub enum Value {
I64(i64), I64(i64),
String(Sid), String(Sid),
Array(RefCell<Vec<Value>>), Array(Rc<RefCell<Vec<Value>>>),
Void, Void,
} }
@ -245,7 +245,7 @@ impl Interpreter {
Value::I64(size) if !size.is_negative() => size, Value::I64(size) if !size.is_negative() => size,
val => return Err(RuntimeError::InvalidArrayIndex(val)), val => return Err(RuntimeError::InvalidArrayIndex(val)),
}; };
Value::Array(RefCell::new(vec![Value::I64(0); size as usize])) Value::Array(Rc::new(RefCell::new(vec![Value::I64(0); size as usize])))
} }
Expression::String(text) => Value::String(text.clone()), Expression::String(text) => Value::String(text.clone()),
Expression::BinOp(bo, lhs, rhs) => self.resolve_binop(bo, lhs, rhs)?, Expression::BinOp(bo, lhs, rhs) => self.resolve_binop(bo, lhs, rhs)?,