Trait rustc_trait_selection::traits::query::type_op::QueryTypeOp[−][src]

pub trait QueryTypeOp<'tcx>: Debug + Copy + TypeFoldable<'tcx> + 'tcx {
    type QueryResponse: TypeFoldable<'tcx>;
    fn try_fast_path(
        tcx: TyCtxt<'tcx>,
        key: &ParamEnvAnd<'tcx, Self>
    ) -> Option<Self::QueryResponse>;
fn perform_query(
        tcx: TyCtxt<'tcx>,
        canonicalized: Canonicalized<'tcx, ParamEnvAnd<'tcx, Self>>
    ) -> Fallible<CanonicalizedQueryResponse<'tcx, Self::QueryResponse>>; fn fully_perform_into(
        query_key: ParamEnvAnd<'tcx, Self>,
        infcx: &InferCtxt<'_, 'tcx>,
        output_query_region_constraints: &mut QueryRegionConstraints<'tcx>
    ) -> Fallible<(Self::QueryResponse, Option<Canonical<'tcx, ParamEnvAnd<'tcx, Self>>>)> { ... } }
Expand description

“Query type ops” are type ops that are implemented using a canonical query. The Self type here contains the kernel of information needed to do the operation – TypeOp is actually implemented for ParamEnvAnd<Self>, since we always need to bring along a parameter environment as well. For query type-ops, we will first canonicalize the key and then invoke the query on the tcx, which produces the resulting query region constraints.

Associated Types

Required methods

Give query the option for a simple fast path that never actually hits the tcx cache lookup etc. Return Some(r) with a final result or None to do the full path.

Performs the actual query with the canonicalized key – the real work happens here. This method is not given an infcx because it shouldn’t need one – and if it had access to one, it might do things like invoke sub_regions, which would be bad, because it would create subregion relationships that are not captured in the return value.

Provided methods

Implementors