From 9faea2364dee4fbc9391ad233c570b70256ef002 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 13 Mar 2020 16:05:46 +0100 Subject: Use `dyn Trait` for working with databse It improves compile time in `--release` mode quite a bit, it doesn't really slow things down and, conceptually, it seems closer to what we want the physical architecture to look like (we don't want to monomorphise EVERYTHING in a single leaf crate). --- crates/ra_hir_ty/src/utils.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'crates/ra_hir_ty/src/utils.rs') diff --git a/crates/ra_hir_ty/src/utils.rs b/crates/ra_hir_ty/src/utils.rs index 463fd65b4..b40d4eb73 100644 --- a/crates/ra_hir_ty/src/utils.rs +++ b/crates/ra_hir_ty/src/utils.rs @@ -14,7 +14,7 @@ use hir_def::{ }; use hir_expand::name::{name, Name}; -fn direct_super_traits(db: &impl DefDatabase, trait_: TraitId) -> Vec { +fn direct_super_traits(db: &dyn DefDatabase, trait_: TraitId) -> Vec { let resolver = trait_.resolver(db); // returning the iterator directly doesn't easily work because of // lifetime problems, but since there usually shouldn't be more than a @@ -43,7 +43,7 @@ fn direct_super_traits(db: &impl DefDatabase, trait_: TraitId) -> Vec { /// Returns an iterator over the whole super trait hierarchy (including the /// trait itself). -pub(super) fn all_super_traits(db: &impl DefDatabase, trait_: TraitId) -> Vec { +pub(super) fn all_super_traits(db: &dyn DefDatabase, trait_: TraitId) -> Vec { // we need to take care a bit here to avoid infinite loops in case of cycles // (i.e. if we have `trait A: B; trait B: A;`) let mut result = vec![trait_]; @@ -65,7 +65,7 @@ pub(super) fn all_super_traits(db: &impl DefDatabase, trait_: TraitId) -> Vec Vec { @@ -73,7 +73,7 @@ pub(super) fn find_super_trait_path( result.push(trait_); return if go(db, super_trait, &mut result) { result } else { Vec::new() }; - fn go(db: &impl DefDatabase, super_trait: TraitId, path: &mut Vec) -> bool { + fn go(db: &dyn DefDatabase, super_trait: TraitId, path: &mut Vec) -> bool { let trait_ = *path.last().unwrap(); if trait_ == super_trait { return true; @@ -95,7 +95,7 @@ pub(super) fn find_super_trait_path( } pub(super) fn associated_type_by_name_including_super_traits( - db: &impl DefDatabase, + db: &dyn DefDatabase, trait_: TraitId, name: &Name, ) -> Option { @@ -104,7 +104,7 @@ pub(super) fn associated_type_by_name_including_super_traits( .find_map(|t| db.trait_data(t).associated_type_by_name(name)) } -pub(super) fn variant_data(db: &impl DefDatabase, var: VariantId) -> Arc { +pub(super) fn variant_data(db: &dyn DefDatabase, var: VariantId) -> Arc { match var { VariantId::StructId(it) => db.struct_data(it).variant_data.clone(), VariantId::UnionId(it) => db.union_data(it).variant_data.clone(), @@ -123,7 +123,7 @@ pub(crate) fn make_mut_slice(a: &mut Arc<[T]>) -> &mut [T] { Arc::get_mut(a).unwrap() } -pub(crate) fn generics(db: &impl DefDatabase, def: GenericDefId) -> Generics { +pub(crate) fn generics(db: &dyn DefDatabase, def: GenericDefId) -> Generics { let parent_generics = parent_generic_def(db, def).map(|def| Box::new(generics(db, def))); Generics { def, params: db.generic_params(def), parent_generics } } @@ -222,7 +222,7 @@ impl Generics { } } -fn parent_generic_def(db: &impl DefDatabase, def: GenericDefId) -> Option { +fn parent_generic_def(db: &dyn DefDatabase, def: GenericDefId) -> Option { let container = match def { GenericDefId::FunctionId(it) => it.lookup(db).container, GenericDefId::TypeAliasId(it) => it.lookup(db).container, -- cgit v1.2.3