rustc_infer/infer/
projection.rs1use rustc_middle::traits::ObligationCause;
2use rustc_middle::ty;
3
4use super::InferCtxt;
5use crate::infer::Term;
6use crate::traits::{Obligation, PredicateObligations};
7
8impl<'tcx> InferCtxt<'tcx> {
9 pub fn projection_term_to_infer(
16 &self,
17 param_env: ty::ParamEnv<'tcx>,
18 alias_term: ty::AliasTerm<'tcx>,
19 cause: ObligationCause<'tcx>,
20 recursion_depth: usize,
21 obligations: &mut PredicateObligations<'tcx>,
22 ) -> Term<'tcx> {
23 if true {
if !!self.next_trait_solver() {
::core::panicking::panic("assertion failed: !self.next_trait_solver()")
};
};debug_assert!(!self.next_trait_solver());
24
25 let span = self.tcx.def_span(alias_term.expect_projection_def_id());
26 let infer_var = if alias_term.kind.is_type() {
27 self.next_ty_var(span).into()
28 } else {
29 self.next_const_var(span).into()
30 };
31
32 let projection = ty::ProjectionPredicate { projection_term: alias_term, term: infer_var };
33 let obligation =
34 Obligation::with_depth(self.tcx, cause, recursion_depth, param_env, projection);
35 obligations.push(obligation);
36
37 infer_var
38 }
39}