pub struct OnDiskCache<'sess> {
    serialized_data: RwLock<Option<Mmap>>,
    current_side_effects: Lock<FxHashMap<DepNodeIndex, QuerySideEffects>>,
    source_map: &'sess SourceMap,
    file_index_to_stable_id: FxHashMap<SourceFileIndex, EncodedSourceFileId>,
    file_index_to_file: Lock<FxHashMap<SourceFileIndex, Lrc<SourceFile>>>,
    query_result_index: FxHashMap<SerializedDepNodeIndex, AbsoluteBytePos>,
    prev_side_effects_index: FxHashMap<SerializedDepNodeIndex, AbsoluteBytePos>,
    alloc_decoding_state: AllocDecodingState,
    syntax_contexts: FxHashMap<u32, AbsoluteBytePos>,
    expn_data: UnhashMap<ExpnHash, AbsoluteBytePos>,
    hygiene_context: HygieneDecodeContext,
    foreign_expn_data: UnhashMap<ExpnHash, u32>,
}
Expand description

Provides an interface to incremental compilation data cached from the previous compilation session. This data will eventually include the results of a few selected queries (like typeck and mir_optimized) and any side effects that have been emitted during a query.

Fields§

§serialized_data: RwLock<Option<Mmap>>§current_side_effects: Lock<FxHashMap<DepNodeIndex, QuerySideEffects>>§source_map: &'sess SourceMap§file_index_to_stable_id: FxHashMap<SourceFileIndex, EncodedSourceFileId>§file_index_to_file: Lock<FxHashMap<SourceFileIndex, Lrc<SourceFile>>>§query_result_index: FxHashMap<SerializedDepNodeIndex, AbsoluteBytePos>§prev_side_effects_index: FxHashMap<SerializedDepNodeIndex, AbsoluteBytePos>§alloc_decoding_state: AllocDecodingState§syntax_contexts: FxHashMap<u32, AbsoluteBytePos>§expn_data: UnhashMap<ExpnHash, AbsoluteBytePos>§hygiene_context: HygieneDecodeContext§foreign_expn_data: UnhashMap<ExpnHash, u32>

Implementations§

source§

impl<'sess> OnDiskCache<'sess>

source

pub fn new(sess: &'sess Session, data: Mmap, start_pos: usize) -> Self

Creates a new OnDiskCache instance from the serialized data in data.

source

pub fn new_empty(source_map: &'sess SourceMap) -> Self

source

pub fn drop_serialized_data(&self, tcx: TyCtxt<'_>)

Execute all cache promotions and release the serialized backing Mmap.

Cache promotions require invoking queries, which needs to read the serialized data. In order to serialize the new on-disk cache, the former on-disk cache file needs to be deleted, hence we won’t be able to refer to its memmapped data.

source

pub fn serialize( &self, tcx: TyCtxt<'_>, encoder: FileEncoder ) -> FileEncodeResult

source

pub fn load_side_effects( &self, tcx: TyCtxt<'_>, dep_node_index: SerializedDepNodeIndex ) -> QuerySideEffects

Loads a QuerySideEffects created during the previous compilation session.

source

pub fn store_side_effects( &self, dep_node_index: DepNodeIndex, side_effects: QuerySideEffects )

Stores a QuerySideEffects emitted during the current compilation session. Anything stored like this will be available via load_side_effects in the next compilation session.

source

pub fn loadable_from_disk(&self, dep_node_index: SerializedDepNodeIndex) -> bool

Return whether the cached query result can be decoded.

source

pub fn try_load_query_result<'tcx, T>( &self, tcx: TyCtxt<'tcx>, dep_node_index: SerializedDepNodeIndex ) -> Option<T>where T: for<'a> Decodable<CacheDecoder<'a, 'tcx>>,

Returns the cached query result if there is something in the cache for the given SerializedDepNodeIndex; otherwise returns None.

source

pub fn store_side_effects_for_anon_node( &self, dep_node_index: DepNodeIndex, side_effects: QuerySideEffects )

Stores side effect emitted during computation of an anonymous query. Since many anonymous queries can share the same DepNode, we aggregate them – as opposed to regular queries where we assume that there is a 1:1 relationship between query-key and DepNode.

source

fn load_indexed<'tcx, T>( &self, tcx: TyCtxt<'tcx>, dep_node_index: SerializedDepNodeIndex, index: &FxHashMap<SerializedDepNodeIndex, AbsoluteBytePos> ) -> Option<T>where T: for<'a> Decodable<CacheDecoder<'a, 'tcx>>,

source

fn with_decoder<'a, 'tcx, T, F: for<'s> FnOnce(&mut CacheDecoder<'s, 'tcx>) -> T>( &'sess self, tcx: TyCtxt<'tcx>, pos: AbsoluteBytePos, f: F ) -> Twhere T: Decodable<CacheDecoder<'a, 'tcx>>,

Auto Trait Implementations§

§

impl<'sess> !RefUnwindSafe for OnDiskCache<'sess>

§

impl<'sess> !Send for OnDiskCache<'sess>

§

impl<'sess> !Sync for OnDiskCache<'sess>

§

impl<'sess> Unpin for OnDiskCache<'sess>

§

impl<'sess> !UnwindSafe for OnDiskCache<'sess>

Blanket Implementations§

source§

impl<T> Aligned for T

source§

const ALIGN: Alignment = _

Alignment of Self.
source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

source§

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

Mutably borrows from an owned value. Read more
source§

impl<T, R> CollectAndApply<T, R> for T

source§

fn collect_and_apply<I, F>(iter: I, f: F) -> Rwhere I: Iterator<Item = T>, F: FnOnce(&[T]) -> R,

Equivalent to f(&iter.collect::<Vec<_>>()).

§

type Output = R

source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere 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<P> IntoQueryParam<P> for P

source§

impl<T> MaybeResult<T> for T

§

type Error = !

source§

fn from(_: Result<T, <T as MaybeResult<T>>::Error>) -> T

source§

fn to_result(self) -> Result<T, <T as MaybeResult<T>>::Error>

source§

impl<'tcx, T> ToPredicate<'tcx, T> for T

source§

fn to_predicate(self, _tcx: TyCtxt<'tcx>) -> T

source§

impl<T, U> TryFrom<U> for Twhere 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 Twhere 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<Tcx, T> Value<Tcx> for Twhere Tcx: DepContext,

source§

default fn from_cycle_error( tcx: Tcx, cycle: &[QueryInfo], _guar: ErrorGuaranteed ) -> T

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: 464 bytes