Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/hir/generics.rs')
| -rw-r--r-- | crates/hir-def/src/hir/generics.rs | 72 |
1 files changed, 36 insertions, 36 deletions
diff --git a/crates/hir-def/src/hir/generics.rs b/crates/hir-def/src/hir/generics.rs index 41767131fc..43dd7d1c54 100644 --- a/crates/hir-def/src/hir/generics.rs +++ b/crates/hir-def/src/hir/generics.rs @@ -5,7 +5,6 @@ use hir_expand::name::Name; use la_arena::{Arena, Idx, RawIdx}; use stdx::impl_from; use thin_vec::ThinVec; -use triomphe::Arc; use crate::{ AdtId, ConstParamId, GenericDefId, LifetimeParamId, TypeOrConstParamId, TypeParamId, @@ -146,7 +145,7 @@ pub enum GenericParamDataRef<'a> { } /// Data about the generic parameters of a function, struct, impl, etc. -#[derive(Clone, PartialEq, Eq, Debug, Hash)] +#[derive(PartialEq, Eq, Debug, Hash, Default)] pub struct GenericParams { pub(crate) type_or_consts: Arena<TypeOrConstParamData>, pub(crate) lifetimes: Arena<LifetimeParamData>, @@ -178,12 +177,10 @@ pub enum WherePredicate { ForLifetime { lifetimes: ThinVec<Name>, target: TypeRefId, bound: TypeBound }, } -static EMPTY: LazyLock<Arc<GenericParams>> = LazyLock::new(|| { - Arc::new(GenericParams { - type_or_consts: Arena::default(), - lifetimes: Arena::default(), - where_predicates: Box::default(), - }) +static EMPTY: LazyLock<GenericParams> = LazyLock::new(|| GenericParams { + type_or_consts: Arena::default(), + lifetimes: Arena::default(), + where_predicates: Box::default(), }); impl GenericParams { @@ -191,47 +188,50 @@ impl GenericParams { pub const SELF_PARAM_ID_IN_SELF: la_arena::Idx<TypeOrConstParamData> = LocalTypeOrConstParamId::from_raw(RawIdx::from_u32(0)); - pub fn new(db: &dyn DefDatabase, def: GenericDefId) -> Arc<GenericParams> { - Self::of(db, def).0 + pub fn of(db: &dyn DefDatabase, def: GenericDefId) -> &GenericParams { + Self::with_store(db, def).0 } - pub fn of(db: &dyn DefDatabase, def: GenericDefId) -> (Arc<GenericParams>, &ExpressionStore) { + pub fn with_store( + db: &dyn DefDatabase, + def: GenericDefId, + ) -> (&GenericParams, &ExpressionStore) { match def { GenericDefId::AdtId(AdtId::EnumId(id)) => { let sig = EnumSignature::of(db, id); - (sig.generic_params.clone(), &sig.store) + (&sig.generic_params, &sig.store) } GenericDefId::AdtId(AdtId::StructId(id)) => { let sig = StructSignature::of(db, id); - (sig.generic_params.clone(), &sig.store) + (&sig.generic_params, &sig.store) } GenericDefId::AdtId(AdtId::UnionId(id)) => { let sig = UnionSignature::of(db, id); - (sig.generic_params.clone(), &sig.store) + (&sig.generic_params, &sig.store) + } + GenericDefId::ConstId(id) => { + let sig = ConstSignature::of(db, id); + (&EMPTY, &sig.store) } GenericDefId::FunctionId(id) => { let sig = FunctionSignature::of(db, id); - (sig.generic_params.clone(), &sig.store) + (&sig.generic_params, &sig.store) } GenericDefId::ImplId(id) => { let sig = ImplSignature::of(db, id); - (sig.generic_params.clone(), &sig.store) + (&sig.generic_params, &sig.store) + } + GenericDefId::StaticId(id) => { + let sig = StaticSignature::of(db, id); + (&EMPTY, &sig.store) } GenericDefId::TraitId(id) => { let sig = TraitSignature::of(db, id); - (sig.generic_params.clone(), &sig.store) + (&sig.generic_params, &sig.store) } GenericDefId::TypeAliasId(id) => { let sig = TypeAliasSignature::of(db, id); - (sig.generic_params.clone(), &sig.store) - } - GenericDefId::ConstId(id) => { - let sig = ConstSignature::of(db, id); - (EMPTY.clone(), &sig.store) - } - GenericDefId::StaticId(id) => { - let sig = StaticSignature::of(db, id); - (EMPTY.clone(), &sig.store) + (&sig.generic_params, &sig.store) } } } @@ -239,43 +239,43 @@ impl GenericParams { pub fn with_source_map( db: &dyn DefDatabase, def: GenericDefId, - ) -> (Arc<GenericParams>, &ExpressionStore, &ExpressionStoreSourceMap) { + ) -> (&GenericParams, &ExpressionStore, &ExpressionStoreSourceMap) { match def { GenericDefId::AdtId(AdtId::EnumId(id)) => { let (sig, sm) = EnumSignature::with_source_map(db, id); - (sig.generic_params.clone(), &sig.store, sm) + (&sig.generic_params, &sig.store, sm) } GenericDefId::AdtId(AdtId::StructId(id)) => { let (sig, sm) = StructSignature::with_source_map(db, id); - (sig.generic_params.clone(), &sig.store, sm) + (&sig.generic_params, &sig.store, sm) } GenericDefId::AdtId(AdtId::UnionId(id)) => { let (sig, sm) = UnionSignature::with_source_map(db, id); - (sig.generic_params.clone(), &sig.store, sm) + (&sig.generic_params, &sig.store, sm) } GenericDefId::ConstId(id) => { let (sig, sm) = ConstSignature::with_source_map(db, id); - (EMPTY.clone(), &sig.store, sm) + (&EMPTY, &sig.store, sm) } GenericDefId::FunctionId(id) => { let (sig, sm) = FunctionSignature::with_source_map(db, id); - (sig.generic_params.clone(), &sig.store, sm) + (&sig.generic_params, &sig.store, sm) } GenericDefId::ImplId(id) => { let (sig, sm) = ImplSignature::with_source_map(db, id); - (sig.generic_params.clone(), &sig.store, sm) + (&sig.generic_params, &sig.store, sm) } GenericDefId::StaticId(id) => { let (sig, sm) = StaticSignature::with_source_map(db, id); - (EMPTY.clone(), &sig.store, sm) + (&EMPTY, &sig.store, sm) } GenericDefId::TraitId(id) => { let (sig, sm) = TraitSignature::with_source_map(db, id); - (sig.generic_params.clone(), &sig.store, sm) + (&sig.generic_params, &sig.store, sm) } GenericDefId::TypeAliasId(id) => { let (sig, sm) = TypeAliasSignature::with_source_map(db, id); - (sig.generic_params.clone(), &sig.store, sm) + (&sig.generic_params, &sig.store, sm) } } } |