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_def/src/nameres/collector.rs | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-) (limited to 'crates/ra_hir_def/src/nameres/collector.rs') diff --git a/crates/ra_hir_def/src/nameres/collector.rs b/crates/ra_hir_def/src/nameres/collector.rs index db9838cb5..7a042e69f 100644 --- a/crates/ra_hir_def/src/nameres/collector.rs +++ b/crates/ra_hir_def/src/nameres/collector.rs @@ -30,7 +30,7 @@ use crate::{ TraitLoc, TypeAliasLoc, UnionLoc, }; -pub(super) fn collect_defs(db: &impl DefDatabase, mut def_map: CrateDefMap) -> CrateDefMap { +pub(super) fn collect_defs(db: &dyn DefDatabase, mut def_map: CrateDefMap) -> CrateDefMap { let crate_graph = db.crate_graph(); // populate external prelude @@ -112,8 +112,8 @@ struct DeriveDirective { } /// Walks the tree of module recursively -struct DefCollector<'a, DB> { - db: &'a DB, +struct DefCollector<'a> { + db: &'a dyn DefDatabase, def_map: CrateDefMap, glob_imports: FxHashMap>, unresolved_imports: Vec, @@ -124,10 +124,7 @@ struct DefCollector<'a, DB> { cfg_options: &'a CfgOptions, } -impl DefCollector<'_, DB> -where - DB: DefDatabase, -{ +impl DefCollector<'_> { fn collect(&mut self) { let file_id = self.db.crate_graph()[self.def_map.krate].root_file_id; let raw_items = self.db.raw_items(file_id.into()); @@ -605,8 +602,8 @@ where } /// Walks a single module, populating defs, imports and macros -struct ModCollector<'a, D> { - def_collector: D, +struct ModCollector<'a, 'b> { + def_collector: &'a mut DefCollector<'b>, macro_depth: usize, module_id: LocalModuleId, file_id: HirFileId, @@ -614,10 +611,7 @@ struct ModCollector<'a, D> { mod_dir: ModDir, } -impl ModCollector<'_, &'_ mut DefCollector<'_, DB>> -where - DB: DefDatabase, -{ +impl ModCollector<'_, '_> { fn collect(&mut self, items: &[raw::RawItem]) { // Note: don't assert that inserted value is fresh: it's simply not true // for macros. @@ -950,7 +944,7 @@ mod tests { use super::*; - fn do_collect_defs(db: &impl DefDatabase, def_map: CrateDefMap) -> CrateDefMap { + fn do_collect_defs(db: &dyn DefDatabase, def_map: CrateDefMap) -> CrateDefMap { let mut collector = DefCollector { db, def_map, -- cgit v1.2.3