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`.
This commit is contained in:
Joshua Nelson 2022-08-29 17:45:18 -05:00
parent 699bfa882b
commit 05886e28a4
3 changed files with 18 additions and 32 deletions

View file

@ -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);
}
}