Struct rustc_infer::traits::Obligation [−][src]
pub struct Obligation<'tcx, T> {
pub cause: ObligationCause<'tcx>,
pub param_env: ParamEnv<'tcx>,
pub predicate: T,
pub recursion_depth: usize,
}
Expand description
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” the Obligation
. This process consists of
either identifying an impl
(e.g., impl Eq for i32
) that
satisfies the obligation, or else finding a bound that is in
scope. The eventual result is usually a Selection
(defined below).
Fields
cause: ObligationCause<'tcx>
The reason we have to prove this thing.
param_env: ParamEnv<'tcx>
The environment in which we should prove this thing.
predicate: T
The thing we are trying to prove.
recursion_depth: usize
If we started proving this as a result of trying to prove something else, track the total depth to ensure termination. If this goes over a certain threshold, we abort compilation – in such cases, we can not say whether or not the predicate holds for certain. Stupid halting problem; such a drag.
Implementations
pub fn new(
cause: ObligationCause<'tcx>,
param_env: ParamEnv<'tcx>,
predicate: O
) -> Obligation<'tcx, O>
pub fn with_depth(
cause: ObligationCause<'tcx>,
recursion_depth: usize,
param_env: ParamEnv<'tcx>,
predicate: O
) -> Obligation<'tcx, O>
pub fn misc(
span: Span,
body_id: HirId,
param_env: ParamEnv<'tcx>,
trait_ref: O
) -> Obligation<'tcx, O>
Trait Implementations
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
This method tests for !=
.
fn visit_with<V>(
&self,
visitor: &mut V
) -> ControlFlow<<V as TypeVisitor<'tcx>>::BreakTy, ()> where
V: TypeVisitor<'tcx>,
Returns true
if self
has any late-bound regions that are either
bound by binder
or bound by some binder outside of binder
.
If binder
is ty::INNERMOST
, this indicates whether
there are any late-bound regions that appear free. Read more
Returns true
if this self
has any regions that escape binder
(and
hence are not bound by it). Read more
“Free” regions in this context means that it has any region that is not (a) erased or (b) late-bound. Read more
True if there are any un-erased free regions.
Indicates whether this value definitely references only ‘global’ generic parameters that are the same regardless of what fn we are in. This is used for caching. Read more
Indicates whether this value references only ‘global’ generic parameters that are the same regardless of what fn we are in. This is used for caching. Read more
True if there are any late-bound regions
Indicates whether this value still has parameters/placeholders/inference variables
which could be replaced later, in a way that would change the results of impl
specialization. Read more
Auto Trait Implementations
impl<'tcx, T> !RefUnwindSafe for Obligation<'tcx, T>
impl<'tcx, T> !Send for Obligation<'tcx, T>
impl<'tcx, T> !Sync for Obligation<'tcx, T>
impl<'tcx, T> Unpin for Obligation<'tcx, T> where
T: Unpin,
impl<'tcx, T> !UnwindSafe for Obligation<'tcx, T>
Blanket Implementations
Mutably borrows from an owned value. Read more
pub fn subst_spanned(
self,
tcx: TyCtxt<'tcx>,
substs: &[GenericArg<'tcx>],
span: Option<Span>
) -> T
Layout
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.