Skip to main content

Module select

Module select 

Source
Expand description

Candidate selection. See the rustc dev guide for more information on how this works.

Re-exportsΒ§

use std::cell::Cell; πŸ”’
use std::cell::RefCell; πŸ”’
use std::cmp; πŸ”’
use std::fmt; πŸ”’
use std::fmt::Display; πŸ”’
use std::ops::ControlFlow; πŸ”’
use hir::def::DefKind; πŸ”’
use rustc_attr_ir::lang_items::LangItem; πŸ”’
use rustc_data_structures::fx::FxIndexMap; πŸ”’
use rustc_data_structures::fx::FxIndexSet; πŸ”’
use rustc_errors::Diag; πŸ”’
use rustc_hir as hir; πŸ”’
use rustc_hir::def_id::DefId; πŸ”’
use rustc_infer::infer::BoundRegionConversionTime; πŸ”’
use rustc_infer::infer::BoundRegionConversionTime::HigherRankedType; πŸ”’
use rustc_infer::infer::DefineOpaqueTypes; πŸ”’
use rustc_infer::infer::at::ToTrace; πŸ”’
use rustc_infer::infer::relate::TypeRelation; πŸ”’
use rustc_infer::traits::ImplSource; πŸ”’
use rustc_infer::traits::PredicateObligations; πŸ”’
use rustc_infer::traits::TraitObligation; πŸ”’
use rustc_macros::TypeFoldable; πŸ”’
use rustc_macros::TypeVisitable; πŸ”’
use rustc_middle::dep_graph::DepKind; πŸ”’
use rustc_middle::dep_graph::DepNodeIndex; πŸ”’
use rustc_middle::ty::abstract_const::NotConstEvaluatable; πŸ”’
use rustc_middle::ty::error::TypeErrorToStringExt; πŸ”’
use rustc_middle::ty::print::PrintTraitRefExt as _; πŸ”’
use rustc_middle::ty::print::with_no_trimmed_paths; πŸ”’
use rustc_middle::ty::print::with_no_trimmed_paths; πŸ”’
use rustc_middle::ty; πŸ”’
use rustc_middle::ty::CallerBoundsIterator; πŸ”’
use rustc_middle::ty::CandidatePreferenceMode; πŸ”’
use rustc_middle::ty::CantBeErased; πŸ”’
use rustc_middle::ty::DeepRejectCtxt; πŸ”’
use rustc_middle::ty::GenericArgs; πŸ”’
use rustc_middle::ty::PolyProjectionClause; πŸ”’
use rustc_middle::ty::SizedTraitKind; πŸ”’
use rustc_middle::ty::Ty; πŸ”’
use rustc_middle::ty::TyCtxt; πŸ”’
use rustc_middle::ty::TypeFoldable; πŸ”’
use rustc_middle::ty::TypeVisitableExt; πŸ”’
use rustc_middle::ty::TypingMode; πŸ”’
use rustc_middle::ty::Unnormalized; πŸ”’
use rustc_middle::ty::Upcast; πŸ”’
use rustc_middle::ty::elaborate; πŸ”’
use rustc_middle::ty::may_use_unstable_feature; πŸ”’
use rustc_next_trait_solver::solve::AliasBoundKind; πŸ”’
use rustc_span::bug; πŸ”’
use tracing::debug; πŸ”’
use tracing::instrument; πŸ”’
use tracing::instrument; πŸ”’
use tracing::trace; πŸ”’
use super::project::ProjectionTermObligation; πŸ”’
use super::util::closure_trait_ref_and_return_type; πŸ”’
use super::ImplDerivedCause; πŸ”’
use super::Normalized; πŸ”’
use super::Obligation; πŸ”’
use super::ObligationCause; πŸ”’
use super::ObligationCauseCode; πŸ”’
use super::PolyTraitObligation; πŸ”’
use super::PredicateObligation; πŸ”’
use super::Selection; πŸ”’
use super::SelectionError; πŸ”’
use super::SelectionResult; πŸ”’
use super::TraitQueryMode; πŸ”’
use super::const_evaluatable; πŸ”’
use super::project; πŸ”’
use super::util; πŸ”’
use super::wf; πŸ”’
use crate::error_reporting::InferCtxtErrorExt; πŸ”’
use crate::infer::InferCtxt; πŸ”’
use crate::infer::InferOk; πŸ”’
use crate::infer::TypeFreshener; πŸ”’
use crate::solve::InferCtxtSelectExt as _; πŸ”’
use crate::traits::normalize::normalize_with_depth; πŸ”’
use crate::traits::normalize::normalize_with_depth_to; πŸ”’
use crate::traits::project::ProjectAndUnifyResult; πŸ”’
use crate::traits::project::ProjectionCacheKeyExt; πŸ”’
use crate::traits::EvaluateConstErr; πŸ”’
use crate::traits::ProjectionCacheKey; πŸ”’
use crate::traits::effects; πŸ”’
use crate::traits::implicit_fast_path; πŸ”’
use self::EvaluationResult::*; πŸ”’
use self::SelectionCandidate::*; πŸ”’

ModulesΒ§

_match πŸ”’
candidate_assembly πŸ”’
Candidate assembly.
confirmation πŸ”’
Confirmation.

StructsΒ§

AutoImplConstituents πŸ”’
EvaluatedCandidate πŸ”’
ProvisionalEvaluation πŸ”’
A cache value for the provisional cache: contains the depth-first number (DFN) and result.
ProvisionalEvaluationCache πŸ”’
The β€œprovisional evaluation cache” is used to store intermediate cache results when solving auto traits. Auto traits are unusual in that they can support cycles. So, for example, a β€œproof tree” like this would be ok:
SelectionCandidateSet πŸ”’
SelectionContext
TraitObligationStack πŸ”’
TraitObligationStackList πŸ”’

EnumsΒ§

EvaluationResult
The result of trait evaluation. The order is important here as the evaluation of a list is the maximum of the evaluations.
IntercrateAmbiguityCause
OverflowError
Indicates that trait evaluation caused overflow and in which pass.
ProjectionMatchesProjection πŸ”’
SelectionCandidate
The selection process begins by considering all impls, where clauses, and so forth that might resolve an obligation. Sometimes we’ll be able to say definitively that (e.g.) an impl does not apply to the obligation: perhaps it is defined for usize but the obligation is for i32. In that case, we drop the impl out of the list. But the other cases are considered candidates.

Type AliasesΒ§

EvaluationCache
SelectionCache