#![allow(internal_features)]
#[macro_use]
use crate::rustc_data_structures::sync::{AtomicU64, Lock};
use crate::rustc_middle::arena::Arena;
use crate::rustc_middle::queries::{ExternProviders, Providers};
use crate::rustc_middle::query::QuerySystem;
use crate::rustc_middle::query::on_disk_cache::OnDiskCache;
pub use crate::rustc_query_impl::job::{
CollectActiveJobsKind, QueryJobMap, break_query_cycle, collect_active_query_jobs,
print_query_stack,
};
mod dep_kind_vtables;
mod diagnostics;
mod execution;
mod handle_cycle_error;
mod incremental;
mod job;
mod query_vtables;
pub fn query_system<'tcx>(
arena: &'tcx Arena<'tcx>,
local_providers: Providers,
extern_providers: ExternProviders,
on_disk_cache: Option<OnDiskCache>,
incremental: bool,
) -> QuerySystem<'tcx> {
QuerySystem {
arenas: Default::default(),
dep_kind_vtables: dep_kind_vtables::make_dep_kind_vtables(arena),
query_vtables: query_vtables::make_query_vtables(incremental),
side_effects: Default::default(),
used_features: Default::default(),
on_disk_cache,
local_providers,
extern_providers,
jobs: AtomicU64::new(1),
cycle_handler_nesting: Lock::new(0),
}
}
pub fn provide(providers: &mut crate::rustc_middle::util::Providers) {
providers.hooks.verify_query_key_hashes = incremental::verify_query_key_hashes;
providers.hooks.encode_query_values = incremental::encode_query_values;
}