Expand description
Trait Resolution. See the rustc-dev-guide for more information on how this works.
Re-exports§
pub use self::ImplSource::*;
pub use self::SelectionError::*;
Modules§
- engine 🔒
- project 🔒Code for projecting associated types out of trait references.
- Experimental types for the trait query interface. The methods defined in this module are all based on canonicalization, which makes a canonical query by replacing unbound inference variables and regions, so that results can be reused more broadly. The providers for the queries defined here can be found in
rustc_traits
. - Candidate selection. See the rustc dev guide for more information on how this works.
Structs§
- Identifies a particular impl in the source, along with a set of generic parameters from the impl’s type/lifetime parameters. The
nested
vector corresponds to the nested obligations attached to the impl’s type parameters. - An
Obligation
represents some trait reference (e.g.,i32: Eq
) for which the “impl_source” must be found. The process of finding an “impl_source” is called “resolving” theObligation
. This process consists of either identifying animpl
(e.g.,impl Eq for i32
) that satisfies the obligation, or else finding a bound that is in scope. The eventual result is usually aSelection
(defined below). - The reason why we incurred this obligation; used for error reporting.
- The projection cache. Unlike the standard caches, this can include infcx-dependent type variables, therefore we have to roll the cache back each time we roll a snapshot back, to avoid assumptions on yet-unresolved inference variables. Types with placeholder regions also have to be removed when the respective snapshot ends.
Enums§
- These are the error cases for
codegen_select_candidate
. - The result of trait evaluation. The order is important here as the evaluation of a list is the maximum of the evaluations.
- Given the successful resolution of an obligation, the
ImplSource
indicates where the impl comes from. - Whether a value can be extracted into a const. Used for diagnostics around array repeat expressions.
- Reasons a method might not be dyn-compatible.
- Indicates that trait evaluation caused overflow and in which pass.
- Depending on the stage of compilation, we want projection to be more or less conservative.
- A trait error with most of its information removed. This is the error returned by an
ObligationCtxt
by default, and suitable if you just want to see if a predicate holds, and don’t particularly care about the error itself (except for if it’s an ambiguity or true error). - The ‘location’ at which we try to perform HIR-based wf checking. This information is used to obtain an
hir::Ty
, which we can walk in order to obtain precise spans for any ‘nested’ types (e.g.Foo
inOption<Foo>
).
Traits§
Type Aliases§
- A callback that can be provided to
inspect_typeck
. Invoked on evaluation of root obligations. - When performing resolution, it is typically the case that there can be one of three outcomes: