about summary refs log tree commit diff
path: root/compiler/rustc_resolve/src/lib.rs
diff options
context:
space:
mode:
authorVadim Petrochenkov <vadim.petrochenkov@gmail.com>2025-07-26 00:21:01 +0300
committerVadim Petrochenkov <vadim.petrochenkov@gmail.com>2025-07-26 00:25:26 +0300
commite82011255b5feb43cf3379d4d3495629e99c09b1 (patch)
treec92932f9403b9bd11e400d6256ea79dcd559f0eb /compiler/rustc_resolve/src/lib.rs
parent2c657901605ed5e6e6d3ab52e824f35e25cf4516 (diff)
downloadrust-e82011255b5feb43cf3379d4d3495629e99c09b1.tar.gz
rust-e82011255b5feb43cf3379d4d3495629e99c09b1.zip
resolve: Do not create `NameResolution`s on access unless necessary
Diffstat (limited to 'compiler/rustc_resolve/src/lib.rs')
-rw-r--r--compiler/rustc_resolve/src/lib.rs13
1 files changed, 10 insertions, 3 deletions
diff --git a/compiler/rustc_resolve/src/lib.rs b/compiler/rustc_resolve/src/lib.rs
index 27e14e0e62b..fe7ed07c46e 100644
--- a/compiler/rustc_resolve/src/lib.rs
+++ b/compiler/rustc_resolve/src/lib.rs
@@ -21,7 +21,7 @@
 #![recursion_limit = "256"]
 // tidy-alphabetical-end
 
-use std::cell::{Cell, RefCell};
+use std::cell::{Cell, Ref, RefCell};
 use std::collections::BTreeSet;
 use std::fmt;
 use std::sync::Arc;
@@ -1905,9 +1905,16 @@ impl<'ra, 'tcx> Resolver<'ra, 'tcx> {
         &mut self,
         module: Module<'ra>,
         key: BindingKey,
+    ) -> Option<Ref<'ra, NameResolution<'ra>>> {
+        self.resolutions(module).borrow().get(&key).map(|resolution| resolution.borrow())
+    }
+
+    fn resolution_or_default(
+        &mut self,
+        module: Module<'ra>,
+        key: BindingKey,
     ) -> &'ra RefCell<NameResolution<'ra>> {
-        *self
-            .resolutions(module)
+        self.resolutions(module)
             .borrow_mut()
             .entry(key)
             .or_insert_with(|| self.arenas.alloc_name_resolution())