pub struct QueryVTable<'tcx, C: QueryCache> {Show 19 fields
pub name: &'static str,
pub anon: bool,
pub eval_always: bool,
pub depth_limit: bool,
pub feedable: bool,
pub dep_kind: DepKind,
pub cycle_error_handling: CycleErrorHandling,
pub state: QueryState<'tcx, C::Key>,
pub cache: C,
pub will_cache_on_disk_for_key_fn: Option<WillCacheOnDiskForKeyFn<'tcx, C::Key>>,
pub call_query_method_fn: fn(tcx: TyCtxt<'tcx>, key: C::Key),
pub invoke_provider_fn: fn(tcx: TyCtxt<'tcx>, key: C::Key) -> C::Value,
pub try_load_from_disk_fn: Option<TryLoadFromDiskFn<'tcx, C::Key, C::Value>>,
pub is_loadable_from_disk_fn: Option<IsLoadableFromDiskFn<'tcx, C::Key>>,
pub hash_result: HashResult<C::Value>,
pub value_from_cycle_error: fn(tcx: TyCtxt<'tcx>, cycle_error: &CycleError, guar: ErrorGuaranteed) -> C::Value,
pub format_value: fn(&C::Value) -> String,
pub description_fn: fn(TyCtxt<'tcx>, C::Key) -> String,
pub execute_query_fn: fn(TyCtxt<'tcx>, Span, C::Key, QueryMode) -> Option<C::Value>,
}Expand description
Stores data and metadata (e.g. function pointers) for a particular query.
Fields§
§name: &'static str§anon: boolTrue if this query has the anon modifier.
eval_always: boolTrue if this query has the eval_always modifier.
depth_limit: boolTrue if this query has the depth_limit modifier.
feedable: boolTrue if this query has the feedable modifier.
dep_kind: DepKind§cycle_error_handling: CycleErrorHandlingHow this query deals with query cycle errors.
state: QueryState<'tcx, C::Key>§cache: C§will_cache_on_disk_for_key_fn: Option<WillCacheOnDiskForKeyFn<'tcx, C::Key>>§call_query_method_fn: fn(tcx: TyCtxt<'tcx>, key: C::Key)Function pointer that calls tcx.$query(key) for this query and
discards the returned value.
This is a weird thing to be doing, and probably not what you want. It is used for loading query results from disk-cache in some cases.
invoke_provider_fn: fn(tcx: TyCtxt<'tcx>, key: C::Key) -> C::ValueFunction pointer that actually calls this query’s provider.
Also performs some associated secondary tasks; see the macro-defined
implementation in mod invoke_provider_fn for more details.
This should be the only code that calls the provider function.
try_load_from_disk_fn: Option<TryLoadFromDiskFn<'tcx, C::Key, C::Value>>§is_loadable_from_disk_fn: Option<IsLoadableFromDiskFn<'tcx, C::Key>>§hash_result: HashResult<C::Value>§value_from_cycle_error: fn(tcx: TyCtxt<'tcx>, cycle_error: &CycleError, guar: ErrorGuaranteed) -> C::Value§format_value: fn(&C::Value) -> String§description_fn: fn(TyCtxt<'tcx>, C::Key) -> StringFormats a human-readable description of this query and its key, as
specified by the desc query modifier.
Used when reporting query cycle errors and similar problems.
execute_query_fn: fn(TyCtxt<'tcx>, Span, C::Key, QueryMode) -> Option<C::Value>Function pointer that is called by the query methods on TyCtxt and
friends1, after they have checked the in-memory cache and found no
existing value for this key.
Transitive responsibilities include trying to load a disk-cached value if possible (incremental only), invoking the query provider if necessary, and putting the obtained value into the in-memory cache.
Implementations§
Source§impl<'tcx, C: QueryCache> QueryVTable<'tcx, C>
impl<'tcx, C: QueryCache> QueryVTable<'tcx, C>
pub fn will_cache_on_disk_for_key( &self, tcx: TyCtxt<'tcx>, key: &C::Key, ) -> bool
pub fn try_load_from_disk( &self, tcx: TyCtxt<'tcx>, key: &C::Key, prev_index: SerializedDepNodeIndex, index: DepNodeIndex, ) -> Option<C::Value>
pub fn is_loadable_from_disk( &self, tcx: TyCtxt<'tcx>, key: &C::Key, index: SerializedDepNodeIndex, ) -> bool
Sourcepub fn value_from_cycle_error(
&self,
tcx: TyCtxt<'tcx>,
cycle_error: &CycleError,
guar: ErrorGuaranteed,
) -> C::Value
pub fn value_from_cycle_error( &self, tcx: TyCtxt<'tcx>, cycle_error: &CycleError, guar: ErrorGuaranteed, ) -> C::Value
Synthesize an error value to let compilation continue after a cycle.
pub fn construct_dep_node(&self, tcx: TyCtxt<'tcx>, key: &C::Key) -> DepNode
Trait Implementations§
Auto Trait Implementations§
impl<'tcx, C> DynSend for QueryVTable<'tcx, C>
impl<'tcx, C> DynSync for QueryVTable<'tcx, C>
impl<'tcx, C> !Freeze for QueryVTable<'tcx, C>
impl<'tcx, C> !RefUnwindSafe for QueryVTable<'tcx, C>
impl<'tcx, C> !Send for QueryVTable<'tcx, C>
impl<'tcx, C> !Sync for QueryVTable<'tcx, C>
impl<'tcx, C> Unpin for QueryVTable<'tcx, C>
impl<'tcx, C> UnsafeUnpin for QueryVTable<'tcx, C>where
C: UnsafeUnpin,
impl<'tcx, C> !UnwindSafe for QueryVTable<'tcx, C>
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
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<P> IntoQueryParam<P> for P
impl<P> IntoQueryParam<P> for P
fn into_query_param(self) -> P
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>
impl<T> ErasedDestructor for Twhere
T: 'static,
Layout§
Note: Unable to compute type layout, possibly due to this type having generic parameters. Layout can only be computed for concrete, fully-instantiated types.