mod plumbing; pub use self::plumbing::*; mod job; #[cfg(parallel_compiler)] pub use self::job::deadlock; pub use self::job::{QueryInfo, QueryJob, QueryJobId, QueryJobInfo}; mod caches; pub use self::caches::{ ArenaCacheSelector, CacheSelector, DefaultCacheSelector, QueryCache, QueryStorage, }; mod config; pub use self::config::{QueryAccessors, QueryConfig, QueryDescription}; use crate::dep_graph::HasDepContext; use crate::query::job::QueryMap; use rustc_data_structures::stable_hasher::HashStable; use rustc_data_structures::sync::Lock; use rustc_data_structures::thin_vec::ThinVec; use rustc_errors::Diagnostic; use rustc_span::def_id::DefId; pub trait QueryContext: HasDepContext { type Query: Clone + HashStable; fn incremental_verify_ich(&self) -> bool; fn verbose(&self) -> bool; /// Get string representation from DefPath. fn def_path_str(&self, def_id: DefId) -> String; /// Get the query information from the TLS context. fn current_query_job(&self) -> Option>; fn try_collect_active_jobs(&self) -> Option>; /// Executes a job by changing the `ImplicitCtxt` to point to the /// new query job while it executes. It returns the diagnostics /// captured during execution and the actual result. fn start_query( &self, token: QueryJobId, diagnostics: Option<&Lock>>, compute: impl FnOnce() -> R, ) -> R; }