pub struct ChalkIr;
Expand description

The default “interner” and the only interner used by chalk itself. In this interner, no interning actually occurs.

Trait Implementations§

source§

impl Clone for ChalkIr

source§

fn clone(&self) -> ChalkIr

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for ChalkIr

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl HasInterner for ChalkIr

§

type Interner = ChalkIr

The interner associated with the type.
source§

impl Hash for ChalkIr

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl Interner for ChalkIr

§

type InternedType = Arc<TyData<ChalkIr>>

“Interned” representation of types. In normal user code, Self::InternedType is not referenced. Instead, we refer to Ty<Self>, which wraps this type. Read more
§

type InternedLifetime = LifetimeData<ChalkIr>

“Interned” representation of lifetimes. In normal user code, Self::InternedLifetime is not referenced. Instead, we refer to Lifetime<Self>, which wraps this type. Read more
§

type InternedConst = Arc<ConstData<ChalkIr>>

“Interned” representation of const expressions. In normal user code, Self::InternedConst is not referenced. Instead, we refer to Const<Self>, which wraps this type. Read more
§

type InternedConcreteConst = u32

“Interned” representation of an evaluated const value. Self::InternedConcreteConst is not referenced. Instead, we refer to ConcreteConst<Self>, which wraps this type. Read more
§

type InternedGenericArg = GenericArgData<ChalkIr>

“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. Read more
§

type InternedGoal = Arc<GoalData<ChalkIr>>

“Interned” representation of a “goal”. In normal user code, Self::InternedGoal is not referenced. Instead, we refer to Goal<Self>, which wraps this type. Read more
§

type InternedGoals = Vec<Goal<ChalkIr>>

“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. Read more
§

type InternedSubstitution = Vec<GenericArg<ChalkIr>>

“Interned” representation of a “substitution”. In normal user code, Self::InternedSubstitution is not referenced. Instead, we refer to Substitution<Self>, which wraps this type. Read more
§

type InternedProgramClause = ProgramClauseData<ChalkIr>

“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. Read more
§

type InternedProgramClauses = Vec<ProgramClause<ChalkIr>>

“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. Read more
§

type InternedQuantifiedWhereClauses = Vec<Binders<WhereClause<ChalkIr>>>

“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. Read more
§

type InternedVariableKinds = Vec<VariableKind<ChalkIr>>

“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. Read more
§

type InternedCanonicalVarKinds = Vec<WithKind<ChalkIr, UniverseIndex>>

“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. Read more
§

type InternedConstraints = Vec<InEnvironment<Constraint<ChalkIr>>>

“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. Read more
§

type InternedVariances = Vec<Variance>

“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. Read more
§

type DefId = RawId

The core “id” type used for trait-ids and the like.
§

type InternedAdtId = RawId

The ID type for ADTs
§

type Identifier = Atom<EmptyStaticAtomSet>

Representation of identifiers.
§

type FnAbi = ChalkFnAbi

Representation of function ABI (e.g. calling convention).
source§

