Trait rustc_middle::ty::relate::TypeRelation
source · pub trait TypeRelation<'tcx>: Sized {
fn tcx(&self) -> TyCtxt<'tcx>;
fn param_env(&self) -> ParamEnv<'tcx>;
fn tag(&self) -> &'static str;
fn a_is_expected(&self) -> bool;
fn relate_with_variance<T: Relate<'tcx>>(
&mut self,
variance: Variance,
info: VarianceDiagInfo<'tcx>,
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 consts(
&mut self,
a: Const<'tcx>,
b: Const<'tcx>
) -> RelateResult<'tcx, Const<'tcx>>;
fn binders<T>(
&mut self,
a: Binder<'tcx, T>,
b: Binder<'tcx, T>
) -> RelateResult<'tcx, Binder<'tcx, 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: SubstsRef<'tcx>,
b_subst: SubstsRef<'tcx>
) -> RelateResult<'tcx, SubstsRef<'tcx>> { ... }
}
Required Methods
sourcefn a_is_expected(&self) -> bool
fn a_is_expected(&self) -> bool
Returns true
if the value a
is the “expected” type in the
relation. Just affects error messages.
sourcefn relate_with_variance<T: Relate<'tcx>>(
&mut self,
variance: Variance,
info: VarianceDiagInfo<'tcx>,
a: T,
b: T
) -> RelateResult<'tcx, T>
fn relate_with_variance<T: Relate<'tcx>>(
&mut self,
variance: Variance,
info: VarianceDiagInfo<'tcx>,
a: T,
b: T
) -> RelateResult<'tcx, T>
Switch variance for the purpose of relating a
and b
.
Provided Methods
sourcefn with_cause<F, R>(&mut self, _cause: Cause, f: F) -> Rwhere
fn with_cause<F, R>(&mut self, _cause: Cause, f: F) -> Rwhere
F: FnOnce(&mut Self) -> R,
sourcefn relate<T: Relate<'tcx>>(&mut self, a: T, b: T) -> RelateResult<'tcx, T>
fn relate<T: Relate<'tcx>>(&mut self, a: T, b: T) -> RelateResult<'tcx, T>
Generic relation routine suitable for most anything.
sourcefn relate_item_substs(
&mut self,
item_def_id: DefId,
a_subst: SubstsRef<'tcx>,
b_subst: SubstsRef<'tcx>
) -> RelateResult<'tcx, SubstsRef<'tcx>>
fn relate_item_substs(
&mut self,
item_def_id: DefId,
a_subst: SubstsRef<'tcx>,
b_subst: SubstsRef<'tcx>
) -> RelateResult<'tcx, SubstsRef<'tcx>>
Relate the two substitutions for the given item. The default is to look up the variance for the item and proceed accordingly.