summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Bridle <ben@derelict.engineering>2025-04-01 17:15:31 +1300
committerBen Bridle <ben@derelict.engineering>2025-04-01 17:15:31 +1300
commit1400c0cc3bdd7f685d63fe174286dd106337e735 (patch)
tree3675738c739648611525df26a4b8566e79c82755
parent1cc0269f75b8b2dd979c01ef4a500a09a0cc4354 (diff)
downloadassembler-1400c0cc3bdd7f685d63fe174286dd106337e735.zip
Report all symbols involved in a cyclic dependency error
Without this, it's difficult to sort out a cyclic dependency error when many large source files are involved.
-rw-r--r--src/errors/merge_error.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/errors/merge_error.rs b/src/errors/merge_error.rs
index d830d96..89f55a2 100644
--- a/src/errors/merge_error.rs
+++ b/src/errors/merge_error.rs
@@ -3,6 +3,8 @@ use crate::*;
use ansi::*;
use log::error;
+use std::collections::HashSet;
+
pub struct MergeError<'a> {
pub resolver: &'a Resolver,
@@ -33,6 +35,18 @@ impl MergeError<'_> {
None =>
eprintln!(" => {parent_path}"),
};
+ // Report all referenced symbols that are defined by this parent.
+ let mut reported_definition_ids = HashSet::new();
+ for reference in &self.resolver.resolved {
+ if reference.tracked.source_id == *id {
+ if reported_definition_ids.insert(reference.definition) {
+ let definition = &self.resolver.definitions[reference.definition];
+ if definition.tracked.source_id == *parent_id {
+ eprintln!(" {:?}", definition.tracked.symbol);
+ }
+ }
+ }
+ }
}
}
}