Trait rustc_middle::ty::relate::TypeRelation[][src]

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,
        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: &'tcx Const<'tcx>,
        b: &'tcx Const<'tcx>
    ) -> RelateResult<'tcx, &'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

fn tcx(&self) -> TyCtxt<'tcx>[src]

fn param_env(&self) -> ParamEnv<'tcx>[src]

fn tag(&self) -> &'static str[src]

Expand description

Returns a static string we can use for printouts.

fn a_is_expected(&self) -> bool[src]

Expand description

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>
[src]

Expand description

Switch variance for the purpose of relating a and b.

fn tys(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) -> RelateResult<'tcx, Ty<'tcx>>[src]

fn regions(
    &mut self,
    a: Region<'tcx>,
    b: Region<'tcx>
) -> RelateResult<'tcx, Region<'tcx>>
[src]

fn consts(
    &mut self,
    a: &'tcx Const<'tcx>,
    b: &'tcx Const<'tcx>
) -> RelateResult<'tcx, &'tcx Const<'tcx>>
[src]

fn binders<T>(
    &mut self,
    a: Binder<'tcx, T>,
    b: Binder<'tcx, T>
) -> RelateResult<'tcx, Binder<'tcx, T>> where
    T: Relate<'tcx>, 
[src]

Loading content...

Provided methods

fn with_cause<F, R>(&mut self, _cause: Cause, f: F) -> R where
    F: FnOnce(&mut Self) -> R, 
[src]

fn relate<T: Relate<'tcx>>(&mut self, a: T, b: T) -> RelateResult<'tcx, T>[src]

Expand description

Generic relation routine suitable for most anything.

fn relate_item_substs(
    &mut self,
    item_def_id: DefId,
    a_subst: SubstsRef<'tcx>,
    b_subst: SubstsRef<'tcx>
) -> RelateResult<'tcx, SubstsRef<'tcx>>
[src]

Expand description

Relate the two substitutions for the given item. The default is to look up the variance for the item and proceed accordingly.

Loading content...

Implementors

impl<'tcx> TypeRelation<'tcx> for Match<'tcx>[src]

fn tag(&self) -> &'static str[src]

fn tcx(&self) -> TyCtxt<'tcx>[src]

fn param_env(&self) -> ParamEnv<'tcx>[src]

fn a_is_expected(&self) -> bool[src]

fn relate_with_variance<T: Relate<'tcx>>(
    &mut self,
    _: Variance,
    a: T,
    b: T
) -> RelateResult<'tcx, T>
[src]

fn regions(
    &mut self,
    a: Region<'tcx>,
    b: Region<'tcx>
) -> RelateResult<'tcx, Region<'tcx>>
[src]

fn tys(&mut self, a: Ty<'tcx>, b: Ty<'tcx>) -> RelateResult<'tcx, Ty<'tcx>>[src]

fn consts(
    &mut self,
    a: &'tcx Const<'tcx>,
    b: &'tcx Const<'tcx>
) -> RelateResult<'tcx, &'tcx Const<'tcx>>
[src]

fn binders<T>(
    &mut self,
    a: Binder<'tcx, T>,
    b: Binder<'tcx, T>
) -> RelateResult<'tcx, Binder<'tcx, T>> where
    T: Relate<'tcx>, 
[src]

Loading content...