| use rustc_data_structures::jobserver::Proxy; |
| use rustc_hir::def_id::LocalDefId; |
| use rustc_query_system::query::QuerySideEffect; |
| |
| pub use self::caches::{ |
| DefIdCache, DefaultCache, QueryCache, QueryCacheKey, SingleCache, VecCache, |
| }; |
| pub use self::job::{QueryInfo, QueryJob, QueryJobId, QueryLatch, QueryWaiter}; |
| pub use self::keys::{AsLocalKey, Key, LocalCrate}; |
| pub use self::plumbing::{ |
| ActiveKeyStatus, CycleError, CycleErrorHandling, IntoQueryParam, QueryMode, QueryState, |
| TyCtxtAt, TyCtxtEnsureDone, TyCtxtEnsureOk, |
| }; |
| pub use self::stack::{QueryStackDeferred, QueryStackFrame, QueryStackFrameExtra}; |
| use crate::dep_graph::{DepNodeIndex, HasDepContext, SerializedDepNodeIndex}; |
| pub use crate::queries::Providers; |
| use crate::ty::TyCtxt; |
| |
| pub(crate) mod arena_cached; |
| mod caches; |
| pub mod erase; |
| pub(crate) mod inner; |
| mod job; |
| mod keys; |
| pub mod on_disk_cache; |
| #[macro_use] |
| pub mod plumbing; |
| pub(crate) mod modifiers; |
| mod stack; |
| |
| pub fn describe_as_module(def_id: impl Into<LocalDefId>, tcx: TyCtxt<'_>) -> String { |
| let def_id = def_id.into(); |
| if def_id.is_top_level_module() { |
| "top-level module".to_string() |
| } else { |
| format!("module `{}`", tcx.def_path_str(def_id)) |
| } |
| } |
| |
| pub trait QueryContext<'tcx>: HasDepContext { |
| /// Gets a jobserver reference which is used to release then acquire |
| /// a token while waiting on a query. |
| fn jobserver_proxy(&self) -> &Proxy; |
| |
| /// Load a side effect associated to the node in the previous session. |
| fn load_side_effect( |
| self, |
| prev_dep_node_index: SerializedDepNodeIndex, |
| ) -> Option<QuerySideEffect>; |
| |
| /// Register a side effect for the given node, for use in next session. |
| fn store_side_effect(self, dep_node_index: DepNodeIndex, side_effect: QuerySideEffect); |
| } |