Skip to content

Commit 060f15c

Browse files
committed
Merge {get,ensure,force}_query into call_query.
1 parent 17ee89c commit 060f15c

File tree

3 files changed

+67
-22
lines changed

3 files changed

+67
-22
lines changed

compiler/rustc_macros/src/query.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -500,11 +500,11 @@ pub fn rustc_queries(input: TokenStream) -> TokenStream {
500500
::rustc_middle::dep_graph::DepKind::#name => {
501501
if <#arg as DepNodeParams<TyCtxt<'_>>>::can_reconstruct_query_key() {
502502
if let Some(key) = <#arg as DepNodeParams<TyCtxt<'_>>>::recover($tcx, $dep_node) {
503-
force_query::<crate::ty::query::queries::#name<'_>, _>(
503+
crate::ty::query::queries::#name::query(
504504
$tcx,
505-
key,
506505
DUMMY_SP,
507-
*$dep_node
506+
key,
507+
QueryCaller::Force(*$dep_node),
508508
);
509509
return true;
510510
}

compiler/rustc_middle/src/ty/query/plumbing.rs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,19 @@ macro_rules! define_queries_inner {
394394
) -> Self::Value {
395395
handle_cycle_error!([$($modifiers)*][tcx, error])
396396
}
397+
}
398+
399+
impl queries::$name<$tcx> {
400+
$(#[$attr])*
401+
#[inline(always)]
402+
pub fn query(
403+
tcx: TyCtxt<$tcx>,
404+
span: Span,
405+
key: query_keys::$name<$tcx>,
406+
caller: QueryCaller<DepKind>,
407+
) -> Option<<queries::$name<$tcx> as QueryConfig<TyCtxt<$tcx>>>::Stored> {
408+
call_query::<queries::$name<'_>, _>(tcx, span, key, caller)
409+
}
397410
})*
398411

399412
#[derive(Copy, Clone)]
@@ -405,7 +418,12 @@ macro_rules! define_queries_inner {
405418
$($(#[$attr])*
406419
#[inline(always)]
407420
pub fn $name(self, key: query_helper_param_ty!($($K)*)) {
408-
ensure_query::<queries::$name<'_>, _>(self.tcx, key.into_query_param())
421+
queries::$name::query(
422+
self.tcx,
423+
DUMMY_SP,
424+
key.into_query_param(),
425+
QueryCaller::Ensure,
426+
);
409427
})*
410428
}
411429

@@ -488,7 +506,13 @@ macro_rules! define_queries_inner {
488506
pub fn $name(self, key: query_helper_param_ty!($($K)*))
489507
-> <queries::$name<$tcx> as QueryConfig<TyCtxt<$tcx>>>::Stored
490508
{
491-
get_query::<queries::$name<'_>, _>(self.tcx, self.span, key.into_query_param())
509+
let ret = queries::$name::query(
510+
self.tcx,
511+
self.span,
512+
key.into_query_param(),
513+
QueryCaller::Get,
514+
);
515+
ret.unwrap()
492516
})*
493517
}
494518

compiler/rustc_query_system/src/query/plumbing.rs

Lines changed: 38 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -718,34 +718,55 @@ fn force_query_impl<CTX, C>(
718718
);
719719
}
720720

721-
#[inline(always)]
722-
pub fn get_query<Q, CTX>(tcx: CTX, span: Span, key: Q::Key) -> Q::Stored
723-
where
724-
Q: QueryDescription<CTX>,
725-
Q::Key: crate::dep_graph::DepNodeParams<CTX>,
726-
CTX: QueryContext,
727-
{
728-
debug!("ty::query::get_query<{}>(key={:?}, span={:?})", Q::NAME, key, span);
729-
730-
get_query_impl(tcx, Q::query_state(tcx), span, key, &Q::VTABLE)
721+
pub enum QueryCaller<DK> {
722+
Ensure,
723+
Get,
724+
Force(DepNode<DK>),
731725
}
732726

733-
#[inline(always)]
734-
pub fn ensure_query<Q, CTX>(tcx: CTX, key: Q::Key)
727+
#[inline(never)]
728+
fn call_query_impl<CTX, C>(
729+
tcx: CTX,
730+
state: &QueryState<CTX, C>,
731+
span: Span,
732+
key: C::Key,
733+
caller: QueryCaller<CTX::DepKind>,
734+
query: &QueryVtable<CTX, C::Key, C::Value>,
735+
) -> Option<C::Stored>
735736
where
736-
Q: QueryDescription<CTX>,
737-
Q::Key: crate::dep_graph::DepNodeParams<CTX>,
737+
C: QueryCache,
738+
C::Key: Eq + Clone + crate::dep_graph::DepNodeParams<CTX>,
739+
C::Stored: Clone,
738740
CTX: QueryContext,
739741
{
740-
ensure_query_impl(tcx, Q::query_state(tcx), key, &Q::VTABLE)
742+
match caller {
743+
QueryCaller::Ensure => {
744+
ensure_query_impl(tcx, state, key, query);
745+
None
746+
}
747+
QueryCaller::Get => {
748+
let ret = get_query_impl(tcx, state, span, key, query);
749+
Some(ret)
750+
}
751+
QueryCaller::Force(dep_node) => {
752+
force_query_impl(tcx, state, key, span, dep_node, query);
753+
None
754+
}
755+
}
741756
}
742757

743758
#[inline(always)]
744-
pub fn force_query<Q, CTX>(tcx: CTX, key: Q::Key, span: Span, dep_node: DepNode<CTX::DepKind>)
759+
pub fn call_query<Q, CTX>(
760+
tcx: CTX,
761+
span: Span,
762+
key: Q::Key,
763+
caller: QueryCaller<CTX::DepKind>,
764+
) -> Option<Q::Stored>
745765
where
746766
Q: QueryDescription<CTX>,
747767
Q::Key: crate::dep_graph::DepNodeParams<CTX>,
748768
CTX: QueryContext,
749769
{
750-
force_query_impl(tcx, Q::query_state(tcx), key, span, dep_node, &Q::VTABLE)
770+
debug!("ty::query::get_query<{}>(key={:?}, span={:?})", Q::NAME, key, span);
771+
call_query_impl(tcx, Q::query_state(tcx), span, key, caller, &Q::VTABLE)
751772
}

0 commit comments

Comments
 (0)