From 319c12c1f44c1da3d7f5508b5c9ade5f3aa4b4d0 Mon Sep 17 00:00:00 2001 From: imxyy_soope_ Date: Sun, 25 May 2025 17:28:33 +0800 Subject: [PATCH] fix(vm): lifetime (still does not compile) --- src/vm/mod.rs | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) 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) }) }