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.