Struct rustc_middle::ty::query::on_disk_cache::OnDiskCache [−][src]
pub struct OnDiskCache<'sess> {Show fields
serialized_data: Vec<u8>,
current_diagnostics: Lock<FxHashMap<DepNodeIndex, Vec<Diagnostic>>>,
cnum_map: OnceCell<UnhashMap<StableCrateId, CrateNum>>,
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_diagnostics_index: FxHashMap<SerializedDepNodeIndex, AbsoluteBytePos>,
alloc_decoding_state: AllocDecodingState,
syntax_contexts: FxHashMap<u32, AbsoluteBytePos>,
expn_data: FxHashMap<u32, AbsoluteBytePos>,
hygiene_context: HygieneDecodeContext,
foreign_def_path_hashes: UnhashMap<DefPathHash, RawDefId>,
latest_foreign_def_path_hashes: Lock<UnhashMap<DefPathHash, RawDefId>>,
def_path_hash_to_def_id_cache: Lock<UnhashMap<DefPathHash, Option<DefId>>>,
}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 diagnostics that have been emitted during a query.
Fields
serialized_data: Vec<u8>current_diagnostics: Lock<FxHashMap<DepNodeIndex, Vec<Diagnostic>>>cnum_map: OnceCell<UnhashMap<StableCrateId, CrateNum>>source_map: &'sess SourceMapfile_index_to_stable_id: FxHashMap<SourceFileIndex, EncodedSourceFileId>file_index_to_file: Lock<FxHashMap<SourceFileIndex, Lrc<SourceFile>>>query_result_index: FxHashMap<SerializedDepNodeIndex, AbsoluteBytePos>prev_diagnostics_index: FxHashMap<SerializedDepNodeIndex, AbsoluteBytePos>alloc_decoding_state: AllocDecodingStatesyntax_contexts: FxHashMap<u32, AbsoluteBytePos>expn_data: FxHashMap<u32, AbsoluteBytePos>hygiene_context: HygieneDecodeContextforeign_def_path_hashes: UnhashMap<DefPathHash, RawDefId>latest_foreign_def_path_hashes: Lock<UnhashMap<DefPathHash, RawDefId>>def_path_hash_to_def_id_cache: Lock<UnhashMap<DefPathHash, Option<DefId>>>Implementations
Creates a new OnDiskCache instance from the serialized data in data.
pub fn serialize<'tcx>(
&self,
tcx: TyCtxt<'tcx>,
encoder: &mut FileEncoder
) -> FileEncodeResultpub fn load_diagnostics(
&self,
tcx: TyCtxt<'_>,
dep_node_index: SerializedDepNodeIndex
) -> Vec<Diagnostic>
pub fn load_diagnostics(
&self,
tcx: TyCtxt<'_>,
dep_node_index: SerializedDepNodeIndex
) -> Vec<Diagnostic>Loads a diagnostic emitted during the previous compilation session.
pub fn store_diagnostics(
&self,
dep_node_index: DepNodeIndex,
diagnostics: ThinVec<Diagnostic>
)
pub fn store_diagnostics(
&self,
dep_node_index: DepNodeIndex,
diagnostics: ThinVec<Diagnostic>
)Stores a diagnostic emitted during the current compilation session.
Anything stored like this will be available via load_diagnostics in
the next compilation session.
If the given dep_node’s hash still exists in the current compilation,
and its current DefId is foreign, calls store_foreign_def_id with it.
Normally, store_foreign_def_id_hash can be called directly by
the dependency graph when we construct a DepNode. However,
when we re-use a deserialized DepNode from the previous compilation
session, we only have the DefPathHash available. This method is used
to that any DepNode that we re-use has a DefPathHash -> RawId written
out for usage in the next compilation session.
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>>,
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.
pub fn store_diagnostics_for_anon_node(
&self,
dep_node_index: DepNodeIndex,
diagnostics: ThinVec<Diagnostic>
)
pub fn store_diagnostics_for_anon_node(
&self,
dep_node_index: DepNodeIndex,
diagnostics: ThinVec<Diagnostic>
)Stores a diagnostic 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.
fn load_indexed<'tcx, T>(
&self,
tcx: TyCtxt<'tcx>,
dep_node_index: SerializedDepNodeIndex,
index: &FxHashMap<SerializedDepNodeIndex, AbsoluteBytePos>,
debug_tag: &'static str
) -> Option<T> where
T: for<'a> Decodable<CacheDecoder<'a, 'tcx>>, fn with_decoder<'a, 'tcx, T, F: FnOnce(&mut CacheDecoder<'sess, 'tcx>) -> T>(
&'sess self,
tcx: TyCtxt<'tcx>,
pos: AbsoluteBytePos,
f: F
) -> T where
T: Decodable<CacheDecoder<'a, 'tcx>>, pub(crate) fn def_path_hash_to_def_id<'tcx>(
&self,
tcx: TyCtxt<'tcx>,
hash: DefPathHash
) -> Option<DefId>
pub(crate) fn def_path_hash_to_def_id<'tcx>(
&self,
tcx: TyCtxt<'tcx>,
hash: DefPathHash
) -> Option<DefId>Converts a DefPathHash to its corresponding DefId in the current compilation
session, if it still exists. This is used during incremental compilation to
turn a deserialized DefPathHash into its current DefId.
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
Layout
Note: Most layout information is completely unstable and may be different between compiler versions and platforms. 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: 528 bytes