about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLukas Wirth <lukastw97@gmail.com>2021-12-09 18:04:32 +0100
committerLukas Wirth <lukastw97@gmail.com>2021-12-09 18:04:32 +0100
commit067d87e8a9f170452a5554dcc7b3e264cc12142b (patch)
treef9382349ca9500fdd56fcfdf1f684ee730faf91c
parent6df9bd42f44c5f70903021f83c6ada0c6e3c6916 (diff)
downloadrust-067d87e8a9f170452a5554dcc7b3e264cc12142b.tar.gz
rust-067d87e8a9f170452a5554dcc7b3e264cc12142b.zip
Remove some allocs
-rw-r--r--crates/hir_def/src/resolver.rs7
1 files changed, 5 insertions, 2 deletions
diff --git a/crates/hir_def/src/resolver.rs b/crates/hir_def/src/resolver.rs
index 8b2eea9d586..9f68b800a55 100644
--- a/crates/hir_def/src/resolver.rs
+++ b/crates/hir_def/src/resolver.rs
@@ -8,7 +8,7 @@ use hir_expand::{
 };
 use indexmap::IndexMap;
 use rustc_hash::FxHashSet;
-use smallvec::SmallVec;
+use smallvec::{smallvec, SmallVec};
 
 use crate::{
     body::scope::{ExprScopes, ScopeId},
@@ -567,6 +567,8 @@ pub fn resolver_for_scope(
     let mut r = owner.resolver(db);
     let scopes = db.expr_scopes(owner);
     let scope_chain = scopes.scope_chain(scope_id).collect::<Vec<_>>();
+    r.scopes.reserve(scope_chain.len());
+
     for scope in scope_chain.into_iter().rev() {
         if let Some(block) = scopes.block(scope) {
             if let Some(def_map) = db.block_def_map(block) {
@@ -739,12 +741,13 @@ pub trait HasResolver: Copy {
 impl HasResolver for ModuleId {
     fn resolver(self, db: &dyn DefDatabase) -> Resolver {
         let mut def_map = self.def_map(db);
-        let mut modules = vec![(def_map.clone(), self.local_id)];
+        let mut modules: SmallVec<[_; 2]> = smallvec![(def_map.clone(), self.local_id)];
         while let Some(parent) = def_map.parent() {
             def_map = parent.def_map(db);
             modules.push((def_map.clone(), parent.local_id));
         }
         let mut resolver = Resolver::default();
+        resolver.scopes.reserve(modules.len());
         for (def_map, module) in modules.into_iter().rev() {
             resolver = resolver.push_module_scope(def_map, module);
         }