cairo_lang_lowering/optimizations/
var_renamer.rs1use cairo_lang_utils::unordered_hash_map::UnorderedHashMap;
2
3use crate::utils::Rebuilder;
4use crate::{BlockId, VariableId};
5
6#[derive(Default)]
10pub struct VarRenamer {
11 pub renamed_vars: UnorderedHashMap<VariableId, VariableId>,
12}
13
14impl Rebuilder for VarRenamer {
15 fn map_var_id(&mut self, var: VariableId) -> VariableId {
16 let Some(mut new_var_id) = self.renamed_vars.get(&var).cloned() else {
17 return var;
18 };
19 while let Some(new_id) = self.renamed_vars.get(&new_var_id) {
20 assert_ne!(new_var_id, *new_id);
21 new_var_id = *new_id;
22 }
23
24 self.renamed_vars.insert(var, new_var_id);
25 new_var_id
26 }
27
28 fn map_block_id(&mut self, block: BlockId) -> BlockId {
29 block
30 }
31}