Unnamed repository; edit this file 'description' to name the repository.
| -rw-r--r-- | crates/query-group-macro/src/lib.rs | 68 | ||||
| -rw-r--r-- | crates/query-group-macro/src/queries.rs | 72 | ||||
| -rw-r--r-- | crates/query-group-macro/tests/interned.rs | 50 |
3 files changed, 4 insertions, 186 deletions
diff --git a/crates/query-group-macro/src/lib.rs b/crates/query-group-macro/src/lib.rs index 277cc0b269..6e89e0875e 100644 --- a/crates/query-group-macro/src/lib.rs +++ b/crates/query-group-macro/src/lib.rs @@ -6,18 +6,15 @@ use std::vec; use proc_macro::TokenStream; use proc_macro2::Span; use queries::{ - GeneratedInputStruct, InputQuery, InputSetter, InputSetterWithDurability, Intern, Lookup, - Queries, SetterKind, TrackedQuery, Transparent, + GeneratedInputStruct, InputQuery, InputSetter, InputSetterWithDurability, Queries, SetterKind, + TrackedQuery, Transparent, }; use quote::{ToTokens, format_ident, quote}; use syn::parse::{Parse, ParseStream}; use syn::punctuated::Punctuated; use syn::spanned::Spanned; use syn::visit_mut::VisitMut; -use syn::{ - Attribute, FnArg, ItemTrait, Path, Token, TraitItem, TraitItemFn, parse_quote, - parse_quote_spanned, -}; +use syn::{Attribute, FnArg, ItemTrait, Path, Token, TraitItem, parse_quote, parse_quote_spanned}; mod queries; @@ -106,7 +103,6 @@ enum QueryKind { Tracked, TrackedWithSalsaStruct, Transparent, - Interned, } #[derive(Default, Debug, Clone)] @@ -190,7 +186,6 @@ pub(crate) fn query_group_impl( let mut trait_methods = vec![]; let mut setter_trait_methods = vec![]; let mut lookup_signatures = vec![]; - let mut lookup_methods = vec![]; for item in &mut item_trait.items { if let syn::TraitItem::Fn(method) = item { @@ -202,7 +197,6 @@ pub(crate) fn query_group_impl( let mut query_kind = QueryKind::TrackedWithSalsaStruct; let mut invoke = None; let mut cycle = None; - let mut interned_struct_path = None; let mut lru = None; let params: Vec<FnArg> = signature.inputs.clone().into_iter().collect(); @@ -230,22 +224,6 @@ pub(crate) fn query_group_impl( } query_kind = QueryKind::Input; } - "interned" => { - let syn::ReturnType::Type(_, ty) = &signature.output else { - return Err(syn::Error::new( - span, - "interned queries must have return type", - )); - }; - let syn::Type::Path(path) = &**ty else { - return Err(syn::Error::new( - span, - "interned queries must have return type", - )); - }; - interned_struct_path = Some(path.path.clone()); - query_kind = QueryKind::Interned; - } "invoke_interned" => { let path = syn::parse::<Parenthesized<Path>>(tts)?; invoke = Some(path.0.clone()); @@ -317,28 +295,6 @@ pub(crate) fn query_group_impl( }; setter_trait_methods.push(SetterKind::WithDurability(setter)); } - (QueryKind::Interned, None) => { - let interned_struct_path = interned_struct_path.unwrap(); - let method = Intern { - signature: signature.clone(), - pat_and_tys: pat_and_tys.clone(), - interned_struct_path: interned_struct_path.clone(), - }; - - trait_methods.push(Queries::Intern(method)); - - let mut method = Lookup { - signature: signature.clone(), - pat_and_tys: pat_and_tys.clone(), - return_ty: *return_ty, - interned_struct_path, - }; - method.prepare_signature(); - - lookup_signatures - .push(TraitItem::Fn(make_trait_method(method.signature.clone()))); - lookup_methods.push(method); - } // tracked function. it might have an invoke, or might not. (QueryKind::Tracked, invoke) => { let method = TrackedQuery { @@ -380,13 +336,6 @@ pub(crate) fn query_group_impl( }; trait_methods.push(Queries::Transparent(method)); } - // error/invalid constructions - (QueryKind::Interned, Some(path)) => { - return Err(syn::Error::new( - path.span(), - "Interned queries cannot be used with an `#[invoke]`".to_string(), - )); - } (QueryKind::Input, Some(path)) => { return Err(syn::Error::new( path.span(), @@ -451,8 +400,6 @@ pub(crate) fn query_group_impl( #(#trait_methods)* #(#setter_methods)* - - #(#lookup_methods)* } }; RemoveAttrsFromTraitMethods.visit_item_trait_mut(&mut item_trait); @@ -485,15 +432,6 @@ where } } -fn make_trait_method(sig: syn::Signature) -> TraitItemFn { - TraitItemFn { - attrs: vec![], - sig: sig.clone(), - semi_token: Some(syn::Token)), - default: None, - } -} - struct RemoveAttrsFromTraitMethods; impl VisitMut for RemoveAttrsFromTraitMethods { diff --git a/crates/query-group-macro/src/queries.rs b/crates/query-group-macro/src/queries.rs index 83ce8902d0..4221068828 100644 --- a/crates/query-group-macro/src/queries.rs +++ b/crates/query-group-macro/src/queries.rs @@ -1,7 +1,7 @@ //! The IR of the `#[query_group]` macro. use quote::{ToTokens, format_ident, quote, quote_spanned}; -use syn::{FnArg, Ident, PatType, Path, Receiver, ReturnType, Type, parse_quote, spanned::Spanned}; +use syn::{FnArg, Ident, PatType, Path, Receiver, ReturnType, parse_quote, spanned::Spanned}; use crate::Cycle; @@ -266,80 +266,11 @@ impl ToTokens for Transparent { method.to_tokens(tokens); } } -pub(crate) struct Intern { - pub(crate) signature: syn::Signature, - pub(crate) pat_and_tys: Vec<PatType>, - pub(crate) interned_struct_path: Path, -} - -impl ToTokens for Intern { - fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { - let sig = &self.signature; - - let ty = self.pat_and_tys.to_vec(); - - let interned_pat = ty.first().expect("at least one pat; this is a bug"); - let interned_pat = &interned_pat.pat; - - let wrapper_struct = self.interned_struct_path.to_token_stream(); - - let method = quote! { - #sig { - #wrapper_struct::new(self, #interned_pat) - } - }; - - method.to_tokens(tokens); - } -} - -pub(crate) struct Lookup { - pub(crate) signature: syn::Signature, - pub(crate) pat_and_tys: Vec<PatType>, - pub(crate) return_ty: Type, - pub(crate) interned_struct_path: Path, -} - -impl Lookup { - pub(crate) fn prepare_signature(&mut self) { - let sig = &self.signature; - - let ident = format_ident!("lookup_{}", sig.ident); - - let ty = self.pat_and_tys.to_vec(); - - let interned_key = &self.return_ty; - - let interned_pat = ty.first().expect("at least one pat; this is a bug"); - let interned_return_ty = &interned_pat.ty; - - self.signature = parse_quote!( - fn #ident(&self, id: #interned_key) -> #interned_return_ty - ); - } -} - -impl ToTokens for Lookup { - fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) { - let sig = &self.signature; - - let wrapper_struct = self.interned_struct_path.to_token_stream(); - let method = quote! { - #sig { - let zalsa = self.zalsa(); - #wrapper_struct::ingredient(zalsa).data(zalsa, id.as_id()).0.clone() - } - }; - - method.to_tokens(tokens); - } -} #[allow(clippy::large_enum_variant)] pub(crate) enum Queries { TrackedQuery(TrackedQuery), InputQuery(InputQuery), - Intern(Intern), Transparent(Transparent), } @@ -349,7 +280,6 @@ impl ToTokens for Queries { Queries::TrackedQuery(tracked_query) => tracked_query.to_tokens(tokens), Queries::InputQuery(input_query) => input_query.to_tokens(tokens), Queries::Transparent(transparent) => transparent.to_tokens(tokens), - Queries::Intern(intern) => intern.to_tokens(tokens), } } } diff --git a/crates/query-group-macro/tests/interned.rs b/crates/query-group-macro/tests/interned.rs deleted file mode 100644 index f738185b1f..0000000000 --- a/crates/query-group-macro/tests/interned.rs +++ /dev/null @@ -1,50 +0,0 @@ -use query_group_macro::query_group; - -use expect_test::expect; -use salsa::plumbing::AsId; - -mod logger_db; -use logger_db::LoggerDb; - -#[salsa_macros::interned(no_lifetime)] -pub struct InternedString { - data: String, -} - -#[query_group] -pub trait InternedDB: salsa::Database { - #[salsa::interned] - fn intern_string(&self, data: String) -> InternedString; - - fn interned_len(&self, id: InternedString) -> usize; -} - -fn interned_len(db: &dyn InternedDB, id: InternedString) -> usize { - db.lookup_intern_string(id).len() -} - -#[test] -fn intern_round_trip() { - let db = LoggerDb::default(); - - let id = db.intern_string(String::from("Hello, world!")); - let s = db.lookup_intern_string(id); - - assert_eq!(s.len(), 13); - db.assert_logs(expect![[r#"[]"#]]); -} - -#[test] -fn intern_with_query() { - let db = LoggerDb::default(); - - let id = db.intern_string(String::from("Hello, world!")); - let len = db.interned_len(id); - - assert_eq!(len, 13); - db.assert_logs(expect![[r#" - [ - "salsa_event(WillCheckCancellation)", - "salsa_event(WillExecute { database_key: interned_len_shim(Id(0)) })", - ]"#]]); -} |