diff options
author | uHOOCCOOHu <[email protected]> | 2019-09-07 17:05:58 +0100 |
---|---|---|
committer | uHOOCCOOHu <[email protected]> | 2019-09-08 18:34:53 +0100 |
commit | f7f7c2aff80f0870f0d71bf70075e3b5bf68994f (patch) | |
tree | 194c41ab1320730d7f08823127404056e235cf2e /crates/ra_hir/src | |
parent | c90256429bf41958ff6c7390dfd5fa25123eabb3 (diff) |
Revert "Replace with immutable map to avoid heavy cloning"
This reverts commit 2c494eb803c88ef5d23607c3b156fce60c2b8076.
See: https://github.com/rust-analyzer/rust-analyzer/pull/1784#issuecomment-529119924
Diffstat (limited to 'crates/ra_hir/src')
-rw-r--r-- | crates/ra_hir/src/nameres.rs | 7 | ||||
-rw-r--r-- | crates/ra_hir/src/nameres/collector.rs | 3 |
2 files changed, 2 insertions, 8 deletions
diff --git a/crates/ra_hir/src/nameres.rs b/crates/ra_hir/src/nameres.rs index 7e5138d05..befbb2a9b 100644 --- a/crates/ra_hir/src/nameres.rs +++ b/crates/ra_hir/src/nameres.rs | |||
@@ -54,7 +54,6 @@ mod mod_resolution; | |||
54 | #[cfg(test)] | 54 | #[cfg(test)] |
55 | mod tests; | 55 | mod tests; |
56 | 56 | ||
57 | use std::hash::BuildHasherDefault; | ||
58 | use std::sync::Arc; | 57 | use std::sync::Arc; |
59 | 58 | ||
60 | use once_cell::sync::Lazy; | 59 | use once_cell::sync::Lazy; |
@@ -62,7 +61,7 @@ use ra_arena::{impl_arena_id, Arena, RawId}; | |||
62 | use ra_db::{Edition, FileId}; | 61 | use ra_db::{Edition, FileId}; |
63 | use ra_prof::profile; | 62 | use ra_prof::profile; |
64 | use ra_syntax::ast; | 63 | use ra_syntax::ast; |
65 | use rustc_hash::{FxHashMap, FxHashSet, FxHasher}; | 64 | use rustc_hash::{FxHashMap, FxHashSet}; |
66 | use test_utils::tested_by; | 65 | use test_utils::tested_by; |
67 | 66 | ||
68 | use crate::{ | 67 | use crate::{ |
@@ -74,8 +73,6 @@ use crate::{ | |||
74 | AstId, BuiltinType, Crate, HirFileId, MacroDef, Module, ModuleDef, Name, Path, PathKind, Trait, | 73 | AstId, BuiltinType, Crate, HirFileId, MacroDef, Module, ModuleDef, Name, Path, PathKind, Trait, |
75 | }; | 74 | }; |
76 | 75 | ||
77 | pub(crate) type ImmFxHashMap<K, V> = im::HashMap<K, V, BuildHasherDefault<FxHasher>>; | ||
78 | |||
79 | pub(crate) use self::raw::{ImportSourceMap, RawItems}; | 76 | pub(crate) use self::raw::{ImportSourceMap, RawItems}; |
80 | 77 | ||
81 | pub use self::{ | 78 | pub use self::{ |
@@ -142,7 +139,7 @@ pub(crate) struct ModuleData { | |||
142 | pub struct ModuleScope { | 139 | pub struct ModuleScope { |
143 | items: FxHashMap<Name, Resolution>, | 140 | items: FxHashMap<Name, Resolution>, |
144 | macros: FxHashMap<Name, MacroDef>, | 141 | macros: FxHashMap<Name, MacroDef>, |
145 | textual_macros: ImmFxHashMap<Name, MacroDef>, | 142 | textual_macros: FxHashMap<Name, MacroDef>, |
146 | } | 143 | } |
147 | 144 | ||
148 | static BUILTIN_SCOPE: Lazy<FxHashMap<Name, Resolution>> = Lazy::new(|| { | 145 | static BUILTIN_SCOPE: Lazy<FxHashMap<Name, Resolution>> = Lazy::new(|| { |
diff --git a/crates/ra_hir/src/nameres/collector.rs b/crates/ra_hir/src/nameres/collector.rs index 3803c7185..10c32ffa1 100644 --- a/crates/ra_hir/src/nameres/collector.rs +++ b/crates/ra_hir/src/nameres/collector.rs | |||
@@ -631,7 +631,6 @@ where | |||
631 | modules[res].parent = Some(self.module_id); | 631 | modules[res].parent = Some(self.module_id); |
632 | modules[res].declaration = Some(declaration); | 632 | modules[res].declaration = Some(declaration); |
633 | modules[res].definition = definition; | 633 | modules[res].definition = definition; |
634 | // Cloning immutable map is lazy and fast | ||
635 | modules[res].scope.textual_macros = modules[self.module_id].scope.textual_macros.clone(); | 634 | modules[res].scope.textual_macros = modules[self.module_id].scope.textual_macros.clone(); |
636 | modules[self.module_id].children.insert(name.clone(), res); | 635 | modules[self.module_id].children.insert(name.clone(), res); |
637 | let resolution = Resolution { | 636 | let resolution = Resolution { |
@@ -708,8 +707,6 @@ where | |||
708 | } | 707 | } |
709 | 708 | ||
710 | fn import_all_textual_macros(&mut self, module_id: CrateModuleId) { | 709 | fn import_all_textual_macros(&mut self, module_id: CrateModuleId) { |
711 | // `clone()` is needed here to avoid mutable borrow `self.def_collector` when first borrow is alive | ||
712 | // Cloning immutable map is lazy and fast | ||
713 | let macros = self.def_collector.def_map[module_id].scope.textual_macros.clone(); | 710 | let macros = self.def_collector.def_map[module_id].scope.textual_macros.clone(); |
714 | for (name, macro_) in macros { | 711 | for (name, macro_) in macros { |
715 | self.def_collector.define_textual_macro(self.module_id, name.clone(), macro_.id); | 712 | self.def_collector.define_textual_macro(self.module_id, name.clone(), macro_.id); |