mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 07:14:46 +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);
|
m.insert(j, j_live_vars);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn visit_proc<'a>(
|
pub fn visit_procs<'a>(
|
||||||
arena: &'a Bump,
|
arena: &'a Bump,
|
||||||
param_map: &'a ParamMap<'a>,
|
param_map: &'a ParamMap<'a>,
|
||||||
proc: &mut Proc<'a>,
|
procs: &mut MutMap<(Symbol, ProcLayout<'a>), Proc<'a>>,
|
||||||
layout: ProcLayout<'a>,
|
|
||||||
) {
|
) {
|
||||||
let ctx = Context::new(arena, param_map);
|
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) {
|
let params = match param_map.get_symbol(proc.name, layout) {
|
||||||
Some(slice) => slice,
|
Some(slice) => slice,
|
||||||
None => Vec::from_iter_in(
|
None => Vec::from_iter_in(
|
||||||
|
|
|
@ -222,9 +222,7 @@ impl<'a> Proc<'a> {
|
||||||
) {
|
) {
|
||||||
let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, procs));
|
let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, procs));
|
||||||
|
|
||||||
for (key, proc) in procs.iter_mut() {
|
crate::inc_dec::visit_procs(arena, borrow_params, procs);
|
||||||
crate::inc_dec::visit_proc(arena, borrow_params, proc, key.1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn insert_reset_reuse_operations<'i>(
|
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));
|
let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, &result));
|
||||||
|
|
||||||
for (key, proc) in result.iter_mut() {
|
crate::inc_dec::visit_procs(arena, borrow_params, &mut result);
|
||||||
crate::inc_dec::visit_proc(arena, borrow_params, proc, key.1);
|
|
||||||
}
|
|
||||||
|
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
@ -473,9 +469,7 @@ impl<'a> Procs<'a> {
|
||||||
|
|
||||||
let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, &result));
|
let borrow_params = arena.alloc(crate::borrow::infer_borrow(arena, &result));
|
||||||
|
|
||||||
for (key, proc) in result.iter_mut() {
|
crate::inc_dec::visit_procs(arena, borrow_params, &mut result);
|
||||||
crate::inc_dec::visit_proc(arena, borrow_params, proc, key.1);
|
|
||||||
}
|
|
||||||
|
|
||||||
(result, borrow_params)
|
(result, borrow_params)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue