diff options
author | Ben Bridle <bridle.benjamin@gmail.com> | 2025-02-10 12:57:52 +1300 |
---|---|---|
committer | Ben Bridle <bridle.benjamin@gmail.com> | 2025-02-10 12:57:52 +1300 |
commit | 6ceec5361c80b466f4a2a3719efb09ad6d6efa99 (patch) | |
tree | 2303ba2038e3ce835100a0b60ad2c54614506533 /src/reports | |
parent | d5f5489debcc23aebef31f13d92a6372dea1641d (diff) | |
download | assembler-6ceec5361c80b466f4a2a3719efb09ad6d6efa99.zip |
Create struct for reporting in detail the symbols in a resolver
This is used for debugging symbol definition and resolution issues.
Diffstat (limited to 'src/reports')
-rw-r--r-- | src/reports/mod.rs | 2 | ||||
-rw-r--r-- | src/reports/source_symbols.rs | 34 |
2 files changed, 36 insertions, 0 deletions
diff --git a/src/reports/mod.rs b/src/reports/mod.rs index c2e941d..49fdff7 100644 --- a/src/reports/mod.rs +++ b/src/reports/mod.rs @@ -1,8 +1,10 @@ mod resolver_error; mod source_hierarchy; +mod source_symbols; pub use resolver_error::*; pub use source_hierarchy::*; +pub use source_symbols::*; use crate::*; diff --git a/src/reports/source_symbols.rs b/src/reports/source_symbols.rs new file mode 100644 index 0000000..976660f --- /dev/null +++ b/src/reports/source_symbols.rs @@ -0,0 +1,34 @@ +use crate::*; + + +pub struct SourceSymbols<'a> { + pub resolver: &'a Resolver, +} + +impl<'a> SourceSymbols<'a> { + pub fn report(&self) { + for definition in &self.resolver.definitions { + let message = format!( + "Definition '{BOLD}{:?}{NORMAL}' (resolves {})", + definition.tracked.symbol, definition.references.len()); + let context = definition.tracked.context(self.resolver); + report_source_issue(LogLevel::Info, &context, &message); + } + + for reference in &self.resolver.resolved { + let definition = &self.resolver.definitions[reference.definition]; + let message = format!( + "Resolved reference '{BOLD}{:?}{NORMAL}' (defined by {:?})", + reference.tracked.symbol, definition.tracked.symbol); + let context = reference.tracked.context(self.resolver); + report_source_issue(LogLevel::Info, &context, &message); + } + + for reference in &self.resolver.unresolved { + let message = format!( + "Unresolved reference '{BOLD}{:?}{NORMAL}'", reference.symbol); + let context = reference.context(self.resolver); + report_source_issue(LogLevel::Warn, &context, &message); + } + } +} |