Modules

Trait Resolution. See the rustc-dev-guide for more information on how this works.

Structs

“Elaboration” is the process of identifying all the predicates that are implied by a source predicate. Currently, this basically means walking the “supertraits” and other similar assumptions. For example, if we know that T: Ord, the elaborator would deduce that T: PartialOrd holds as well. Similarly, if we have trait Foo: 'static, and we know that T: Foo, then we know that T: 'static.
A filter around an iterator of predicates that makes it yield up just trait references.
“Trait alias expansion” is the process of expanding a sequence of trait references into another sequence by transitively following all trait aliases. e.g. If you have bounds like Foo + Send, a trait alias trait Foo = Bar + Sync;, and another trait alias trait Bar = Read + Write, then the bounds would expand to Read + Write + Sync + Send. Expansion is done via a DFS (depth-first search), and the visited field is used to avoid cycles.
Stores information about the expansion of a trait via a path of zero or more trait aliases.

Enums

Functions

Given an upcast trait object described by object, returns the index of the method method_def_id (which should be part of object.upcast_trait_ref) within the vtable for object.
Instantiate all bound parameters of the impl subject with the given substs, returning the resulting subject and all obligations that arise. The obligations are closed under normalization.
A specialized variant of elaborate_trait_refs that only elaborates trait references that may define the given associated type assoc_name. It uses the super_predicates_that_define_assoc_type query to avoid enumerating super-predicates that aren’t related to assoc_item. This is used when resolving types like Self::Item or T::Item and helps to avoid cycle errors (see e.g. #35237).
Casts a trait reference into a reference to one of its super traits; returns None if target_trait_def_id is not a supertrait.

Type Definitions