pub trait InferCtxtExt<'tcx> {
// Required method
fn infer_opaque_definition_from_instantiation(
&self,
opaque_type_key: OpaqueTypeKey<'tcx>,
instantiated_ty: OpaqueHiddenType<'tcx>,
) -> Ty<'tcx>;
}
Required Methods§
Sourcefn infer_opaque_definition_from_instantiation(
&self,
opaque_type_key: OpaqueTypeKey<'tcx>,
instantiated_ty: OpaqueHiddenType<'tcx>,
) -> Ty<'tcx>
fn infer_opaque_definition_from_instantiation( &self, opaque_type_key: OpaqueTypeKey<'tcx>, instantiated_ty: OpaqueHiddenType<'tcx>, ) -> Ty<'tcx>
Given the fully resolved, instantiated type for an opaque
type, i.e., the value of an inference variable like C1 or C2
(*), computes the “definition type” for an opaque type
definition – that is, the inferred value of Foo1<'x>
or
Foo2<'x>
that we would conceptually use in its definition:
type Foo1<'x> = impl Bar<'x> = AAA; // <-- this type AAA
type Foo2<'x> = impl Bar<'x> = BBB; // <-- or this type BBB
fn foo<'a, 'b>(..) -> (Foo1<'a>, Foo2<'b>) { .. }
Note that these values are defined in terms of a distinct set of
generic parameters ('x
instead of 'a
) from C1 or C2. The main
purpose of this function is to do that translation.
(*) C1 and C2 were introduced in the comments on
register_member_constraints
. Read that comment for more context.
§Parameters
def_id
, theimpl Trait
typeargs
, the args used to instantiate this opaque typeinstantiated_ty
, the inferred type C1 – fully resolved, lifted version ofopaque_defn.concrete_ty
Implementations on Foreign Types§
Source§impl<'tcx> InferCtxtExt<'tcx> for InferCtxt<'tcx>
impl<'tcx> InferCtxtExt<'tcx> for InferCtxt<'tcx>
Source§fn infer_opaque_definition_from_instantiation(
&self,
opaque_type_key: OpaqueTypeKey<'tcx>,
instantiated_ty: OpaqueHiddenType<'tcx>,
) -> Ty<'tcx>
fn infer_opaque_definition_from_instantiation( &self, opaque_type_key: OpaqueTypeKey<'tcx>, instantiated_ty: OpaqueHiddenType<'tcx>, ) -> Ty<'tcx>
Given the fully resolved, instantiated type for an opaque
type, i.e., the value of an inference variable like C1 or C2
(*), computes the “definition type” for an opaque type
definition – that is, the inferred value of Foo1<'x>
or
Foo2<'x>
that we would conceptually use in its definition:
type Foo1<'x> = impl Bar<'x> = AAA; // <-- this type AAA
type Foo2<'x> = impl Bar<'x> = BBB; // <-- or this type BBB
fn foo<'a, 'b>(..) -> (Foo1<'a>, Foo2<'b>) { .. }
Note that these values are defined in terms of a distinct set of
generic parameters ('x
instead of 'a
) from C1 or C2. The main
purpose of this function is to do that translation.
(*) C1 and C2 were introduced in the comments on
register_member_constraints
. Read that comment for more context.
§Parameters
def_id
, theimpl Trait
typeargs
, the args used to instantiate this opaque typeinstantiated_ty
, the inferred type C1 – fully resolved, lifted version ofopaque_defn.concrete_ty