diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/resolver.rs | 18 | 
1 files changed, 10 insertions, 8 deletions
| diff --git a/src/resolver.rs b/src/resolver.rs index d02d80f..1f6e0a2 100644 --- a/src/resolver.rs +++ b/src/resolver.rs @@ -2,6 +2,8 @@ use crate::*;  use log::{info, error}; +use std::collections::HashSet; +  type PushFn = fn(&mut String, &SourceFile); @@ -60,16 +62,16 @@ impl Resolver {          match parent_id {              Some(parent_id) => match self.source_units.get_mut(parent_id) { -                Some(parent) => parent.child_ids.push(source_id), -                None => error!("Could not find parent (#{parent_id}) of source unit #{source_id}"), +                Some(parent) => { parent.child_ids.insert(source_id); } +                None => { error!("Could not find parent (#{parent_id}) of source unit #{source_id}"); }              }              None => self.root_unit_ids.push(source_id),          }          self.source_units.push(              HeirarchicalSourceUnit {                  source_unit, -                child_ids: Vec::new(), -                parent_ids: Vec::new(), +                child_ids: HashSet::new(), +                parent_ids: HashSet::new(),              }          );      } @@ -213,9 +215,9 @@ impl Resolver {                  // A unit cannot be its own parent.                  let is_self = reference.tracked.source_id == definition.tracked.source_id;                  let must_precede = SymbolRole::Definition(DefinitionType::MustPrecedeReference); -                if  is_self || definition.tracked.symbol.role != must_precede { continue; } +                if is_self || definition.tracked.symbol.role != must_precede { continue; }                  let referencing_unit = &mut self.source_units[reference.tracked.source_id]; -                referencing_unit.parent_ids.push(definition.tracked.source_id); +                referencing_unit.parent_ids.insert(definition.tracked.source_id);              };          }      } @@ -285,9 +287,9 @@ impl Resolver {  pub struct HeirarchicalSourceUnit {      pub source_unit: SourceUnit,      /// Pointers to source units that resolve references this unit. -    pub child_ids: Vec<usize>, +    pub child_ids: HashSet<usize>,      /// Pointers to source units that must be included before this unit. -    pub parent_ids: Vec<usize>, +    pub parent_ids: HashSet<usize>,  }  pub struct TrackedDefinition { | 
