Auto merge of #101173 - jyn514:simplify-macro-arguments, r=cjgillot
Further simplify the macros generated by `rustc_queries` This doesn't actually move anything outside the macros, but it makes them simpler to read. - Add a new `rustc_query_names` macro. This allows a much simpler syntax for the matchers in the macros passed to it as a callback. - Convert `define_dep_nodes` and `alloc_once` to use `rustc_query_names`. This is possible because they only use the names (despite the quite complicated matchers in `define_dep_nodes`, none of the other arguments are used). - Get rid of `rustc_dep_node_append`. r? `@cjgillot`
This commit is contained in:
commit
294f0eef73
@ -289,7 +289,6 @@ pub fn rustc_queries(input: TokenStream) -> TokenStream {
|
||||
|
||||
let mut query_stream = quote! {};
|
||||
let mut query_description_stream = quote! {};
|
||||
let mut dep_node_def_stream = quote! {};
|
||||
let mut cached_queries = quote! {};
|
||||
|
||||
for query in queries.0 {
|
||||
@ -328,6 +327,10 @@ macro_rules! passthrough {
|
||||
remap_env_constness,
|
||||
);
|
||||
|
||||
if modifiers.cache.is_some() {
|
||||
attributes.push(quote! { (cache) });
|
||||
}
|
||||
// Pass on the cache modifier
|
||||
if modifiers.cache.is_some() {
|
||||
attributes.push(quote! { (cache) });
|
||||
}
|
||||
@ -340,45 +343,27 @@ macro_rules! passthrough {
|
||||
// be very useful.
|
||||
let span = name.span();
|
||||
let attribute_stream = quote_spanned! {span=> #(#attributes),*};
|
||||
let doc_comments = query.doc_comments.iter();
|
||||
let doc_comments = &query.doc_comments;
|
||||
// Add the query to the group
|
||||
query_stream.extend(quote! {
|
||||
#(#doc_comments)*
|
||||
[#attribute_stream] fn #name(#arg) #result,
|
||||
});
|
||||
|
||||
// Create a dep node for the query
|
||||
dep_node_def_stream.extend(quote! {
|
||||
[#attribute_stream] #name(#arg),
|
||||
});
|
||||
|
||||
add_query_description_impl(&query, &mut query_description_stream);
|
||||
}
|
||||
|
||||
TokenStream::from(quote! {
|
||||
#[macro_export]
|
||||
macro_rules! rustc_query_append {
|
||||
($macro:ident !) => {
|
||||
($macro:ident! $( [$($other:tt)*] )?) => {
|
||||
$macro! {
|
||||
$( $($other)* )?
|
||||
#query_stream
|
||||
}
|
||||
}
|
||||
}
|
||||
macro_rules! rustc_dep_node_append {
|
||||
($macro:ident! [$($other:tt)*]) => {
|
||||
$macro!(
|
||||
$($other)*
|
||||
|
||||
#dep_node_def_stream
|
||||
);
|
||||
}
|
||||
}
|
||||
#[macro_export]
|
||||
macro_rules! rustc_cached_queries {
|
||||
( $macro:ident! ) => {
|
||||
$macro!(#cached_queries);
|
||||
}
|
||||
}
|
||||
#[macro_export]
|
||||
macro_rules! rustc_query_description {
|
||||
#query_description_stream
|
||||
|
@ -144,11 +144,9 @@ pub fn fingerprint_style(self, tcx: TyCtxt<'_>) -> FingerprintStyle {
|
||||
|
||||
macro_rules! define_dep_nodes {
|
||||
(
|
||||
$(
|
||||
[$($attrs:tt)*]
|
||||
$variant:ident $(( $tuple_arg_ty:ty $(,)? ))*
|
||||
,)*
|
||||
) => (
|
||||
$($(#[$attr:meta])*
|
||||
[$($modifiers:tt)*] fn $variant:ident($($K:tt)*) -> $V:ty,)*) => {
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! make_dep_kind_array {
|
||||
($mod:ident) => {[ $($mod::$variant()),* ]};
|
||||
@ -158,7 +156,7 @@ macro_rules! make_dep_kind_array {
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Encodable, Decodable)]
|
||||
#[allow(non_camel_case_types)]
|
||||
pub enum DepKind {
|
||||
$($variant),*
|
||||
$( $( #[$attr] )* $variant),*
|
||||
}
|
||||
|
||||
fn dep_kind_from_label_string(label: &str) -> Result<DepKind, ()> {
|
||||
@ -176,24 +174,17 @@ pub mod label_strs {
|
||||
pub const $variant: &str = stringify!($variant);
|
||||
)*
|
||||
}
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
rustc_dep_node_append!(define_dep_nodes![
|
||||
// We use this for most things when incr. comp. is turned off.
|
||||
[] Null,
|
||||
|
||||
// We use this to create a forever-red node.
|
||||
[] Red,
|
||||
|
||||
[anon] TraitSelect,
|
||||
|
||||
// WARNING: if `Symbol` is changed, make sure you update `make_compile_codegen_unit` below.
|
||||
[] CompileCodegenUnit(Symbol),
|
||||
|
||||
// WARNING: if `MonoItem` is changed, make sure you update `make_compile_mono_item` below.
|
||||
// Only used by rustc_codegen_cranelift
|
||||
[] CompileMonoItem(MonoItem),
|
||||
rustc_query_append!(define_dep_nodes![
|
||||
/// We use this for most things when incr. comp. is turned off.
|
||||
[] fn Null() -> (),
|
||||
/// We use this to create a forever-red node.
|
||||
[] fn Red() -> (),
|
||||
[] fn TraitSelect() -> (),
|
||||
[] fn CompileCodegenUnit() -> (),
|
||||
[] fn CompileMonoItem() -> (),
|
||||
]);
|
||||
|
||||
// WARNING: `construct` is generic and does not know that `CompileCodegenUnit` takes `Symbol`s as keys.
|
||||
|
@ -151,19 +151,31 @@ pub(super) fn encode_query_results(
|
||||
encoder: &mut on_disk_cache::CacheEncoder<'_, 'tcx>,
|
||||
query_result_index: &mut on_disk_cache::EncodedDepNodeIndex,
|
||||
) {
|
||||
macro_rules! expand_if_cached {
|
||||
([] $encode:expr) => {};
|
||||
([(cache) $($rest:tt)*] $encode:expr) => {
|
||||
$encode
|
||||
};
|
||||
([$other:tt $($modifiers:tt)*] $encode:expr) => {
|
||||
expand_if_cached!([$($modifiers)*] $encode)
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! encode_queries {
|
||||
($($query:ident,)*) => {
|
||||
(
|
||||
$($(#[$attr:meta])*
|
||||
[$($modifiers:tt)*] fn $query:ident($($K:tt)*) -> $V:ty,)*) => {
|
||||
$(
|
||||
on_disk_cache::encode_query_results::<_, super::queries::$query<'_>>(
|
||||
expand_if_cached!([$($modifiers)*] on_disk_cache::encode_query_results::<_, super::queries::$query<'_>>(
|
||||
self,
|
||||
encoder,
|
||||
query_result_index
|
||||
);
|
||||
));
|
||||
)*
|
||||
}
|
||||
}
|
||||
|
||||
rustc_cached_queries!(encode_queries!);
|
||||
rustc_query_append!(encode_queries!);
|
||||
}
|
||||
|
||||
pub fn try_print_query_stack(
|
||||
|
@ -307,16 +307,16 @@ pub fn alloc_self_profile_query_strings(tcx: TyCtxt<'_>) {
|
||||
|
||||
macro_rules! alloc_once {
|
||||
(
|
||||
$($(#[$attr:meta])* [$($modifiers:tt)*] fn $name:ident($K:ty) -> $V:ty,)*
|
||||
) => {
|
||||
$({
|
||||
$($(#[$attr:meta])*
|
||||
[$($modifiers:tt)*] fn $name:ident($($K:tt)*) -> $V:ty,)*) => {
|
||||
$(
|
||||
alloc_self_profile_query_strings_for_query_cache(
|
||||
tcx,
|
||||
stringify!($name),
|
||||
&tcx.query_caches.$name,
|
||||
&mut string_cache,
|
||||
);
|
||||
})*
|
||||
)+
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user