diff --git a/crates/oxc_semantic/src/builder.rs b/crates/oxc_semantic/src/builder.rs index 165b10025a8c5..4deb5fe1d85bb 100644 --- a/crates/oxc_semantic/src/builder.rs +++ b/crates/oxc_semantic/src/builder.rs @@ -347,13 +347,17 @@ impl<'a> SemanticBuilder<'a> { /// /// # Panics pub fn declare_reference(&mut self, reference: Reference) -> ReferenceId { - let reference_name = reference.name().clone(); let reference_id = self.symbols.create_reference(reference); + let reference_name = self.symbols.get_reference(reference_id).name(); + + let current_unresolved_references = + &mut self.unresolved_references[self.current_scope_depth]; + if let Some(reference_ids) = current_unresolved_references.get_mut(reference_name) { + reference_ids.push(reference_id); + } else { + current_unresolved_references.insert(reference_name.clone(), vec![reference_id]); + } - self.unresolved_references[self.current_scope_depth] - .entry(reference_name) - .or_default() - .push(reference_id); reference_id } diff --git a/crates/oxc_semantic/src/symbol.rs b/crates/oxc_semantic/src/symbol.rs index 80bc798c1a0fa..cf7e8c241c873 100644 --- a/crates/oxc_semantic/src/symbol.rs +++ b/crates/oxc_semantic/src/symbol.rs @@ -136,10 +136,12 @@ impl SymbolTable { self.redeclare_variables[symbol_id].push(span); } + #[inline] pub fn create_reference(&mut self, reference: Reference) -> ReferenceId { self.references.push(reference) } + #[inline] pub fn get_reference(&self, reference_id: ReferenceId) -> &Reference { &self.references[reference_id] }