about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoshua Nelson <jnelson@cloudflare.com>2022-08-29 17:45:18 -0500
committerJoshua Nelson <jnelson@cloudflare.com>2022-09-06 21:43:15 -0500
commit05886e28a4c3fbb7bc22d56bf5a52ba7cfa491d9 (patch)
treeb75824da9685ce91f557a81b3204dbba8c5863ed
parent699bfa882b34a73b333e684e96984c1c565d2eff (diff)
downloadrust-05886e28a4c3fbb7bc22d56bf5a52ba7cfa491d9.tar.gz
rust-05886e28a4c3fbb7bc22d56bf5a52ba7cfa491d9.zip
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`.
-rw-r--r--compiler/rustc_macros/src/query.rs22
-rw-r--r--compiler/rustc_middle/src/dep_graph/dep_node.rs24
-rw-r--r--compiler/rustc_query_impl/src/profiling_support.rs4
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! }
 }