fn debug_adt_id( type_kind_id: AdtId<ChalkIr>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of a type-kind-id. Returns None to fallback to the default debug output.
source§

fn debug_trait_id( type_kind_id: TraitId<ChalkIr>, 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).
source§

fn debug_assoc_type_id( id: AssocTypeId<ChalkIr>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of a type-kind-id. Returns None to fallback to the default debug output.
source§

fn debug_opaque_ty_id( id: OpaqueTyId<ChalkIr>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of an opaque type. Returns None to fallback to the default debug output.
source§

fn debug_fn_def_id(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.
source§

fn debug_alias( alias: &AliasTy<ChalkIr>, 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). Read more
source§

fn debug_projection_ty( proj: &ProjectionTy<ChalkIr>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of a ProjectionTy. Returns None to fallback to the default debug output.
source§

fn debug_opaque_ty( opaque_ty: &OpaqueTy<ChalkIr>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of an OpaqueTy. Returns None to fallback to the default debug output.
source§

fn debug_ty(ty: &Ty<ChalkIr>, fmt: &mut Formatter<'_>) -> Option<Result>

Prints the debug representation of a type. Returns None to fallback to the default debug output.
source§

fn debug_lifetime( lifetime: &Lifetime<ChalkIr>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of a lifetime. Returns None to fallback to the default debug output.
source§

fn debug_generic_arg( generic_arg: &GenericArg<ChalkIr>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of an parameter. Returns None to fallback to the default debug output.
source§

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.
source§

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.
source§

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.
source§

fn debug_goal(goal: &Goal<ChalkIr>, fmt: &mut Formatter<'_>) -> Option<Result>

Prints the debug representation of an goal. Returns None to fallback to the default debug output.
source§

fn debug_goals( goals: &Goals<ChalkIr>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of a list of goals. Returns None to fallback to the default debug output.
source§

fn debug_program_clause_implication( pci: &ProgramClauseImplication<ChalkIr>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of a ProgramClauseImplication. Returns None to fallback to the default debug output.
source§

fn debug_program_clause( clause: &ProgramClause<ChalkIr>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of a ProgramClause. Returns None to fallback to the default debug output.
source§

fn debug_program_clauses( clause: &ProgramClauses<ChalkIr>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of a ProgramClauses. Returns None to fallback to the default debug output.
source§

fn debug_substitution( substitution: &Substitution<ChalkIr>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of a Substitution. Returns None to fallback to the default debug output.
source§

fn debug_separator_trait_ref( separator_trait_ref: &SeparatorTraitRef<'_, ChalkIr>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of a SeparatorTraitRef. Returns None to fallback to the default debug output.
source§

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.
source§

fn debug_constraints( constraints: &Constraints<Self>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of a Constraints. Returns None to fallback to the default debug output.
source§

fn debug_variances( variances: &Variances<Self>, fmt: &mut Formatter<'_> ) -> Option<Result>

Prints the debug representation of a Variances. Returns None to fallback to the default debug output.
source§

fn intern_ty(self, kind: TyKind<ChalkIr>) -> Arc<TyData<ChalkIr>>

Create an “interned” type from ty. This is not normally invoked directly; instead, you invoke TyKind::intern (which will ultimately call this method).
source§

fn ty_data(self, ty: &Arc<TyData<ChalkIr>>) -> &TyData<Self>

Lookup the TyKind from an interned type.
source§

fn intern_lifetime( self, lifetime: LifetimeData<ChalkIr> ) -> LifetimeData<ChalkIr>

Create an “interned” lifetime from lifetime. This is not normally invoked directly; instead, you invoke LifetimeData::intern (which will ultimately call this method).
source§

fn lifetime_data( self, lifetime: &LifetimeData<ChalkIr> ) -> &LifetimeData<ChalkIr>

Lookup the LifetimeData that was interned to create a InternedLifetime.
source§

fn intern_const(self, constant: ConstData<ChalkIr>) -> Arc<ConstData<ChalkIr>>

Create an “interned” const from const. This is not normally invoked directly; instead, you invoke ConstData::intern (which will ultimately call this method).
source§

fn const_data(self, constant: &Arc<ConstData<ChalkIr>>) -> &ConstData<ChalkIr>

Lookup the ConstData that was interned to create a InternedConst.
source§

fn const_eq(self, _ty: &Arc<TyData<ChalkIr>>, c1: &u32, c2: &u32) -> bool

Determine whether two concrete const values are equal.
source§

fn intern_generic_arg( self, generic_arg: GenericArgData<ChalkIr> ) -> GenericArgData<ChalkIr>

Create an “interned” parameter from data. This is not normally invoked directly; instead, you invoke GenericArgData::intern (which will ultimately call this method).
source§

fn generic_arg_data( self, generic_arg: &GenericArgData<ChalkIr> ) -> &GenericArgData<ChalkIr>

Lookup the LifetimeData that was interned to create a InternedLifetime.
source§

fn intern_goal(self, goal: GoalData<ChalkIr>) -> Arc<GoalData<ChalkIr>>

Create an “interned” goal from data. This is not normally invoked directly; instead, you invoke GoalData::intern (which will ultimately call this method).
source§

fn goal_data(self, goal: &Arc<GoalData<ChalkIr>>) -> &GoalData<ChalkIr>

Lookup the GoalData that was interned to create a InternedGoal.
source§

fn intern_goals<E>( self, data: impl IntoIterator<Item = Result<Goal<ChalkIr>, E>> ) -> Result<Vec<Goal<ChalkIr>>, E>

Create an “interned” goals from data. This is not normally invoked directly; instead, you invoke GoalsData::intern (which will ultimately call this method).
source§

fn goals_data(self, goals: &Vec<Goal<ChalkIr>>) -> &[Goal<ChalkIr>]

Lookup the GoalsData that was interned to create a InternedGoals.
source§

fn intern_substitution<E>( self, data: impl IntoIterator<Item = Result<GenericArg<ChalkIr>, E>> ) -> Result<Vec<GenericArg<ChalkIr>>, E>

Create an “interned” substitution from data. This is not normally invoked directly; instead, you invoke SubstitutionData::intern (which will ultimately call this method).
source§

fn substitution_data( self, substitution: &Vec<GenericArg<ChalkIr>> ) -> &[GenericArg<ChalkIr>]

Lookup the SubstitutionData that was interned to create a InternedSubstitution.
source§

fn intern_program_clause( self, data: ProgramClauseData<Self> ) -> ProgramClauseData<Self>

Create an “interned” program clause from data. This is not normally invoked directly; instead, you invoke ProgramClauseData::intern (which will ultimately call this method).
source§

fn program_clause_data( self, clause: &ProgramClauseData<Self> ) -> &ProgramClauseData<Self>

Lookup the ProgramClauseData that was interned to create a ProgramClause.
source§

fn intern_program_clauses<E>( self, data: impl IntoIterator<Item = Result<ProgramClause<Self>, E>> ) -> Result<Vec<ProgramClause<Self>>, 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).
source§

fn program_clauses_data( self, clauses: &Vec<ProgramClause<Self>> ) -> &[ProgramClause<Self>]

Lookup the ProgramClauseData that was interned to create a ProgramClause.
source§

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).
source§

fn quantified_where_clauses_data( self, clauses: &Self::InternedQuantifiedWhereClauses ) -> &[QuantifiedWhereClause<Self>]

Lookup the slice of QuantifiedWhereClause that was interned to create a QuantifiedWhereClauses.
source§

fn intern_generic_arg_kinds<E>( self, data: impl IntoIterator<Item = Result<VariableKind<ChalkIr>, 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).
source§

fn variable_kinds_data( self, variable_kinds: &Self::InternedVariableKinds ) -> &[VariableKind<ChalkIr>]

Lookup the slice of VariableKinds that was interned to create a VariableKinds.
source§

fn intern_canonical_var_kinds<E>( self, data: impl IntoIterator<Item = Result<CanonicalVarKind<ChalkIr>, 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).
source§

fn canonical_var_kinds_data( self, canonical_var_kinds: &Self::InternedCanonicalVarKinds ) -> &[CanonicalVarKind<ChalkIr>]

Lookup the slice of CanonicalVariableKind that was interned to create a CanonicalVariableKinds.
source§

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).
source§

fn constraints_data( self, constraints: &Self::InternedConstraints ) -> &[InEnvironment<Constraint<Self>>]

Lookup the slice of Constraint that was interned to create a Constraints.
source§

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).
source§

fn variances_data(self, variances: &Self::InternedVariances) -> &[Variance]

Lookup the slice of Variance that was interned to create a Variances.
source§

fn debug_closure_id( fn_def_id: ClosureId<Self>, fmt: &mut Formatter<'_> ) -> Option<Result<(), Error>>

Prints the debug representation of a closure id. Returns None to fallback to the default debug output.
source§

fn debug_foreign_def_id( foreign_def_id: ForeignDefId<Self>, fmt: &mut Formatter<'_> ) -> Option<Result<(), Error>>

Prints the debug representation of a foreign-def-id. Returns None to fallback to the default debug output.
source§

fn debug_coroutine_id( coroutine_id: CoroutineId<Self>, fmt: &mut Formatter<'_> ) -> Option<Result<(), Error>>

Prints the debug representation of an alias. Returns None to fallback to the default debug output.
source§

fn debug_const( constant: &Const<Self>, fmt: &mut Formatter<'_> ) -> Option<Result<(), Error>>

Prints the debug representation of a const. Returns None to fallback to the default debug output.
source§

impl Ord for ChalkIr

source§

fn cmp(&self, other: &ChalkIr) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized + PartialOrd,

Restrict a value to a certain interval. Read more
source§

impl PartialEq for ChalkIr

source§

fn eq(&self, other: &ChalkIr) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl PartialOrd for ChalkIr

source§

fn partial_cmp(&self, other: &ChalkIr) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · source§

fn lt(&self, other: &Rhs) -> bool

This method tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · source§

fn le(&self, other: &Rhs) -> bool

This method tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · source§

fn gt(&self, other: &Rhs) -> bool

This method tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · source§

fn ge(&self, other: &Rhs) -> bool

This method tests greater than or equal to (for self and other) and is used by the >= operator. Read more
source§

impl RustIrDatabase<ChalkIr> for ChalkDatabase

source§

fn custom_clauses(&self) -> Vec<ProgramClause<ChalkIr>>

Returns any “custom program clauses” that do not derive from Rust IR. Used only in testing the underlying solver.
source§

fn associated_ty_data( &self, ty: AssocTypeId<ChalkIr> ) -> Arc<AssociatedTyDatum<ChalkIr>>

Returns the datum for the associated type with the given id.
source§

fn trait_datum(&self, id: TraitId<ChalkIr>) -> Arc<TraitDatum<ChalkIr>>

Returns the datum for the definition with the given id.
source§

fn impl_datum(&self, id: ImplId<ChalkIr>) -> Arc<ImplDatum<ChalkIr>>

Returns the datum for the impl with the given id.
source§

fn associated_ty_value( &self, id: AssociatedTyValueId<ChalkIr> ) -> Arc<AssociatedTyValue<ChalkIr>>

Returns the AssociatedTyValue with the given id.
source§

fn opaque_ty_data(&self, id: OpaqueTyId<ChalkIr>) -> Arc<OpaqueTyDatum<ChalkIr>>

Returns the OpaqueTyDatum with the given id.
source§

fn hidden_opaque_type(&self, id: OpaqueTyId<ChalkIr>) -> Ty<ChalkIr>

Returns the “hidden type” corresponding with the opaque type.
source§

fn adt_datum(&self, id: AdtId<ChalkIr>) -> Arc<AdtDatum<ChalkIr>>

Returns the datum for the ADT with the given id.
source§

fn coroutine_datum( &self, id: CoroutineId<ChalkIr> ) -> Arc<CoroutineDatum<ChalkIr>>

Returns the coroutine datum for the coroutine with the given id.
source§

fn coroutine_witness_datum( &self, id: CoroutineId<ChalkIr> ) -> Arc<CoroutineWitnessDatum<ChalkIr>>

Returns the coroutine witness datum for the coroutine with the given id.
source§

fn adt_repr(&self, id: AdtId<ChalkIr>) -> Arc<AdtRepr<ChalkIr>>

Returns the representation for the ADT definition with the given id.
source§

fn adt_size_align(&self, id: AdtId<ChalkIr>) -> Arc<AdtSizeAlign>

Returns the siza and alignment of the ADT definition with the given id.
source§

fn fn_def_datum(&self, id: FnDefId<ChalkIr>) -> Arc<FnDefDatum<ChalkIr>>

Returns the datum for the fn definition with the given id.
source§

fn impls_for_trait( &self, trait_id: TraitId<ChalkIr>, generic_args: &[GenericArg<ChalkIr>], binders: &CanonicalVarKinds<ChalkIr> ) -> Vec<ImplId<ChalkIr>>

Returns a list of potentially relevant impls for a given trait-id; we also supply the type parameters that we are trying to match (if known: these parameters may contain inference variables, for example). The implementor is permitted to return any superset of the applicable impls; chalk will narrow down the list to only those that truly apply. The parameters are provided as a “hint” to help the implementor do less work, but can be completely ignored if desired. Read more
source§

fn local_impls_to_coherence_check( &self, trait_id: TraitId<ChalkIr> ) -> Vec<ImplId<ChalkIr>>

Returns the impls that require coherence checking. This is not the full set of impls that exist: Read more
source§

fn impl_provided_for( &self, auto_trait_id: TraitId<ChalkIr>, ty: &TyKind<ChalkIr> ) -> bool

Returns true if there is an explicit impl of the auto trait auto_trait_id for the type ty. This is part of the auto trait handling – if there is no explicit impl given by the user for ty, then we provide default impls (otherwise, we rely on the impls the user gave).
source§

fn well_known_trait_id( &self, well_known_trait: WellKnownTrait ) -> Option<TraitId<ChalkIr>>

Returns id of a trait lang item, if found
source§

fn program_clauses_for_env( &self, environment: &Environment<ChalkIr> ) -> ProgramClauses<ChalkIr>

Calculates program clauses from an env. This is intended to call the program_clauses_for_env function and then possibly cache the clauses.
source§

fn interner(&self) -> ChalkIr

source§

fn is_object_safe(&self, trait_id: TraitId<ChalkIr>) -> bool

Check if a trait is object safe
source§

fn closure_inputs_and_output( &self, closure_id: ClosureId<ChalkIr>, substs: &Substitution<ChalkIr> ) -> Binders<FnDefInputsAndOutputDatum<ChalkIr>>

Gets the inputs and output for a given closure id and substitution. We pass both the ClosureId and it’s Substituion to give implementors the freedom to store associated data in the substitution (like rustc) or separately (like chalk-integration).
source§

fn closure_kind( &self, closure_id: ClosureId<ChalkIr>, substs: &Substitution<ChalkIr> ) -> ClosureKind

Gets the ClosureKind for a given closure and substitution.
source§

fn closure_upvars( &self, closure_id: ClosureId<ChalkIr>, substs: &Substitution<ChalkIr> ) -> Binders<Ty<ChalkIr>>

Gets the upvars as a Ty for a given closure id and substitution. There are no restrictions on the type of upvars.
source§

fn closure_fn_substitution( &self, closure_id: ClosureId<ChalkIr>, substs: &Substitution<ChalkIr> ) -> Substitution<ChalkIr>

Gets the substitution for the closure when used as a function. For example, for the following (not-quite-)rust code: Read more
source§

fn unification_database(&self) -> &dyn UnificationDatabase<ChalkIr>

source§

fn trait_name(&self, trait_id: TraitId<ChalkIr>) -> String

Retrieves a trait’s original name. No uniqueness guarantees, but must a valid Rust identifier.
source§

fn adt_name(&self, struct_id: AdtId<ChalkIr>) -> String

Retrieves a struct’s original name. No uniqueness guarantees, but must a valid Rust identifier.
source§

fn assoc_type_name(&self, assoc_ty_id: AssocTypeId<ChalkIr>) -> String

Retrieves the name of an associated type. No uniqueness guarantees, but must a valid Rust identifier.
source§

fn opaque_type_name(&self, opaque_ty_id: OpaqueTyId<ChalkIr>) -> String

Retrieves the name of an opaque type. No uniqueness guarantees, but must a valid Rust identifier.
source§

fn fn_def_name(&self, fn_def_id: FnDefId<ChalkIr>) -> String

Retrieves the name of a function definition. No uniqueness guarantees, but must a valid Rust identifier.
source§

fn discriminant_type(&self, ty: Ty<ChalkIr>) -> Ty<ChalkIr>

source§

impl RustIrDatabase<ChalkIr> for Program

source§

fn custom_clauses(&self) -> Vec<ProgramClause<ChalkIr>>

Returns any “custom program clauses” that do not derive from Rust IR. Used only in testing the underlying solver.
source§

fn associated_ty_data( &self, ty: AssocTypeId<ChalkIr> ) -> Arc<AssociatedTyDatum<ChalkIr>>

Returns the datum for the associated type with the given id.
source§

fn trait_datum(&self, id: TraitId<ChalkIr>) -> Arc<TraitDatum<ChalkIr>>

Returns the datum for the definition with the given id.
source§

fn impl_datum(&self, id: ImplId<ChalkIr>) -> Arc<ImplDatum<ChalkIr>>

Returns the datum for the impl with the given id.
source§

fn associated_ty_value( &self, id: AssociatedTyValueId<ChalkIr> ) -> Arc<AssociatedTyValue<ChalkIr>>

Returns the AssociatedTyValue with the given id.
source§

fn opaque_ty_data(&self, id: OpaqueTyId<ChalkIr>) -> Arc<OpaqueTyDatum<ChalkIr>>

Returns the OpaqueTyDatum with the given id.
source§

fn hidden_opaque_type(&self, id: OpaqueTyId<ChalkIr>) -> Ty<ChalkIr>

Returns the “hidden type” corresponding with the opaque type.
source§

fn adt_datum(&self, id: AdtId<ChalkIr>) -> Arc<AdtDatum<ChalkIr>>

Returns the datum for the ADT with the given id.
source§

fn coroutine_datum( &self, id: CoroutineId<ChalkIr> ) -> Arc<CoroutineDatum<ChalkIr>>

Returns the coroutine datum for the coroutine with the given id.
source§

fn coroutine_witness_datum( &self, id: CoroutineId<ChalkIr> ) -> Arc<CoroutineWitnessDatum<ChalkIr>>

Returns the coroutine witness datum for the coroutine with the given id.
source§

fn adt_repr(&self, id: AdtId<ChalkIr>) -> Arc<AdtRepr<ChalkIr>>

Returns the representation for the ADT definition with the given id.
source§

fn adt_size_align(&self, id: AdtId<ChalkIr>) -> Arc<AdtSizeAlign>

Returns the siza and alignment of the ADT definition with the given id.
source§

fn fn_def_datum(&self, id: FnDefId<ChalkIr>) -> Arc<FnDefDatum<ChalkIr>>

Returns the datum for the fn definition with the given id.
source§

fn impls_for_trait( &self, trait_id: TraitId<ChalkIr>, parameters: &[GenericArg<ChalkIr>], _binders: &CanonicalVarKinds<ChalkIr> ) -> Vec<ImplId<ChalkIr>>

Returns a list of potentially relevant impls for a given trait-id; we also supply the type parameters that we are trying to match (if known: these parameters may contain inference variables, for example). The implementor is permitted to return any superset of the applicable impls; chalk will narrow down the list to only those that truly apply. The parameters are provided as a “hint” to help the implementor do less work, but can be completely ignored if desired. Read more
source§

fn local_impls_to_coherence_check( &self, trait_id: TraitId<ChalkIr> ) -> Vec<ImplId<ChalkIr>>

Returns the impls that require coherence checking. This is not the full set of impls that exist: Read more
source§

fn impl_provided_for( &self, auto_trait_id: TraitId<ChalkIr>, impl_ty: &TyKind<ChalkIr> ) -> bool

Returns true if there is an explicit impl of the auto trait auto_trait_id for the type ty. This is part of the auto trait handling – if there is no explicit impl given by the user for ty, then we provide default impls (otherwise, we rely on the impls the user gave).
source§

fn well_known_trait_id( &self, well_known_trait: WellKnownTrait ) -> Option<TraitId<ChalkIr>>

Returns id of a trait lang item, if found
source§

fn program_clauses_for_env( &self, environment: &Environment<ChalkIr> ) -> ProgramClauses<ChalkIr>

Calculates program clauses from an env. This is intended to call the program_clauses_for_env function and then possibly cache the clauses.
source§

fn interner(&self) -> ChalkIr

source§

fn is_object_safe(&self, trait_id: TraitId<ChalkIr>) -> bool

Check if a trait is object safe
source§

fn closure_inputs_and_output( &self, closure_id: ClosureId<ChalkIr>, _substs: &Substitution<ChalkIr> ) -> Binders<FnDefInputsAndOutputDatum<ChalkIr>>

Gets the inputs and output for a given closure id and substitution. We pass both the ClosureId and it’s Substituion to give implementors the freedom to store associated data in the substitution (like rustc) or separately (like chalk-integration).
source§

fn closure_kind( &self, closure_id: ClosureId<ChalkIr>, _substs: &Substitution<ChalkIr> ) -> ClosureKind

Gets the ClosureKind for a given closure and substitution.
source§

fn closure_upvars( &self, closure_id: ClosureId<ChalkIr>, _substs: &Substitution<ChalkIr> ) -> Binders<Ty<ChalkIr>>

Gets the upvars as a Ty for a given closure id and substitution. There are no restrictions on the type of upvars.
source§

fn closure_fn_substitution( &self, _closure_id: ClosureId<ChalkIr>, substs: &Substitution<ChalkIr> ) -> Substitution<ChalkIr>

Gets the substitution for the closure when used as a function. For example, for the following (not-quite-)rust code: Read more
source§

fn unification_database(&self) -> &dyn UnificationDatabase<ChalkIr>

source§

fn assoc_type_name(&self, assoc_type_id: AssocTypeId<ChalkIr>) -> String

Retrieves the name of an associated type. No uniqueness guarantees, but must a valid Rust identifier.
source§

fn discriminant_type(&self, ty: Ty<ChalkIr>) -> Ty<ChalkIr>

source§

fn trait_name(&self, trait_id: TraitId<I>) -> String

Retrieves a trait’s original name. No uniqueness guarantees, but must a valid Rust identifier.
source§

fn adt_name(&self, adt_id: AdtId<I>) -> String

Retrieves a struct’s original name. No uniqueness guarantees, but must a valid Rust identifier.
source§

fn opaque_type_name(&self, opaque_ty_id: OpaqueTyId<I>) -> String

Retrieves the name of an opaque type. No uniqueness guarantees, but must a valid Rust identifier.
source§

fn fn_def_name(&self, fn_def_id: FnDefId<I>) -> String

Retrieves the name of a function definition. No uniqueness guarantees, but must a valid Rust identifier.
source§

impl UnificationDatabase<ChalkIr> for ChalkDatabase

source§

fn fn_def_variance(&self, fn_def_id: FnDefId<ChalkIr>) -> Variances<ChalkIr>

Gets the variances for the substitution of a fn def
source§

fn adt_variance(&self, adt_id: AdtId<ChalkIr>) -> Variances<ChalkIr>

Gets the variances for the substitution of a adt
source§

impl UnificationDatabase<ChalkIr> for Program

source§

fn fn_def_variance(&self, fn_def_id: FnDefId<ChalkIr>) -> Variances<ChalkIr>

Gets the variances for the substitution of a fn def
source§

fn adt_variance(&self, adt_id: AdtId<ChalkIr>) -> Variances<ChalkIr>

Gets the variances for the substitution of a adt
source§

impl Copy for ChalkIr

source§

impl Eq for ChalkIr

source§

impl StructuralPartialEq for ChalkIr

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> Cast for T

source§

fn cast<U>(self, interner: <U as HasInterner>::Interner) -> U
where Self: CastTo<U>, U: HasInterner,

Cast a value to type U using CastTo.
§

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T, U> Upcast<U> for T
where U: UpcastFrom<T> + ?Sized, T: ?Sized,

source§

fn upcast(&self) -> &U

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
source§

impl<N> NodeTrait for N
where N: Copy + Ord + Hash,