mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 23:04:49 +00:00
cache the initial context in inc_dec
This commit is contained in:
parent
f76195d05c
commit
31e1fe8870
2 changed files with 17 additions and 12 deletions
|
@ -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(
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue