From 9596c25b779bfcacd1a919905e809d33535187e8 Mon Sep 17 00:00:00 2001 From: Niko Matsakis Date: Mon, 6 Jul 2020 21:06:36 +0000 Subject: [PATCH] move the shims into private, hidden functions --- components/salsa-macros/src/query_group.rs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/components/salsa-macros/src/query_group.rs b/components/salsa-macros/src/query_group.rs index ad00b2a..6ff490b 100644 --- a/components/salsa-macros/src/query_group.rs +++ b/components/salsa-macros/src/query_group.rs @@ -180,7 +180,6 @@ pub(crate) fn query_group(args: TokenStream, input: TokenStream) -> TokenStream let mut query_fn_declarations = proc_macro2::TokenStream::new(); let mut query_fn_definitions = proc_macro2::TokenStream::new(); - let mut query_fn_shims = proc_macro2::TokenStream::new(); let mut storage_fields = proc_macro2::TokenStream::new(); let mut queries_with_storage = vec![]; for query in &queries { @@ -212,18 +211,19 @@ pub(crate) fn query_group(args: TokenStream, input: TokenStream) -> TokenStream queries_with_storage.push(fn_name); - let shim = format_ident!("{}_shim", fn_name); query_fn_definitions.extend(quote! { fn #fn_name(&self, #(#key_names: #keys),*) -> #value { - #shim(self, #(#key_names),*) + // Create a shim to force the code to be monomorphized in the + // query crate. Our experiments revealed that this makes a big + // difference in total compilation time in rust-analyzer, though + // it's not totally obvious why that should be. + fn __shim(db: &dyn #trait_name, #(#key_names: #keys),*) -> #value { + salsa::plumbing::get_query_table::<#qt>(db).get((#(#key_names),*)) + } + __shim(self, #(#key_names),*) } }); - query_fn_shims.extend(quote! { - fn #shim(db: &dyn #trait_name, #(#key_names: #keys),*) -> #value { - salsa::plumbing::get_query_table::<#qt>(db).get((#(#key_names),*)) - } - }); // For input queries, we need `set_foo` etc if let QueryStorage::Input = query.storage { @@ -298,8 +298,6 @@ pub(crate) fn query_group(args: TokenStream, input: TokenStream) -> TokenStream { #query_fn_declarations } - - #query_fn_shims } };