mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-27 18:57:42 +03:00
Avoid some trivial wrapper closures in DepKindVTable
This commit is contained in:
@@ -129,12 +129,8 @@ pub(crate) fn make_dep_kind_vtable_for_query<'tcx, Q>(
|
||||
is_anon,
|
||||
is_eval_always,
|
||||
key_fingerprint_style,
|
||||
force_from_dep_node_fn: Some(|tcx, dep_node, _| {
|
||||
force_from_dep_node_inner(Q::query_vtable(tcx), tcx, dep_node)
|
||||
}),
|
||||
promote_from_disk_fn: Some(|tcx, dep_node| {
|
||||
promote_from_disk_inner(Q::query_vtable(tcx), tcx, dep_node)
|
||||
}),
|
||||
force_from_dep_node_fn: Some(force_from_dep_node_inner::<Q>),
|
||||
promote_from_disk_fn: Some(promote_from_disk_inner::<Q>),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,10 +29,10 @@
|
||||
use rustc_serialize::{Decodable, Encodable};
|
||||
use rustc_span::def_id::LOCAL_CRATE;
|
||||
|
||||
use crate::collect_active_jobs_from_all_queries;
|
||||
use crate::error::{QueryOverflow, QueryOverflowNote};
|
||||
use crate::execution::{all_inactive, force_query};
|
||||
use crate::job::find_dep_kind_root;
|
||||
use crate::{GetQueryVTable, collect_active_jobs_from_all_queries};
|
||||
|
||||
fn depth_limit_error<'tcx>(tcx: TyCtxt<'tcx>, job: QueryJobId) {
|
||||
let job_map =
|
||||
@@ -333,14 +333,14 @@ pub(crate) fn query_key_hash_verify<'tcx, C: QueryCache>(
|
||||
}
|
||||
|
||||
/// Implementation of [`DepKindVTable::promote_from_disk_fn`] for queries.
|
||||
pub(crate) fn promote_from_disk_inner<'tcx, C: QueryCache>(
|
||||
query: &'tcx QueryVTable<'tcx, C>,
|
||||
pub(crate) fn promote_from_disk_inner<'tcx, Q: GetQueryVTable<'tcx>>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
dep_node: DepNode,
|
||||
) {
|
||||
let query = Q::query_vtable(tcx);
|
||||
debug_assert!(tcx.dep_graph.is_green(&dep_node));
|
||||
|
||||
let key = C::Key::try_recover_key(tcx, &dep_node).unwrap_or_else(|| {
|
||||
let key = <Q::Cache as QueryCache>::Key::try_recover_key(tcx, &dep_node).unwrap_or_else(|| {
|
||||
panic!(
|
||||
"Failed to recover key for {dep_node:?} with key fingerprint {}",
|
||||
dep_node.key_fingerprint
|
||||
@@ -386,11 +386,14 @@ pub(crate) fn try_load_from_disk<'tcx, V>(
|
||||
}
|
||||
|
||||
/// Implementation of [`DepKindVTable::force_from_dep_node_fn`] for queries.
|
||||
pub(crate) fn force_from_dep_node_inner<'tcx, C: QueryCache>(
|
||||
query: &'tcx QueryVTable<'tcx, C>,
|
||||
pub(crate) fn force_from_dep_node_inner<'tcx, Q: GetQueryVTable<'tcx>>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
dep_node: DepNode,
|
||||
// Needed by the vtable function signature, but not used when forcing queries.
|
||||
_prev_index: SerializedDepNodeIndex,
|
||||
) -> bool {
|
||||
let query = Q::query_vtable(tcx);
|
||||
|
||||
// We must avoid ever having to call `force_from_dep_node()` for a
|
||||
// `DepNode::codegen_unit`:
|
||||
// Since we cannot reconstruct the query key of a `DepNode::codegen_unit`, we
|
||||
@@ -409,7 +412,7 @@ pub(crate) fn force_from_dep_node_inner<'tcx, C: QueryCache>(
|
||||
"calling force_from_dep_node() on dep_kinds::codegen_unit"
|
||||
);
|
||||
|
||||
if let Some(key) = C::Key::try_recover_key(tcx, &dep_node) {
|
||||
if let Some(key) = <Q::Cache as QueryCache>::Key::try_recover_key(tcx, &dep_node) {
|
||||
force_query(query, tcx, key, dep_node);
|
||||
true
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user