( expr: &'a Expr, cache: &mut FxHashMap<&'a Expr, NameSet>, )
| 135 | fn merge_ref_maps(l: RefMap, r: RefMap) -> RefMap { |
| 136 | let (smaller, mut bigger) = if l.len() < r.len() { (l, r) } else { (r, l) }; |
| 137 | for (name, set) in smaller { |
| 138 | match bigger.entry(name) { |
| 139 | Entry::Vacant(entry) => { |
| 140 | entry.insert(set); |
| 141 | }, |
| 142 | Entry::Occupied(mut entry) => { |
| 143 | entry.get_mut().extend(set); |
| 144 | }, |
| 145 | } |
| 146 | } |
| 147 | bigger |
| 148 | } |
| 149 | |
| 150 | pub fn build_ref_graph(env: &Env) -> RefGraph { |
| 151 | let mk_in_refs = |name: &Name, deps: &NameSet| -> RefMap { |
| 152 | let mut in_refs = RefMap::from_iter([(name.clone(), NameSet::default())]); |
| 153 | for dep in deps { |
| 154 | match in_refs.entry(dep.clone()) { |
| 155 | Entry::Vacant(entry) => { |
| 156 | entry.insert(NameSet::from_iter([name.clone()])); |
| 157 | }, |
| 158 | Entry::Occupied(mut entry) => { |
| 159 | entry.get_mut().insert(name.clone()); |
| 160 | }, |
| 161 | } |
| 162 | } |
| 163 | in_refs |
| 164 | }; |
| 165 | |
| 166 | let merge = |l: RefMap, r: RefMap| -> RefMap { |
| 167 | let (smaller, mut bigger) = if l.len() < r.len() { (l, r) } else { (r, l) }; |
| 168 | for (name, set) in smaller { |
| 169 | match bigger.entry(name) { |
| 170 | Entry::Vacant(entry) => { |
| 171 | entry.insert(set); |
| 172 | }, |
| 173 | Entry::Occupied(mut entry) => { |
| 174 | entry.get_mut().extend(set); |
| 175 | }, |
| 176 | } |
| 177 | } |
| 178 | bigger |
no test coverage detected