1
Fork 0

Merge some query impl modules into one

This commit is contained in:
John Kåre Alsaker 2023-05-19 01:38:27 +02:00
parent d3f416dc06
commit 9e755d98cc

View file

@ -506,14 +506,16 @@ macro_rules! define_queries {
( (
$($(#[$attr:meta])* $($(#[$attr:meta])*
[$($modifiers:tt)*] fn $name:ident($($K:tt)*) -> $V:ty,)*) => { [$($modifiers:tt)*] fn $name:ident($($K:tt)*) -> $V:ty,)*) => {
mod get_query_incr {
pub(crate) mod query_impl { $(pub mod $name {
use super::super::*;
use std::marker::PhantomData;
pub mod get_query_incr {
use super::*; use super::*;
$(
// Adding `__rust_end_short_backtrace` marker to backtraces so that we emit the frames // Adding `__rust_end_short_backtrace` marker to backtraces so that we emit the frames
// when `RUST_BACKTRACE=1`, add a new mod with `$name` here is to allow duplicate naming // when `RUST_BACKTRACE=1`, add a new mod with `$name` here is to allow duplicate naming
pub mod $name {
use super::*;
#[inline(never)] #[inline(never)]
pub fn __rust_end_short_backtrace<'tcx>( pub fn __rust_end_short_backtrace<'tcx>(
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
@ -522,7 +524,7 @@ macro_rules! define_queries {
mode: QueryMode, mode: QueryMode,
) -> Option<Erase<queries::$name::Value<'tcx>>> { ) -> Option<Erase<queries::$name::Value<'tcx>>> {
get_query_incr( get_query_incr(
query_config::$name::config(tcx), QueryType::config(tcx),
QueryCtxt::new(tcx), QueryCtxt::new(tcx),
span, span,
key, key,
@ -530,15 +532,10 @@ macro_rules! define_queries {
) )
} }
} }
)*
}
mod get_query_non_incr { pub mod get_query_non_incr {
use super::*; use super::*;
$(
pub mod $name {
use super::*;
#[inline(never)] #[inline(never)]
pub fn __rust_end_short_backtrace<'tcx>( pub fn __rust_end_short_backtrace<'tcx>(
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
@ -547,46 +544,15 @@ macro_rules! define_queries {
__mode: QueryMode, __mode: QueryMode,
) -> Option<Erase<queries::$name::Value<'tcx>>> { ) -> Option<Erase<queries::$name::Value<'tcx>>> {
Some(get_query_non_incr( Some(get_query_non_incr(
query_config::$name::config(tcx), QueryType::config(tcx),
QueryCtxt::new(tcx), QueryCtxt::new(tcx),
span, span,
key, key,
)) ))
} }
} }
)*
}
pub(crate) fn engine(incremental: bool) -> QueryEngine { pub fn dynamic_query<'tcx>() -> DynamicQuery<'tcx, queries::$name::Storage<'tcx>> {
if incremental {
QueryEngine {
$($name: get_query_incr::$name::__rust_end_short_backtrace,)*
}
} else {
QueryEngine {
$($name: get_query_non_incr::$name::__rust_end_short_backtrace,)*
}
}
}
#[allow(nonstandard_style)]
mod query_config {
use std::marker::PhantomData;
$(
#[derive(Copy, Clone, Default)]
pub struct $name<'tcx> {
data: PhantomData<&'tcx ()>
}
)*
}
#[allow(nonstandard_style)]
mod dynamic_query {
use super::*;
$(
pub(super) fn $name<'tcx>() -> DynamicQuery<'tcx, queries::$name::Storage<'tcx>> {
DynamicQuery { DynamicQuery {
name: stringify!($name), name: stringify!($name),
eval_always: is_eval_always!([$($modifiers)*]), eval_always: is_eval_always!([$($modifiers)*]),
@ -639,10 +605,13 @@ macro_rules! define_queries {
format_value: |value| format!("{:?}", restore::<queries::$name::Value<'tcx>>(*value)), format_value: |value| format!("{:?}", restore::<queries::$name::Value<'tcx>>(*value)),
} }
} }
)*
#[derive(Copy, Clone, Default)]
pub struct QueryType<'tcx> {
data: PhantomData<&'tcx ()>
} }
$(impl<'tcx> QueryConfigRestored<'tcx> for query_config::$name<'tcx> { impl<'tcx> QueryConfigRestored<'tcx> for QueryType<'tcx> {
type RestoredValue = queries::$name::Value<'tcx>; type RestoredValue = queries::$name::Value<'tcx>;
type Config = DynamicConfig< type Config = DynamicConfig<
'tcx, 'tcx,
@ -663,12 +632,25 @@ macro_rules! define_queries {
fn restore(value: <Self::Config as QueryConfig<QueryCtxt<'tcx>>>::Value) -> Self::RestoredValue { fn restore(value: <Self::Config as QueryConfig<QueryCtxt<'tcx>>>::Value) -> Self::RestoredValue {
restore::<queries::$name::Value<'tcx>>(value) restore::<queries::$name::Value<'tcx>>(value)
} }
})* }
})*}
pub(crate) fn engine(incremental: bool) -> QueryEngine {
if incremental {
QueryEngine {
$($name: query_impl::$name::get_query_incr::__rust_end_short_backtrace,)*
}
} else {
QueryEngine {
$($name: query_impl::$name::get_query_non_incr::__rust_end_short_backtrace,)*
}
}
}
pub fn dynamic_queries<'tcx>() -> DynamicQueries<'tcx> { pub fn dynamic_queries<'tcx>() -> DynamicQueries<'tcx> {
DynamicQueries { DynamicQueries {
$( $(
$name: dynamic_query::$name(), $name: query_impl::$name::dynamic_query(),
)* )*
} }
} }
@ -731,7 +713,7 @@ macro_rules! define_queries {
} }
$(pub(crate) fn $name<'tcx>()-> DepKindStruct<'tcx> { $(pub(crate) fn $name<'tcx>()-> DepKindStruct<'tcx> {
$crate::plumbing::query_callback::<query_config::$name<'tcx>>( $crate::plumbing::query_callback::<query_impl::$name::QueryType<'tcx>>(
is_anon!([$($modifiers)*]), is_anon!([$($modifiers)*]),
is_eval_always!([$($modifiers)*]), is_eval_always!([$($modifiers)*]),
) )
@ -786,8 +768,8 @@ macro_rules! define_queries {
) )
}, },
encode_query_results: expand_if_cached!([$($modifiers)*], |tcx, encoder, query_result_index| encode_query_results: expand_if_cached!([$($modifiers)*], |tcx, encoder, query_result_index|
$crate::plumbing::encode_query_results::<super::query_config::$name<'tcx>>( $crate::plumbing::encode_query_results::<query_impl::$name::QueryType<'tcx>>(
super::query_config::$name::config(tcx), query_impl::$name::QueryType::config(tcx),
QueryCtxt::new(tcx), QueryCtxt::new(tcx),
encoder, encoder,
query_result_index, query_result_index,