pub struct StableHashingContext<'a> {
untracked: &'a Untracked,
incremental_ignore_spans: bool,
caching_source_map: CachingSourceMap<'a>,
hashing_controls: HashingControls,
}Expand description
This is the context state available during incr. comp. hashing. It contains
enough information to transform DefIds and HirIds into stable DefPaths (i.e.,
a reference to the TyCtxt) and it holds a few caches for speeding up various
things (e.g., each DefId/DefPath is only hashed once).
Fields§
§untracked: &'a Untracked§incremental_ignore_spans: bool§caching_source_map: CachingSourceMap<'a>§hashing_controls: HashingControlsImplementations§
Source§impl<'a> StableHashingContext<'a>
impl<'a> StableHashingContext<'a>
pub fn new(sess: &'a Session, untracked: &'a Untracked) -> Self
pub fn while_hashing_spans<F: FnOnce(&mut Self)>( &mut self, hash_spans: bool, f: F, )
fn source_map(&mut self) -> &mut CachingSourceMapView<'a>
fn def_span(&self, def_id: LocalDefId) -> Span
pub fn hashing_controls(&self) -> HashingControls
Trait Implementations§
Source§impl<'a> Clone for StableHashingContext<'a>
impl<'a> Clone for StableHashingContext<'a>
Source§fn clone(&self) -> StableHashingContext<'a>
fn clone(&self) -> StableHashingContext<'a>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'a> HashStable<StableHashingContext<'a>> for [Attribute]
impl<'a> HashStable<StableHashingContext<'a>> for [Attribute]
fn hash_stable( &self, hcx: &mut StableHashingContext<'a>, hasher: &mut StableHasher, )
Source§impl<'a> HashStable<StableHashingContext<'a>> for NodeId
impl<'a> HashStable<StableHashingContext<'a>> for NodeId
fn hash_stable(&self, _: &mut StableHashingContext<'a>, _: &mut StableHasher)
Source§impl<'a> HashStable<StableHashingContext<'a>> for SourceFile
impl<'a> HashStable<StableHashingContext<'a>> for SourceFile
fn hash_stable( &self, hcx: &mut StableHashingContext<'a>, hasher: &mut StableHasher, )
Source§impl<'tcx> HashStable<StableHashingContext<'tcx>> for EnabledLangFeature
impl<'tcx> HashStable<StableHashingContext<'tcx>> for EnabledLangFeature
fn hash_stable( &self, hcx: &mut StableHashingContext<'tcx>, hasher: &mut StableHasher, )
Source§impl<'tcx> HashStable<StableHashingContext<'tcx>> for EnabledLibFeature
impl<'tcx> HashStable<StableHashingContext<'tcx>> for EnabledLibFeature
fn hash_stable( &self, hcx: &mut StableHashingContext<'tcx>, hasher: &mut StableHasher, )
Source§impl<'tcx> HashStable<StableHashingContext<'tcx>> for Features
impl<'tcx> HashStable<StableHashingContext<'tcx>> for Features
fn hash_stable( &self, hcx: &mut StableHashingContext<'tcx>, hasher: &mut StableHasher, )
Source§impl<'a> HashStableContext for StableHashingContext<'a>
impl<'a> HashStableContext for StableHashingContext<'a>
Source§fn span_hash_stable(&mut self, span: Span, hasher: &mut StableHasher)
fn span_hash_stable(&mut self, span: Span, hasher: &mut StableHasher)
Hashes a span in a stable way. We can’t directly hash the span’s BytePos fields (that
would be similar to hashing pointers, since those are just offsets into the SourceMap).
Instead, we hash the (file name, line, column) triple, which stays the same even if the
containing SourceFile has moved within the SourceMap.
Also note that we are hashing byte offsets for the column, not unicode codepoint offsets. For the purpose of the hash that’s sufficient. Also, hashing filenames is expensive so we avoid doing it twice when the span starts and ends in the same file, which is almost always the case.
IMPORTANT: changes to this method should be reflected in implementations of SpanEncoder.
Source§fn assert_default_hashing_controls(&self, msg: &str)
fn assert_default_hashing_controls(&self, msg: &str)
Assert that the provided HashStableContext is configured with the default
HashingControls. We should always have bailed out before getting to here with a
non-default mode. With this check in place, we can avoid the need to maintain separate
versions of ExpnData hashes for each permutation of HashingControls settings.
Source§fn def_path_hash(&self, def_id: DefId) -> DefPathHash
fn def_path_hash(&self, def_id: DefId) -> DefPathHash
DefPathHash.impl<'a> HashStableContext for StableHashingContext<'a>
impl<'a> HashStableContext for StableHashingContext<'a>
impl<'a> HashStableContext for StableHashingContext<'a>
impl<'a> HashStableContext for StableHashingContext<'a>
Auto Trait Implementations§
impl<'a> DynSend for StableHashingContext<'a>
impl<'a> DynSync for StableHashingContext<'a>
impl<'a> Freeze for StableHashingContext<'a>
impl<'a> !RefUnwindSafe for StableHashingContext<'a>
impl<'a> !Send for StableHashingContext<'a>
impl<'a> !Sync for StableHashingContext<'a>
impl<'a> Unpin for StableHashingContext<'a>
impl<'a> !UnwindSafe for StableHashingContext<'a>
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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<T> Pointable for T
impl<T> Pointable for 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>
impl<T> ErasedDestructor for Twhere
T: 'static,
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: 152 bytes