feat: ref
This commit is contained in:
@@ -37,12 +37,12 @@ impl VM {
|
||||
VM { thunks, funcs }
|
||||
}
|
||||
|
||||
pub fn get_thunk(&self, idx: usize) -> Thunk {
|
||||
self.thunks[idx].clone()
|
||||
pub fn get_thunk(&self, idx: usize) -> &Thunk {
|
||||
&self.thunks[idx]
|
||||
}
|
||||
|
||||
pub fn get_func(&self, idx: usize) -> Func {
|
||||
self.funcs[idx].clone()
|
||||
pub fn get_func(&self, idx: usize) -> &Func {
|
||||
&self.funcs[idx]
|
||||
}
|
||||
|
||||
pub fn eval(&self, opcodes: OpCodes, env: Arc<Env>) -> Result<Value> {
|
||||
@@ -101,9 +101,8 @@ impl VM {
|
||||
stack.push(func.call(self, args)?)?;
|
||||
}
|
||||
OpCode::Func { idx } => {
|
||||
let mut func = self.get_func(idx);
|
||||
func.env = Some(env.captured());
|
||||
stack.push(Value::Func(func))?;
|
||||
self.get_func(idx).env.get_or_init(|| env.captured());
|
||||
stack.push(Value::Func(idx))?;
|
||||
}
|
||||
OpCode::UnOp { op } => {
|
||||
use UnOp::*;
|
||||
|
||||
Reference in New Issue
Block a user