diff --git a/src/vm/mod.rs b/src/vm/mod.rs index ca25005..60f6e78 100644 --- a/src/vm/mod.rs +++ b/src/vm/mod.rs @@ -55,14 +55,12 @@ pub fn run(mut prog: Program) -> Result { let arena: Arena]> = Arena::new(|mc| { new(&mut prog, mc) }); - eval(prog.top_level.into_iter(), &arena, |val| { - Ok(arena.mutate(|_, root: &GcRoot| { - val.to_public(&root.vm, &mut HashSet::new()) - })) + eval(prog.top_level.into_iter(), &arena, |val, vm| { + Ok(val.to_public(vm, &mut HashSet::new())) }) } -fn eval<'gc, T, F: for<'a> FnOnce(Value<'a>) -> Result>( +fn eval<'gc, T, F: for<'a> FnOnce(Value<'a>, &VM<'a>) -> Result>( opcodes: impl Iterator, arena: &Arena Rootable<'a, Root = GcRoot<'a>>>, f: F @@ -87,7 +85,7 @@ fn eval<'gc, T, F: for<'a> FnOnce(Value<'a>) -> Result>( assert_eq!(ctx.stack.len(), 1); let mut ret = ctx.stack.pop(); ret.force(&root.vm, mc); - f(ret) + f(ret, &root.vm) }) }