diff options
author | Ben Bridle <bridle.benjamin@gmail.com> | 2025-02-10 11:56:58 +1300 |
---|---|---|
committer | Ben Bridle <bridle.benjamin@gmail.com> | 2025-02-10 11:56:58 +1300 |
commit | fd6b4471955dac64b7d40b7c31992c15d52b2460 (patch) | |
tree | 5b2561150e0eac0922a8ff40dd34da6a3ca76f7c /src/reports/resolver_error.rs | |
parent | 2d67476d48fcb33cd1c59cbc2e0f82872bc0c217 (diff) | |
download | assembler-fd6b4471955dac64b7d40b7c31992c15d52b2460.zip |
Move report-printing structs to separate module
Diffstat (limited to 'src/reports/resolver_error.rs')
-rw-r--r-- | src/reports/resolver_error.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/reports/resolver_error.rs b/src/reports/resolver_error.rs new file mode 100644 index 0000000..97fc761 --- /dev/null +++ b/src/reports/resolver_error.rs @@ -0,0 +1,30 @@ +use crate::*; + +use log::LogLevel; + + +pub struct ResolverError<'a> { + pub resolver: &'a Resolver, +} + +impl<'a> ResolverError<'a> { + pub fn report(&self) { + for reference in &self.resolver.unresolved { + let message = format!( + "Undefined symbol, no label or macro has been defined with the name {:?}", + &reference.symbol.name, + ); + let context = reference.context(&self.resolver); + report_source_issue(LogLevel::Error, &context, &message); + } + for redefinition in &self.resolver.redefinitions { + let definition = self.resolver.definitions.get(redefinition.1).unwrap(); + let message = format!( + "Redefined symbol, first defined at {}", + &definition.symbol.source.in_merged, + ); + let context = redefinition.0.context(&self.resolver); + report_source_issue(LogLevel::Error, &context, &message); + } + } +} |