pub struct GlobalCaches<'tcx> {
pub ty_rcache: Lock<FxHashMap<CReaderCacheKey, Ty<'tcx>>>,
pub selection_cache: SelectionCache<'tcx, TypingEnv<'tcx>>,
pub evaluation_cache: EvaluationCache<'tcx, TypingEnv<'tcx>>,
new_solver_evaluation_cache: Lock<GlobalCache<TyCtxt<'tcx>>>,
new_solver_canonical_param_env_cache: Lock<CanonicalParamEnvCache<TyCtxt<'tcx>>>,
pub canonical_param_env_cache: CanonicalParamEnvCache<'tcx>,
pub highest_var_in_clauses_cache: Lock<FxHashMap<Clauses<'tcx>, usize>>,
pub clauses_cache: Lock<FxHashMap<(Clauses<'tcx>, &'tcx [GenericArg<'tcx>]), Clauses<'tcx>>>,
}Expand description
An assortment of global caches used by various parts of the compiler.
The individual fields are mostly unrelated to each other, but have been grouped together to
reduce the number of top-level fields in GlobalCtxt.
Fields§
§ty_rcache: Lock<FxHashMap<CReaderCacheKey, Ty<'tcx>>>§selection_cache: SelectionCache<'tcx, TypingEnv<'tcx>>Caches the results of trait selection. This cache is used for things that do not have to do with the parameters in scope.
evaluation_cache: EvaluationCache<'tcx, TypingEnv<'tcx>>Caches the results of trait evaluation. This cache is used
for things that do not have to do with the parameters in scope.
Merge this with selection_cache?
new_solver_evaluation_cache: Lock<GlobalCache<TyCtxt<'tcx>>>Caches the results of goal evaluation in the new solver.
new_solver_canonical_param_env_cache: Lock<CanonicalParamEnvCache<TyCtxt<'tcx>>>§canonical_param_env_cache: CanonicalParamEnvCache<'tcx>§highest_var_in_clauses_cache: Lock<FxHashMap<Clauses<'tcx>, usize>>Caches the index of the highest bound var in clauses in a canonical binder.
clauses_cache: Lock<FxHashMap<(Clauses<'tcx>, &'tcx [GenericArg<'tcx>]), Clauses<'tcx>>>Caches the instantiation of a canonical binder given a set of args.
Trait Implementations§
Source§impl<'tcx> Default for GlobalCaches<'tcx>
impl<'tcx> Default for GlobalCaches<'tcx>
Source§fn default() -> GlobalCaches<'tcx>
fn default() -> GlobalCaches<'tcx>
Auto Trait Implementations§
impl<'tcx> !Freeze for GlobalCaches<'tcx>
impl<'tcx> !RefUnwindSafe for GlobalCaches<'tcx>
impl<'tcx> !Sync for GlobalCaches<'tcx>
impl<'tcx> !UnwindSafe for GlobalCaches<'tcx>
impl<'tcx> DynSend for GlobalCaches<'tcx>
impl<'tcx> DynSync for GlobalCaches<'tcx>
impl<'tcx> Send for GlobalCaches<'tcx>
impl<'tcx> Unpin for GlobalCaches<'tcx>
impl<'tcx> UnsafeUnpin for GlobalCaches<'tcx>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T, R> CollectAndApply<T, R> for T
impl<T, R> CollectAndApply<T, R> for T
impl<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<K> IntoQueryKey<K> for K
impl<K> IntoQueryKey<K> for K
Source§fn into_query_key(self) -> K
fn into_query_key(self) -> K
Self to K.
This should always be a very cheap conversion, e.g. LocalDefId::to_def_id.Source§impl<T> MaybeResult<T> for T
impl<T> MaybeResult<T> for T
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
impl<I, T, U> Upcast<I, U> for Twhere
U: UpcastFrom<I, T>,
Source§impl<I, T> UpcastFrom<I, T> for T
impl<I, T> UpcastFrom<I, T> for T
fn upcast_from(from: T, _tcx: I) -> T
Source§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
Source§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
Source§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 320 bytes