From 05886e28a4c3fbb7bc22d56bf5a52ba7cfa491d9 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Mon, 29 Aug 2022 17:45:18 -0500 Subject: [PATCH] Further simplify the macros generated by `rustc_queries` - 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`. --- compiler/rustc_macros/src/query.rs | 22 +++++++---------- .../rustc_middle/src/dep_graph/dep_node.rs | 24 ++++++------------- .../rustc_query_impl/src/profiling_support.rs | 4 ++-- 3 files changed, 18 insertions(+), 32 deletions(-) diff --git a/compiler/rustc_macros/src/query.rs b/compiler/rustc_macros/src/query.rs index f93fe2d5195..2a1bb10fdfc 100644 --- a/compiler/rustc_macros/src/query.rs +++ b/compiler/rustc_macros/src/query.rs @@ -328,7 +328,7 @@ 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 all_names = quote! {}; let mut cached_queries = quote! {}; for query in queries.0 { @@ -344,6 +344,7 @@ pub fn rustc_queries(input: TokenStream) -> TokenStream { #name, }); } + all_names.extend(quote! { #name, }); let mut attributes = Vec::new(); @@ -400,35 +401,30 @@ pub fn rustc_queries(input: TokenStream) -> TokenStream { [#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!) => { $macro! { #query_stream } } } - macro_rules! rustc_dep_node_append { - ($macro:ident! [$($other:tt)*]) => { + #[macro_export] + macro_rules! rustc_query_names { + ($macro:ident! $( [$($other:tt)*] )?) => { $macro!( - $($other)* - - #dep_node_def_stream + $( $($other)* )? + #all_names ); } } #[macro_export] macro_rules! rustc_cached_queries { - ( $macro:ident! ) => { + ($macro:ident!) => { $macro!(#cached_queries); } } diff --git a/compiler/rustc_middle/src/dep_graph/dep_node.rs b/compiler/rustc_middle/src/dep_graph/dep_node.rs index 7718906ac4e..f54d75c24e2 100644 --- a/compiler/rustc_middle/src/dep_graph/dep_node.rs +++ b/compiler/rustc_middle/src/dep_graph/dep_node.rs @@ -144,10 +144,7 @@ impl DepKind { macro_rules! define_dep_nodes { ( - $( - [$($attrs:tt)*] - $variant:ident $(( $tuple_arg_ty:ty $(,)? ))* - ,)* + $( $variant:ident, )* ) => ( #[macro_export] macro_rules! make_dep_kind_array { @@ -179,21 +176,14 @@ macro_rules! define_dep_nodes { ); } -rustc_dep_node_append!(define_dep_nodes![ +rustc_query_names!(define_dep_nodes![ // We use this for most things when incr. comp. is turned off. - [] Null, - + 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), + Red, + TraitSelect, + CompileCodegenUnit, + CompileMonoItem, ]); // WARNING: `construct` is generic and does not know that `CompileCodegenUnit` takes `Symbol`s as keys. diff --git a/compiler/rustc_query_impl/src/profiling_support.rs b/compiler/rustc_query_impl/src/profiling_support.rs index 260af0d5408..a8e0210e8d6 100644 --- a/compiler/rustc_query_impl/src/profiling_support.rs +++ b/compiler/rustc_query_impl/src/profiling_support.rs @@ -307,7 +307,7 @@ pub fn alloc_self_profile_query_strings(tcx: TyCtxt<'_>) { macro_rules! alloc_once { ( - $($(#[$attr:meta])* [$($modifiers:tt)*] fn $name:ident($K:ty) -> $V:ty,)* + $($name:ident,)* ) => { $({ alloc_self_profile_query_strings_for_query_cache( @@ -320,5 +320,5 @@ pub fn alloc_self_profile_query_strings(tcx: TyCtxt<'_>) { } } - rustc_query_append! { alloc_once! } + rustc_query_names! { alloc_once! } }