mirror of
https://github.com/danbulant/oxc
synced 2026-05-24 12:21:58 +00:00
fix(traverse): insert_scope_below update child scopes records (#5409)
Follow on after #5403. Make `Traverse` update child scope IDs when inserting new scope. These lines were removed in #5232, but not reinstated in #5403.
This commit is contained in:
parent
b8464325e7
commit
d594818701
2 changed files with 19 additions and 0 deletions
|
|
@ -165,6 +165,7 @@ impl ScopeTree {
|
||||||
pub fn set_parent_id(&mut self, scope_id: ScopeId, parent_id: Option<ScopeId>) {
|
pub fn set_parent_id(&mut self, scope_id: ScopeId, parent_id: Option<ScopeId>) {
|
||||||
self.parent_ids[scope_id] = parent_id;
|
self.parent_ids[scope_id] = parent_id;
|
||||||
if self.build_child_ids {
|
if self.build_child_ids {
|
||||||
|
// Set this scope as child of parent scope
|
||||||
if let Some(parent_id) = parent_id {
|
if let Some(parent_id) = parent_id {
|
||||||
self.child_ids[parent_id].push(scope_id);
|
self.child_ids[parent_id].push(scope_id);
|
||||||
}
|
}
|
||||||
|
|
@ -247,12 +248,24 @@ impl ScopeTree {
|
||||||
&mut self.bindings[scope_id]
|
&mut self.bindings[scope_id]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Return whether this `ScopeTree` has child IDs recorded
|
||||||
|
#[inline]
|
||||||
|
pub fn has_child_ids(&self) -> bool {
|
||||||
|
self.build_child_ids
|
||||||
|
}
|
||||||
|
|
||||||
/// Get the child scopes of a scope
|
/// Get the child scopes of a scope
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn get_child_ids(&self, scope_id: ScopeId) -> &[ScopeId] {
|
pub fn get_child_ids(&self, scope_id: ScopeId) -> &[ScopeId] {
|
||||||
&self.child_ids[scope_id]
|
&self.child_ids[scope_id]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get a mutable reference to a scope's children
|
||||||
|
#[inline]
|
||||||
|
pub fn get_child_ids_mut(&mut self, scope_id: ScopeId) -> &mut Vec<ScopeId> {
|
||||||
|
&mut self.child_ids[scope_id]
|
||||||
|
}
|
||||||
|
|
||||||
/// Create a scope.
|
/// Create a scope.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn add_scope(
|
pub fn add_scope(
|
||||||
|
|
|
||||||
|
|
@ -119,6 +119,12 @@ impl TraverseScoping {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn insert_scope_below(&mut self, child_scope_ids: &[ScopeId], flags: ScopeFlags) -> ScopeId {
|
fn insert_scope_below(&mut self, child_scope_ids: &[ScopeId], flags: ScopeFlags) -> ScopeId {
|
||||||
|
// Remove these scopes from parent's children
|
||||||
|
if self.scopes.has_child_ids() {
|
||||||
|
let current_child_scope_ids = self.scopes.get_child_ids_mut(self.current_scope_id);
|
||||||
|
current_child_scope_ids.retain(|scope_id| !child_scope_ids.contains(scope_id));
|
||||||
|
}
|
||||||
|
|
||||||
// Create new scope as child of parent
|
// Create new scope as child of parent
|
||||||
let new_scope_id = self.create_child_scope_of_current(flags);
|
let new_scope_id = self.create_child_scope_of_current(flags);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue