MCPcopy Create free account
hub / github.com/argumentcomputer/ix / get_expr_references

Function get_expr_references

crates/compile/src/graph.rs:137–175  ·  view source on GitHub ↗
(
  expr: &'a Expr,
  cache: &mut FxHashMap<&'a Expr, NameSet>,
)

Source from the content-addressed store, hash-verified

135fn 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
150pub 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

Callers 1

Calls 5

merge_name_setsFunction · 0.85
as_dataMethod · 0.80
getMethod · 0.45
cloneMethod · 0.45
insertMethod · 0.45

Tested by

no test coverage detected