pub trait Interner: Debug + Copy + Eq + Hash + Sized {
Show 76 associated items
type InternedType: Debug + Clone + Eq + Hash;
type InternedLifetime: Debug + Clone + Eq + Hash;
type InternedConst: Debug + Clone + Eq + Hash;
type InternedConcreteConst: Debug + Clone + Eq + Hash;
type InternedGenericArg: Debug + Clone + Eq + Hash;
type InternedGoal: Debug + Clone + Eq + Hash;
type InternedGoals: Debug + Clone + Eq + Hash;
type InternedSubstitution: Debug + Clone + Eq + Hash;
type InternedProgramClauses: Debug + Clone + Eq + Hash;
type InternedProgramClause: Debug + Clone + Eq + Hash;
type InternedQuantifiedWhereClauses: Debug + Clone + Eq + Hash;
type InternedVariableKinds: Debug + Clone + Eq + Hash;
type InternedCanonicalVarKinds: Debug + Clone + Eq + Hash;
type InternedConstraints: Debug + Clone + Eq + Hash;
type InternedVariances: Debug + Clone + Eq + Hash;
type DefId: Debug + Copy + Eq + Hash;
type InternedAdtId: Debug + Copy + Eq + Hash;
type Identifier: Debug + Clone + Eq + Hash;
type FnAbi: Debug + Copy + Eq + Hash;
// Required methods
fn intern_ty(self, kind: TyKind<Self>) -> Self::InternedType;
fn ty_data(self, ty: &Self::InternedType) -> &TyData<Self>;
fn intern_lifetime(
self,
lifetime: LifetimeData<Self>,
) -> Self::InternedLifetime;
fn lifetime_data(
self,
lifetime: &Self::InternedLifetime,
) -> &LifetimeData<Self>;
fn intern_const(self, constant: ConstData<Self>) -> Self::InternedConst;
fn const_data(self, constant: &Self::InternedConst) -> &ConstData<Self>;
fn const_eq(
self,
ty: &Self::InternedType,
c1: &Self::InternedConcreteConst,
c2: &Self::InternedConcreteConst,
) -> bool;
fn intern_generic_arg(
self,
data: GenericArgData<Self>,
) -> Self::InternedGenericArg;
fn generic_arg_data(
self,
lifetime: &Self::InternedGenericArg,
) -> &GenericArgData<Self>;
fn intern_goal(self, data: GoalData<Self>) -> Self::InternedGoal;
fn goal_data(self, goal: &Self::InternedGoal) -> &GoalData<Self>;
fn intern_goals<E>(
self,
data: impl IntoIterator<Item = Result<Goal<Self>, E>>,
) -> Result<Self::InternedGoals, E>;
fn goals_data(self, goals: &Self::InternedGoals) -> &[Goal<Self>];
fn intern_substitution<E>(
self,
data: impl IntoIterator<Item = Result<GenericArg<Self>, E>>,
) -> Result<Self::InternedSubstitution, E>;
fn substitution_data(
self,
substitution: &Self::InternedSubstitution,
) -> &[GenericArg<Self>];
fn intern_program_clause(
self,
data: ProgramClauseData<Self>,
) -> Self::InternedProgramClause;
fn program_clause_data(
self,
clause: &Self::InternedProgramClause,
) -> &ProgramClauseData<Self>;
fn intern_program_clauses<E>(
self,
data: impl IntoIterator<Item = Result<ProgramClause<Self>, E>>,
) -> Result<Self::InternedProgramClauses, E>;
fn program_clauses_data(
self,
clauses: &Self::InternedProgramClauses,
) -> &[ProgramClause<Self>];
fn intern_quantified_where_clauses<E>(
self,
data: impl IntoIterator<Item = Result<QuantifiedWhereClause<Self>, E>>,
) -> Result<Self::InternedQuantifiedWhereClauses, E>;
fn quantified_where_clauses_data(
self,
clauses: &Self::InternedQuantifiedWhereClauses,
) -> &[QuantifiedWhereClause<Self>];
fn intern_generic_arg_kinds<E>(
self,
data: impl IntoIterator<Item = Result<VariableKind<Self>, E>>,
) -> Result<Self::InternedVariableKinds, E>;
fn variable_kinds_data(
self,
variable_kinds: &Self::InternedVariableKinds,
) -> &[VariableKind<Self>];
fn intern_canonical_var_kinds<E>(
self,
data: impl IntoIterator<Item = Result<CanonicalVarKind<Self>, E>>,
) -> Result<Self::InternedCanonicalVarKinds, E>;
fn canonical_var_kinds_data(
self,
canonical_var_kinds: &Self::InternedCanonicalVarKinds,
) -> &[CanonicalVarKind<Self>];
fn intern_constraints<E>(
self,
data: impl IntoIterator<Item = Result<InEnvironment<Constraint<Self>>, E>>,
) -> Result<Self::InternedConstraints, E>;
fn constraints_data(
self,
constraints: &Self::InternedConstraints,
) -> &[InEnvironment<Constraint<Self>>];
fn intern_variances<E>(
self,
data: impl IntoIterator<Item = Result<Variance, E>>,
) -> Result<Self::InternedVariances, E>;
fn variances_data(self, variances: &Self::InternedVariances) -> &[Variance];
// Provided methods
fn debug_adt_id(
adt_id: AdtId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_trait_id(
trait_id: TraitId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_assoc_type_id(
type_id: AssocTypeId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_opaque_ty_id(
opaque_ty_id: OpaqueTyId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_fn_def_id(
fn_def_id: FnDefId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_closure_id(
fn_def_id: ClosureId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_foreign_def_id(
foreign_def_id: ForeignDefId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_coroutine_id(
coroutine_id: CoroutineId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_alias(
alias: &AliasTy<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_projection_ty(
projection_ty: &ProjectionTy<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_opaque_ty(
opaque_ty: &OpaqueTy<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_ty(ty: &Ty<Self>, fmt: &mut Formatter<'_>) -> Option<Result> { ... }
fn debug_lifetime(
lifetime: &Lifetime<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_const(
constant: &Const<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_generic_arg(
generic_arg: &GenericArg<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_variable_kinds(
variable_kinds: &VariableKinds<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_variable_kinds_with_angles(
variable_kinds: &VariableKinds<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_canonical_var_kinds(
canonical_var_kinds: &CanonicalVarKinds<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_goal(goal: &Goal<Self>, fmt: &mut Formatter<'_>) -> Option<Result> { ... }
fn debug_goals(
goals: &Goals<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_program_clause_implication(
pci: &ProgramClauseImplication<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_program_clause(
clause: &ProgramClause<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_program_clauses(
clauses: &ProgramClauses<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_substitution(
substitution: &Substitution<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_separator_trait_ref(
separator_trait_ref: &SeparatorTraitRef<'_, Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_quantified_where_clauses(
clauses: &QuantifiedWhereClauses<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_constraints(
clauses: &Constraints<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
fn debug_variances(
variances: &Variances<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result> { ... }
}
Expand description
A “interner” encapsulates the concrete representation of
certain “core types” from chalk-ir. All the types in chalk-ir are
parameterized by a I: Interner
, and so (e.g.) if they want to
store a type, they don’t store a Ty<I>
instance directly, but
rather prefer a Ty<I>
. You can think of I::Type
as the
interned representation (and, indeed, it may well be an interned
pointer, e.g. in rustc).
Type families allow chalk to be embedded in different contexts
where the concrete representation of core types varies. They also
allow us to write generic code that reasons about multiple
distinct sets of types by using distinct generic type parameters
(e.g., SourceI
and TargetI
) – even if those type parameters
wind up being mapped to the same underlying type families in the
end.
Required Associated Types§
sourcetype InternedType: Debug + Clone + Eq + Hash
type InternedType: Debug + Clone + Eq + Hash
“Interned” representation of types. In normal user code,
Self::InternedType
is not referenced. Instead, we refer to
Ty<Self>
, which wraps this type.
An InternedType
must be something that can be created from a
TyKind
(by the intern_ty
method) and then later
converted back (by the ty_data
method). The interned form
must also introduce indirection, either via a Box
, &
, or
other pointer type.
sourcetype InternedLifetime: Debug + Clone + Eq + Hash
type InternedLifetime: Debug + Clone + Eq + Hash
“Interned” representation of lifetimes. In normal user code,
Self::InternedLifetime
is not referenced. Instead, we refer to
Lifetime<Self>
, which wraps this type.
An InternedLifetime
must be something that can be created
from a LifetimeData
(by the intern_lifetime
method) and
then later converted back (by the lifetime_data
method).
sourcetype InternedConst: Debug + Clone + Eq + Hash
type InternedConst: Debug + Clone + Eq + Hash
“Interned” representation of const expressions. In normal user code,
Self::InternedConst
is not referenced. Instead, we refer to
Const<Self>
, which wraps this type.
An InternedConst
must be something that can be created
from a ConstData
(by the intern_const
method) and
then later converted back (by the const_data
method).
sourcetype InternedConcreteConst: Debug + Clone + Eq + Hash
type InternedConcreteConst: Debug + Clone + Eq + Hash
“Interned” representation of an evaluated const value.
Self::InternedConcreteConst
is not referenced. Instead,
we refer to ConcreteConst<Self>
, which wraps this type.
InternedConcreteConst
instances are not created by chalk,
it can only make a query asking about equality of two
evaluated consts.
sourcetype InternedGenericArg: Debug + Clone + Eq + Hash
type InternedGenericArg: Debug + Clone + Eq + Hash
“Interned” representation of a “generic parameter”, which can
be either a type or a lifetime. In normal user code,
Self::InternedGenericArg
is not referenced. Instead, we refer to
GenericArg<Self>
, which wraps this type.
An InternedType
is created by intern_generic_arg
and can be
converted back to its underlying data via generic_arg_data
.
sourcetype InternedGoal: Debug + Clone + Eq + Hash
type InternedGoal: Debug + Clone + Eq + Hash
“Interned” representation of a “goal”. In normal user code,
Self::InternedGoal
is not referenced. Instead, we refer to
Goal<Self>
, which wraps this type.
An InternedGoal
is created by intern_goal
and can be
converted back to its underlying data via goal_data
.
sourcetype InternedGoals: Debug + Clone + Eq + Hash
type InternedGoals: Debug + Clone + Eq + Hash
“Interned” representation of a list of goals. In normal user code,
Self::InternedGoals
is not referenced. Instead, we refer to
Goals<Self>
, which wraps this type.
An InternedGoals
is created by intern_goals
and can be
converted back to its underlying data via goals_data
.
sourcetype InternedSubstitution: Debug + Clone + Eq + Hash
type InternedSubstitution: Debug + Clone + Eq + Hash
“Interned” representation of a “substitution”. In normal user code,
Self::InternedSubstitution
is not referenced. Instead, we refer to
Substitution<Self>
, which wraps this type.
An InternedSubstitution
is created by intern_substitution
and can be
converted back to its underlying data via substitution_data
.
sourcetype InternedProgramClauses: Debug + Clone + Eq + Hash
type InternedProgramClauses: Debug + Clone + Eq + Hash
“Interned” representation of a list of program clauses. In normal user code,
Self::InternedProgramClauses
is not referenced. Instead, we refer to
ProgramClauses<Self>
, which wraps this type.
An InternedProgramClauses
is created by intern_program_clauses
and can be
converted back to its underlying data via program_clauses_data
.
sourcetype InternedProgramClause: Debug + Clone + Eq + Hash
type InternedProgramClause: Debug + Clone + Eq + Hash
“Interned” representation of a “program clause”. In normal user code,
Self::InternedProgramClause
is not referenced. Instead, we refer to
ProgramClause<Self>
, which wraps this type.
An InternedProgramClause
is created by intern_program_clause
and can be
converted back to its underlying data via program_clause_data
.
sourcetype InternedQuantifiedWhereClauses: Debug + Clone + Eq + Hash
type InternedQuantifiedWhereClauses: Debug + Clone + Eq + Hash
“Interned” representation of a list of quantified where clauses.
In normal user code, Self::InternedQuantifiedWhereClauses
is not referenced.
Instead, we refer to QuantifiedWhereClauses<Self>
, which wraps this type.
An InternedQuantifiedWhereClauses
is created by intern_quantified_where_clauses
and can be converted back to its underlying data via quantified_where_clauses_data
.
sourcetype InternedVariableKinds: Debug + Clone + Eq + Hash
type InternedVariableKinds: Debug + Clone + Eq + Hash
“Interned” representation of a list of variable kinds.
In normal user code, Self::InternedVariableKinds
is not referenced.
Instead, we refer to VariableKinds<Self>
, which wraps this type.
An InternedVariableKinds
is created by intern_generic_arg_kinds
and can be converted back to its underlying data via variable_kinds_data
.
sourcetype InternedCanonicalVarKinds: Debug + Clone + Eq + Hash
type InternedCanonicalVarKinds: Debug + Clone + Eq + Hash
“Interned” representation of a list of variable kinds with universe index.
In normal user code, Self::InternedCanonicalVarKinds
is not referenced.
Instead, we refer to CanonicalVarKinds<Self>
, which wraps this type.
An InternedCanonicalVarKinds
is created by
intern_canonical_var_kinds
and can be converted back
to its underlying data via canonical_var_kinds_data
.
sourcetype InternedConstraints: Debug + Clone + Eq + Hash
type InternedConstraints: Debug + Clone + Eq + Hash
“Interned” representation of a list of region constraints.
In normal user code, Self::InternedConstraints
is not referenced.
Instead, we refer to Constraints<Self>
, which wraps this type.
An InternedConstraints
is created by intern_constraints
and can be converted back to its underlying data via constraints_data
.
sourcetype InternedVariances: Debug + Clone + Eq + Hash
type InternedVariances: Debug + Clone + Eq + Hash
“Interned” representation of a list of chalk_ir::Variance
.
In normal user code, Self::InternedVariances
is not referenced.
Instead, we refer to Variances<Self>
, which wraps this type.
An InternedVariances
is created by
intern_variances
and can be converted back
to its underlying data via variances_data
.
Required Methods§
sourcefn intern_ty(self, kind: TyKind<Self>) -> Self::InternedType
fn intern_ty(self, kind: TyKind<Self>) -> Self::InternedType
Create an “interned” type from ty
. This is not normally
invoked directly; instead, you invoke TyKind::intern
(which
will ultimately call this method).
sourcefn ty_data(self, ty: &Self::InternedType) -> &TyData<Self>
fn ty_data(self, ty: &Self::InternedType) -> &TyData<Self>
Lookup the TyKind
from an interned type.
sourcefn intern_lifetime(self, lifetime: LifetimeData<Self>) -> Self::InternedLifetime
fn intern_lifetime(self, lifetime: LifetimeData<Self>) -> Self::InternedLifetime
Create an “interned” lifetime from lifetime
. This is not
normally invoked directly; instead, you invoke
LifetimeData::intern
(which will ultimately call this
method).
sourcefn lifetime_data(self, lifetime: &Self::InternedLifetime) -> &LifetimeData<Self>
fn lifetime_data(self, lifetime: &Self::InternedLifetime) -> &LifetimeData<Self>
Lookup the LifetimeData
that was interned to create a InternedLifetime
.
sourcefn intern_const(self, constant: ConstData<Self>) -> Self::InternedConst
fn intern_const(self, constant: ConstData<Self>) -> Self::InternedConst
Create an “interned” const from const
. This is not
normally invoked directly; instead, you invoke
ConstData::intern
(which will ultimately call this
method).
sourcefn const_data(self, constant: &Self::InternedConst) -> &ConstData<Self>
fn const_data(self, constant: &Self::InternedConst) -> &ConstData<Self>
Lookup the ConstData
that was interned to create a InternedConst
.
sourcefn const_eq(
self,
ty: &Self::InternedType,
c1: &Self::InternedConcreteConst,
c2: &Self::InternedConcreteConst,
) -> bool
fn const_eq( self, ty: &Self::InternedType, c1: &Self::InternedConcreteConst, c2: &Self::InternedConcreteConst, ) -> bool
Determine whether two concrete const values are equal.
sourcefn intern_generic_arg(
self,
data: GenericArgData<Self>,
) -> Self::InternedGenericArg
fn intern_generic_arg( self, data: GenericArgData<Self>, ) -> Self::InternedGenericArg
Create an “interned” parameter from data
. This is not
normally invoked directly; instead, you invoke
GenericArgData::intern
(which will ultimately call this
method).
sourcefn generic_arg_data(
self,
lifetime: &Self::InternedGenericArg,
) -> &GenericArgData<Self>
fn generic_arg_data( self, lifetime: &Self::InternedGenericArg, ) -> &GenericArgData<Self>
Lookup the LifetimeData
that was interned to create a InternedLifetime
.
sourcefn intern_goal(self, data: GoalData<Self>) -> Self::InternedGoal
fn intern_goal(self, data: GoalData<Self>) -> Self::InternedGoal
Create an “interned” goal from data
. This is not
normally invoked directly; instead, you invoke
GoalData::intern
(which will ultimately call this
method).
sourcefn goal_data(self, goal: &Self::InternedGoal) -> &GoalData<Self>
fn goal_data(self, goal: &Self::InternedGoal) -> &GoalData<Self>
Lookup the GoalData
that was interned to create a InternedGoal
.
sourcefn intern_goals<E>(
self,
data: impl IntoIterator<Item = Result<Goal<Self>, E>>,
) -> Result<Self::InternedGoals, E>
fn intern_goals<E>( self, data: impl IntoIterator<Item = Result<Goal<Self>, E>>, ) -> Result<Self::InternedGoals, E>
Create an “interned” goals from data
. This is not
normally invoked directly; instead, you invoke
GoalsData::intern
(which will ultimately call this
method).
sourcefn goals_data(self, goals: &Self::InternedGoals) -> &[Goal<Self>]
fn goals_data(self, goals: &Self::InternedGoals) -> &[Goal<Self>]
Lookup the GoalsData
that was interned to create a InternedGoals
.
sourcefn intern_substitution<E>(
self,
data: impl IntoIterator<Item = Result<GenericArg<Self>, E>>,
) -> Result<Self::InternedSubstitution, E>
fn intern_substitution<E>( self, data: impl IntoIterator<Item = Result<GenericArg<Self>, E>>, ) -> Result<Self::InternedSubstitution, E>
Create an “interned” substitution from data
. This is not
normally invoked directly; instead, you invoke
SubstitutionData::intern
(which will ultimately call this
method).
sourcefn substitution_data(
self,
substitution: &Self::InternedSubstitution,
) -> &[GenericArg<Self>]
fn substitution_data( self, substitution: &Self::InternedSubstitution, ) -> &[GenericArg<Self>]
Lookup the SubstitutionData
that was interned to create a InternedSubstitution
.
sourcefn intern_program_clause(
self,
data: ProgramClauseData<Self>,
) -> Self::InternedProgramClause
fn intern_program_clause( self, data: ProgramClauseData<Self>, ) -> Self::InternedProgramClause
Create an “interned” program clause from data
. This is not
normally invoked directly; instead, you invoke
ProgramClauseData::intern
(which will ultimately call this
method).
sourcefn program_clause_data(
self,
clause: &Self::InternedProgramClause,
) -> &ProgramClauseData<Self>
fn program_clause_data( self, clause: &Self::InternedProgramClause, ) -> &ProgramClauseData<Self>
Lookup the ProgramClauseData
that was interned to create a ProgramClause
.
sourcefn intern_program_clauses<E>(
self,
data: impl IntoIterator<Item = Result<ProgramClause<Self>, E>>,
) -> Result<Self::InternedProgramClauses, E>
fn intern_program_clauses<E>( self, data: impl IntoIterator<Item = Result<ProgramClause<Self>, E>>, ) -> Result<Self::InternedProgramClauses, E>
Create an “interned” program clauses from data
. This is not
normally invoked directly; instead, you invoke
ProgramClauses::from_iter
(which will ultimately call this
method).
sourcefn program_clauses_data(
self,
clauses: &Self::InternedProgramClauses,
) -> &[ProgramClause<Self>]
fn program_clauses_data( self, clauses: &Self::InternedProgramClauses, ) -> &[ProgramClause<Self>]
Lookup the ProgramClauseData
that was interned to create a ProgramClause
.
sourcefn intern_quantified_where_clauses<E>(
self,
data: impl IntoIterator<Item = Result<QuantifiedWhereClause<Self>, E>>,
) -> Result<Self::InternedQuantifiedWhereClauses, E>
fn intern_quantified_where_clauses<E>( self, data: impl IntoIterator<Item = Result<QuantifiedWhereClause<Self>, E>>, ) -> Result<Self::InternedQuantifiedWhereClauses, E>
Create an “interned” quantified where clauses from data
. This is not
normally invoked directly; instead, you invoke
QuantifiedWhereClauses::from_iter
(which will ultimately call this
method).
sourcefn quantified_where_clauses_data(
self,
clauses: &Self::InternedQuantifiedWhereClauses,
) -> &[QuantifiedWhereClause<Self>]
fn quantified_where_clauses_data( self, clauses: &Self::InternedQuantifiedWhereClauses, ) -> &[QuantifiedWhereClause<Self>]
Lookup the slice of QuantifiedWhereClause
that was interned to
create a QuantifiedWhereClauses
.
sourcefn intern_generic_arg_kinds<E>(
self,
data: impl IntoIterator<Item = Result<VariableKind<Self>, E>>,
) -> Result<Self::InternedVariableKinds, E>
fn intern_generic_arg_kinds<E>( self, data: impl IntoIterator<Item = Result<VariableKind<Self>, E>>, ) -> Result<Self::InternedVariableKinds, E>
Create an “interned” parameter kinds from data
. This is not
normally invoked directly; instead, you invoke
VariableKinds::from_iter
(which will ultimately call this
method).
sourcefn variable_kinds_data(
self,
variable_kinds: &Self::InternedVariableKinds,
) -> &[VariableKind<Self>]
fn variable_kinds_data( self, variable_kinds: &Self::InternedVariableKinds, ) -> &[VariableKind<Self>]
Lookup the slice of VariableKinds
that was interned to
create a VariableKinds
.
sourcefn intern_canonical_var_kinds<E>(
self,
data: impl IntoIterator<Item = Result<CanonicalVarKind<Self>, E>>,
) -> Result<Self::InternedCanonicalVarKinds, E>
fn intern_canonical_var_kinds<E>( self, data: impl IntoIterator<Item = Result<CanonicalVarKind<Self>, E>>, ) -> Result<Self::InternedCanonicalVarKinds, E>
Create “interned” variable kinds with universe index from data
. This is not
normally invoked directly; instead, you invoke
CanonicalVarKinds::from_iter
(which will ultimately call this
method).
sourcefn canonical_var_kinds_data(
self,
canonical_var_kinds: &Self::InternedCanonicalVarKinds,
) -> &[CanonicalVarKind<Self>]
fn canonical_var_kinds_data( self, canonical_var_kinds: &Self::InternedCanonicalVarKinds, ) -> &[CanonicalVarKind<Self>]
Lookup the slice of CanonicalVariableKind
that was interned to
create a CanonicalVariableKinds
.
sourcefn intern_constraints<E>(
self,
data: impl IntoIterator<Item = Result<InEnvironment<Constraint<Self>>, E>>,
) -> Result<Self::InternedConstraints, E>
fn intern_constraints<E>( self, data: impl IntoIterator<Item = Result<InEnvironment<Constraint<Self>>, E>>, ) -> Result<Self::InternedConstraints, E>
Create “interned” constraints from data
. This is not
normally invoked dirctly; instead, you invoke
Constraints::from_iter
(which will ultimately call this
method).
sourcefn constraints_data(
self,
constraints: &Self::InternedConstraints,
) -> &[InEnvironment<Constraint<Self>>]
fn constraints_data( self, constraints: &Self::InternedConstraints, ) -> &[InEnvironment<Constraint<Self>>]
Lookup the slice of Constraint
that was interned to
create a Constraints
.
sourcefn intern_variances<E>(
self,
data: impl IntoIterator<Item = Result<Variance, E>>,
) -> Result<Self::InternedVariances, E>
fn intern_variances<E>( self, data: impl IntoIterator<Item = Result<Variance, E>>, ) -> Result<Self::InternedVariances, E>
Create “interned” variances from data
. This is not
normally invoked directly; instead, you invoke
Variances::from
(which will ultimately call this
method).
sourcefn variances_data(self, variances: &Self::InternedVariances) -> &[Variance]
fn variances_data(self, variances: &Self::InternedVariances) -> &[Variance]
Lookup the slice of Variance
that was interned to
create a Variances
.
Provided Methods§
sourcefn debug_adt_id(adt_id: AdtId<Self>, fmt: &mut Formatter<'_>) -> Option<Result>
fn debug_adt_id(adt_id: AdtId<Self>, fmt: &mut Formatter<'_>) -> Option<Result>
Prints the debug representation of a type-kind-id.
Returns None
to fallback to the default debug output.
sourcefn debug_trait_id(
trait_id: TraitId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_trait_id( trait_id: TraitId<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a type-kind-id.
Returns None
to fallback to the default debug output (e.g.,
if no info about current program is available from TLS).
sourcefn debug_assoc_type_id(
type_id: AssocTypeId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_assoc_type_id( type_id: AssocTypeId<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a type-kind-id.
Returns None
to fallback to the default debug output.
sourcefn debug_opaque_ty_id(
opaque_ty_id: OpaqueTyId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_opaque_ty_id( opaque_ty_id: OpaqueTyId<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of an opaque type.
Returns None
to fallback to the default debug output.
sourcefn debug_fn_def_id(
fn_def_id: FnDefId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_fn_def_id( fn_def_id: FnDefId<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a function-def-id.
Returns None
to fallback to the default debug output.
sourcefn debug_closure_id(
fn_def_id: ClosureId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_closure_id( fn_def_id: ClosureId<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a closure id.
Returns None
to fallback to the default debug output.
sourcefn debug_foreign_def_id(
foreign_def_id: ForeignDefId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_foreign_def_id( foreign_def_id: ForeignDefId<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a foreign-def-id.
Returns None
to fallback to the default debug output.
sourcefn debug_coroutine_id(
coroutine_id: CoroutineId<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_coroutine_id( coroutine_id: CoroutineId<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of an alias.
Returns None
to fallback to the default debug output.
sourcefn debug_alias(alias: &AliasTy<Self>, fmt: &mut Formatter<'_>) -> Option<Result>
fn debug_alias(alias: &AliasTy<Self>, fmt: &mut Formatter<'_>) -> Option<Result>
Prints the debug representation of an alias. To get good results, this requires inspecting TLS, and is difficult to code without reference to a specific interner (and hence fully known types).
Returns None
to fallback to the default debug output (e.g.,
if no info about current program is available from TLS).
sourcefn debug_projection_ty(
projection_ty: &ProjectionTy<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_projection_ty( projection_ty: &ProjectionTy<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a ProjectionTy.
Returns None
to fallback to the default debug output.
sourcefn debug_opaque_ty(
opaque_ty: &OpaqueTy<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_opaque_ty( opaque_ty: &OpaqueTy<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of an OpaqueTy.
Returns None
to fallback to the default debug output.
sourcefn debug_ty(ty: &Ty<Self>, fmt: &mut Formatter<'_>) -> Option<Result>
fn debug_ty(ty: &Ty<Self>, fmt: &mut Formatter<'_>) -> Option<Result>
Prints the debug representation of a type.
Returns None
to fallback to the default debug output.
sourcefn debug_lifetime(
lifetime: &Lifetime<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_lifetime( lifetime: &Lifetime<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a lifetime.
Returns None
to fallback to the default debug output.
sourcefn debug_const(
constant: &Const<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_const( constant: &Const<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a const.
Returns None
to fallback to the default debug output.
sourcefn debug_generic_arg(
generic_arg: &GenericArg<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_generic_arg( generic_arg: &GenericArg<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of an parameter.
Returns None
to fallback to the default debug output.
sourcefn debug_variable_kinds(
variable_kinds: &VariableKinds<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_variable_kinds( variable_kinds: &VariableKinds<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a parameter kinds list.
Returns None
to fallback to the default debug output.
sourcefn debug_variable_kinds_with_angles(
variable_kinds: &VariableKinds<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_variable_kinds_with_angles( variable_kinds: &VariableKinds<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a parameter kinds list, with angle brackets.
Returns None
to fallback to the default debug output.
sourcefn debug_canonical_var_kinds(
canonical_var_kinds: &CanonicalVarKinds<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_canonical_var_kinds( canonical_var_kinds: &CanonicalVarKinds<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of an parameter kinds list with universe index.
Returns None
to fallback to the default debug output.
sourcefn debug_goal(goal: &Goal<Self>, fmt: &mut Formatter<'_>) -> Option<Result>
fn debug_goal(goal: &Goal<Self>, fmt: &mut Formatter<'_>) -> Option<Result>
Prints the debug representation of an goal.
Returns None
to fallback to the default debug output.
sourcefn debug_goals(goals: &Goals<Self>, fmt: &mut Formatter<'_>) -> Option<Result>
fn debug_goals(goals: &Goals<Self>, fmt: &mut Formatter<'_>) -> Option<Result>
Prints the debug representation of a list of goals.
Returns None
to fallback to the default debug output.
sourcefn debug_program_clause_implication(
pci: &ProgramClauseImplication<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_program_clause_implication( pci: &ProgramClauseImplication<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a ProgramClauseImplication.
Returns None
to fallback to the default debug output.
sourcefn debug_program_clause(
clause: &ProgramClause<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_program_clause( clause: &ProgramClause<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a ProgramClause.
Returns None
to fallback to the default debug output.
sourcefn debug_program_clauses(
clauses: &ProgramClauses<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_program_clauses( clauses: &ProgramClauses<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a ProgramClauses.
Returns None
to fallback to the default debug output.
sourcefn debug_substitution(
substitution: &Substitution<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_substitution( substitution: &Substitution<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a Substitution.
Returns None
to fallback to the default debug output.
sourcefn debug_separator_trait_ref(
separator_trait_ref: &SeparatorTraitRef<'_, Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_separator_trait_ref( separator_trait_ref: &SeparatorTraitRef<'_, Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a SeparatorTraitRef.
Returns None
to fallback to the default debug output.
sourcefn debug_quantified_where_clauses(
clauses: &QuantifiedWhereClauses<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_quantified_where_clauses( clauses: &QuantifiedWhereClauses<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a QuantifiedWhereClauses.
Returns None
to fallback to the default debug output.
sourcefn debug_constraints(
clauses: &Constraints<Self>,
fmt: &mut Formatter<'_>,
) -> Option<Result>
fn debug_constraints( clauses: &Constraints<Self>, fmt: &mut Formatter<'_>, ) -> Option<Result>
Prints the debug representation of a Constraints.
Returns None
to fallback to the default debug output.