Consume the `InferCx` and return a set of replacements that need to be performed to instantiate the global/function inferred with this `InferCx`. See `resolve_infer_var_to_concrete_or_param` for how inference variables are handled (using `generic_params` and `S::concrete_fallback()`).
(mut self, generic_params: RangeTo<Param>)
| 2179 | /// See `resolve_infer_var_to_concrete_or_param` for how inference variables |
| 2180 | /// are handled (using `generic_params` and `S::concrete_fallback()`). |
| 2181 | fn into_replacements(mut self, generic_params: RangeTo<Param>) -> Replacements { |
| 2182 | let mut with_instance: IndexMap<_, Vec<_>> = IndexMap::new(); |
| 2183 | for (loc, instance) in mem::take(&mut self.instantiated_operands) { |
| 2184 | with_instance |
| 2185 | .entry(Instance { |
| 2186 | generic_id: instance.generic_id, |
| 2187 | generic_args: InferVar::range_iter(&instance.generic_args) |
| 2188 | .map(|v| self.resolve_infer_var_to_concrete_or_param(v, generic_params)) |
| 2189 | .collect(), |
| 2190 | }) |
| 2191 | .or_default() |
| 2192 | .push(loc); |
| 2193 | } |
| 2194 | |
| 2195 | let with_concrete_or_param = mem::take(&mut self.inferred_operands) |
| 2196 | .into_iter() |
| 2197 | .map(|(loc, v)| { |
| 2198 | ( |
| 2199 | loc, |
| 2200 | self.resolve_infer_var_to_concrete_or_param(v, generic_params), |
| 2201 | ) |
| 2202 | }) |
| 2203 | .collect(); |
| 2204 | |
| 2205 | Replacements { |
| 2206 | with_instance, |
| 2207 | with_concrete_or_param, |
| 2208 | } |
| 2209 | } |
| 2210 | } |
| 2211 | |
| 2212 | // HACK(eddyb) this state could live in `Specializer` except for the fact that |
no test coverage detected