pub trait TypeRelation<'tcx>: Sized {
    // Required methods
    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>;

    // Provided methods
    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_args(
        &mut self,
        item_def_id: DefId,
        a_arg: GenericArgsRef<'tcx>,
        b_arg: GenericArgsRef<'tcx>
    ) -> RelateResult<'tcx, GenericArgsRef<'tcx>> { ... }
}

Required Methods§

source

fn tcx(&self) -> TyCtxt<'tcx>

source

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

source

fn tag(&self) -> &'static str

Returns a static string we can use for printouts.

source

fn a_is_expected(&self) -> bool

Returns true if the value a is the “expected” type in the relation. Just affects error messages.

source

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.

source

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

source

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

source

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

source

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

Provided Methods§

source

fn with_cause<F, R>(&mut self, _cause: Cause, f: F) -> Rwhere F: FnOnce(&mut Self) -> R,

source

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

Generic relation routine suitable for most anything.

source

fn relate_item_args( &mut self, item_def_id: DefId, a_arg: GenericArgsRef<'tcx>, b_arg: GenericArgsRef<'tcx> ) -> RelateResult<'tcx, GenericArgsRef<'tcx>>

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

Implementors§

source§

impl<'tcx> TypeRelation<'tcx> for MatchAgainstFreshVars<'tcx>