Trait rustc::ty::relate::TypeRelation
[−]
[src]
pub trait TypeRelation<'a, 'gcx: 'a + 'tcx, 'tcx: 'a>: Sized { fn tcx(&self) -> TyCtxt<'a, 'gcx, 'tcx>; fn tag(&self) -> &'static str; fn a_is_expected(&self) -> bool; fn relate_with_variance<T: Relate<'tcx>>(
&mut self,
variance: Variance,
a: &T,
b: &T
) -> RelateResult<'tcx, T>; fn tys(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) -> RelateResult<'tcx, Ty<'tcx>>; fn regions(
&mut self,
a: Region<'tcx>,
b: Region<'tcx>
) -> RelateResult<'tcx, Region<'tcx>>; fn binders<T>(
&mut self,
a: &Binder<T>,
b: &Binder<T>
) -> RelateResult<'tcx, Binder<T>>
where
T: Relate<'tcx>; fn with_cause<F, R>(&mut self, _cause: Cause, f: F) -> R
where
F: FnOnce(&mut Self) -> R, { ... } fn relate<T: Relate<'tcx>>(&mut self, a: &T, b: &T) -> RelateResult<'tcx, T> { ... } fn relate_item_substs(
&mut self,
item_def_id: DefId,
a_subst: &'tcx Substs<'tcx>,
b_subst: &'tcx Substs<'tcx>
) -> RelateResult<'tcx, &'tcx Substs<'tcx>> { ... } }
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Required Methods
fn tcx(&self) -> TyCtxt<'a, 'gcx, 'tcx>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
fn tag(&self) -> &'static str
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Returns a static string we can use for printouts.
fn a_is_expected(&self) -> bool
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Returns true if the value a
is the "expected" type in the
relation. Just affects error messages.
fn relate_with_variance<T: Relate<'tcx>>(
&mut self,
variance: Variance,
a: &T,
b: &T
) -> RelateResult<'tcx, T>
&mut self,
variance: Variance,
a: &T,
b: &T
) -> RelateResult<'tcx, T>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Switch variance for the purpose of relating a
and b
.
fn tys(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) -> RelateResult<'tcx, Ty<'tcx>>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
fn regions(
&mut self,
a: Region<'tcx>,
b: Region<'tcx>
) -> RelateResult<'tcx, Region<'tcx>>
&mut self,
a: Region<'tcx>,
b: Region<'tcx>
) -> RelateResult<'tcx, Region<'tcx>>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
fn binders<T>(
&mut self,
a: &Binder<T>,
b: &Binder<T>
) -> RelateResult<'tcx, Binder<T>> where
T: Relate<'tcx>,
&mut self,
a: &Binder<T>,
b: &Binder<T>
) -> RelateResult<'tcx, Binder<T>> where
T: Relate<'tcx>,
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Provided Methods
fn with_cause<F, R>(&mut self, _cause: Cause, f: F) -> R where
F: FnOnce(&mut Self) -> R,
F: FnOnce(&mut Self) -> R,
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
fn relate<T: Relate<'tcx>>(&mut self, a: &T, b: &T) -> RelateResult<'tcx, T>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Generic relation routine suitable for most anything.
fn relate_item_substs(
&mut self,
item_def_id: DefId,
a_subst: &'tcx Substs<'tcx>,
b_subst: &'tcx Substs<'tcx>
) -> RelateResult<'tcx, &'tcx Substs<'tcx>>
&mut self,
item_def_id: DefId,
a_subst: &'tcx Substs<'tcx>,
b_subst: &'tcx Substs<'tcx>
) -> RelateResult<'tcx, &'tcx Substs<'tcx>>
🔬 This is a nightly-only experimental API. (rustc_private
)
this crate is being loaded from the sysroot, an unstable location; did you mean to load this crate from crates.io via Cargo.toml
instead?
Relate the two substitutions for the given item. The default is to look up the variance for the item and proceed accordingly.
Implementors
impl<'a, 'gcx, 'tcx> TypeRelation<'a, 'gcx, 'tcx> for Match<'a, 'gcx, 'tcx>