diff --git a/compiler/mono/src/inc_dec.rs b/compiler/mono/src/inc_dec.rs index cf0e06171b..622946c0f4 100644 --- a/compiler/mono/src/inc_dec.rs +++ b/compiler/mono/src/inc_dec.rs @@ -1259,14 +1259,25 @@ fn update_jp_live_vars(j: JoinPointId, ys: &[Param], v: &Stmt<'_>, m: &mut JPLiv m.insert(j, j_live_vars); } -pub fn visit_proc<'a>( +pub fn visit_procs<'a>( arena: &'a Bump, param_map: &'a ParamMap<'a>, - proc: &mut Proc<'a>, - layout: ProcLayout<'a>, + procs: &mut MutMap<(Symbol, ProcLayout<'a>), Proc<'a>>, ) { let ctx = Context::new(arena, param_map); + for (key, proc) in procs.iter_mut() { + visit_proc(arena, param_map, &ctx, proc, key.1); + } +} + +fn visit_proc<'a>( + arena: &'a Bump, + param_map: &'a ParamMap<'a>, + ctx: &Context<'a>, + proc: &mut Proc<'a>, + layout: ProcLayout<'a>, +) { let params = match param_map.get_symbol(proc.name, layout) { Some(slice) => slice, None => Vec::from_iter_in( diff --git a/compiler/mono/src/ir.rs b/compiler/mono/src/ir.rs index b4a5cd3681..1296aa3030 100644 --- a/compiler/mono/src/ir.rs +++ b/compiler/mono/src/ir.rs @@ -222,9 +222,7 @@ impl<'a> Proc<'a> { ) { let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, procs)); - for (key, proc) in procs.iter_mut() { - crate::inc_dec::visit_proc(arena, borrow_params, proc, key.1); - } + crate::inc_dec::visit_procs(arena, borrow_params, procs); } pub fn insert_reset_reuse_operations<'i>( @@ -430,9 +428,7 @@ impl<'a> Procs<'a> { let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, &result)); - for (key, proc) in result.iter_mut() { - crate::inc_dec::visit_proc(arena, borrow_params, proc, key.1); - } + crate::inc_dec::visit_procs(arena, borrow_params, &mut result); result } @@ -473,9 +469,7 @@ impl<'a> Procs<'a> { let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, &result)); - for (key, proc) in result.iter_mut() { - crate::inc_dec::visit_proc(arena, borrow_params, proc, key.1); - } + crate::inc_dec::visit_procs(arena, borrow_params, &mut result); (result, borrow_params) }