Module rustc_trait_selection::traits::util [−][src]
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 a trait trait_ref, returns the number of vtable entries
that come from trait_ref, excluding its supertraits. Used in
computing the vtable base for an upcast trait of a trait object.
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 with the given substs, returning the resulting trait ref 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.