Builds a [`MutCtx`] from grouped mutual constant classes, assigning indices to types first and then to constructors.
(classes: &[Vec<&MutConst>])
| 174 | /// Builds a [`MutCtx`] from grouped mutual constant classes, assigning |
| 175 | /// indices to types first and then to constructors. |
| 176 | pub fn ctx(classes: &[Vec<&MutConst>]) -> MutCtx { |
| 177 | let mut mut_ctx = FxHashMap::default(); |
| 178 | let mut i = classes.len(); |
| 179 | for (j, consts) in classes.iter().enumerate() { |
| 180 | let mut max_ctors = 0; |
| 181 | for cnst in consts { |
| 182 | mut_ctx.insert(cnst.name(), Nat(j.into())); |
| 183 | max_ctors = usize::max(max_ctors, cnst.ctors().len()); |
| 184 | for (cidx, c) in cnst.ctors().iter().enumerate() { |
| 185 | mut_ctx.insert(c.cnst.name.clone(), Nat((i + cidx).into())); |
| 186 | } |
| 187 | } |
| 188 | i += max_ctors; |
| 189 | } |
| 190 | mut_ctx |
| 191 | } |
| 192 | } |
| 193 | |
| 194 | #[cfg(test)] |