rustc_middle::query::on_disk_cache

Struct OnDiskCache

source
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, ) -> Result<Self, ()>

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

The serialized cache has some basic integrity checks, if those checks indicate that the on-disk data is corrupt, an error is returned.

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, ) -> T
where T: Decodable<CacheDecoder<'a, 'tcx>>,

Auto Trait Implementations§

§

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

§

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 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, R> CollectAndApply<T, R> for T

source§

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

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

source§

type Output = R

source§

impl<T> Filterable for T

source§

fn filterable( self, filter_name: &'static str, ) -> RequestFilterDataProvider<T, fn(_: DataRequest<'_>) -> bool>

Creates a filterable data provider with the given name for debugging. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T> Instrument for T

source§

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

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

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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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 more
source§

impl<P> IntoQueryParam<P> for P

source§

impl<T> MaybeResult<T> for T

source§

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<T> Same for T

source§

type Output = T

Should always be Self
source§

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

source§

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>,

source§

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<I, T, U> Upcast<I, U> for T
where U: UpcastFrom<I, T>,

source§

fn upcast(self, interner: I) -> U

source§

impl<I, T> UpcastFrom<I, T> for T

source§

fn upcast_from(from: T, _tcx: I) -> T

source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

source§

fn vzip(self) -> V

source§

impl<Tcx, T> Value<Tcx> for T
where Tcx: DepContext,

source§

default fn from_cycle_error( tcx: Tcx, cycle_error: &CycleError, _guar: ErrorGuaranteed, ) -> T

source§

impl<T> WithSubscriber for T

source§

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

fn with_current_subscriber(self) -> WithDispatch<Self>

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

impl<'a, T> Captures<'a> for T
where T: ?Sized,

source§

impl<T> ErasedDestructor for T
where T: 'static,

source§

impl<T> MaybeSendSync for 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