diff --git a/codegraph-kernel/src/resolve/mod.rs b/codegraph-kernel/src/resolve/mod.rs index 2df678837..ad22ab441 100644 --- a/codegraph-kernel/src/resolve/mod.rs +++ b/codegraph-kernel/src/resolve/mod.rs @@ -783,6 +783,9 @@ pub struct KernelResolver { /// is_generated_file per path — the >256-pool scans run its ~25 /// regexes once per candidate; pools share few unique paths. gen_path_memo: HashMap, + /// local_declaration_scope, by candidate id — its own map so the key + /// needs no "local:"-prefixed format! alloc. + local_decl_scope_memo: HashMap>, language_type_scope_memo: HashMap>, scala_package_object_membership_memo: HashMap>, cpp_default_declaration_memo: HashMap, @@ -996,6 +999,7 @@ impl KernelResolver { bare_name_memo: None, bare_receiver_memo: HashMap::new(), gen_path_memo: HashMap::new(), + local_decl_scope_memo: HashMap::new(), language_type_scope_memo: HashMap::new(), scala_package_object_membership_memo: HashMap::new(), cpp_default_declaration_memo: HashMap::new(), diff --git a/codegraph-kernel/src/resolve/resolver_upstream.rs b/codegraph-kernel/src/resolve/resolver_upstream.rs index ff754c5f5..439cc470d 100644 --- a/codegraph-kernel/src/resolve/resolver_upstream.rs +++ b/codegraph-kernel/src/resolve/resolver_upstream.rs @@ -177,8 +177,10 @@ impl KernelResolver { { return Ok(None); } - let key = format!("local:{}", n.id); - if let Some(hit) = self.lexical_scope_memo.get(&key) { + // Own memo keyed on n.id — the shared lexical_scope_memo needed a + // "local:"-prefixed format! key (a String alloc per call) only for + // namespacing. + if let Some(hit) = self.local_decl_scope_memo.get(n.id.as_str()) { return Ok(*hit); } let scope = self @@ -194,7 +196,7 @@ impl KernelResolver { }) .min_by_key(|f| f.end_line - f.start_line) .map(|f| (f.start_line, f.end_line)); - self.lexical_scope_memo.insert(key, scope); + self.local_decl_scope_memo.insert(n.id.clone(), scope); Ok(scope) }