diff options
Diffstat (limited to 'src/resolver.rs')
-rw-r--r-- | src/resolver.rs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/resolver.rs b/src/resolver.rs index 8d3a16d..d02d80f 100644 --- a/src/resolver.rs +++ b/src/resolver.rs @@ -114,8 +114,15 @@ impl Resolver { } /// Add a set of source units that might contain definitions for unresolved symbols. - pub fn add_library_source_units(&mut self, mut source_units: Vec<SourceUnit>) { - self.library_source_units.append(&mut source_units); + pub fn add_library_source_units(&mut self, source_units: Vec<SourceUnit>) { + for source_unit in source_units { + // Discard source units that have already been included. + let in_included = self.source_units.iter().any(|s| s.source_unit == source_unit); + let in_library = self.library_source_units.iter().any(|s| *s == source_unit); + if !in_included && !in_library { + self.library_source_units.push(source_unit); + } + } } /// Attempt to resolve unresolved references with library source units. |