summaryrefslogtreecommitdiff
path: root/src/processors
diff options
context:
space:
mode:
authorBen Bridle <ben@derelict.engineering>2025-04-01 17:10:51 +1300
committerBen Bridle <ben@derelict.engineering>2025-04-01 17:12:05 +1300
commit1cc0269f75b8b2dd979c01ef4a500a09a0cc4354 (patch)
tree4b7f500844ef93848c2430019c4ec761d7e07c39 /src/processors
parent5253be190b1cac16fe4f8658491959e15e52f1b3 (diff)
downloadassembler-1cc0269f75b8b2dd979c01ef4a500a09a0cc4354.zip
Fix resolver error
To check if a particular definition was defining a particular symbol, the names of the definition and reference were being compared, when the namespace-aware Symbol::defines method should have been used instead. This was causing an issue where a namespaced definition would be marked as resolving a with the same name in a different namespace. This was resulting in a very complicated and incorrect cyclic dependency error.
Diffstat (limited to 'src/processors')
-rw-r--r--src/processors/resolver.rs4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/processors/resolver.rs b/src/processors/resolver.rs
index 969b817..b4bcc80 100644
--- a/src/processors/resolver.rs
+++ b/src/processors/resolver.rs
@@ -187,7 +187,7 @@ impl Resolver {
for symbol in symbols {
if let SymbolRole::Definition(_) = symbol.role {
for unresolved in &self.unresolved {
- if unresolved.symbol.name == symbol.name {
+ if symbol.defines(&unresolved.symbol) {
return Some(unresolved.source_id);
}
}
@@ -206,7 +206,7 @@ impl Resolver {
}
// Populate the .parent_ids field of every source unit.
for reference in &self.resolved {
- let predicate = |d: &&TrackedDefinition| d.tracked.symbol.name == reference.tracked.symbol.name;
+ let predicate = |d: &&TrackedDefinition| d.tracked.symbol.defines(&reference.tracked.symbol);
if let Some(definition) = self.definitions.iter().find(predicate) {
// A unit cannot be its own parent.
let is_self = reference.tracked.source_id == definition.tracked.source_id;