diff options
Diffstat (limited to 'src/errors/resolver_error.rs')
-rw-r--r-- | src/errors/resolver_error.rs | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/errors/resolver_error.rs b/src/errors/resolver_error.rs new file mode 100644 index 0000000..de8b8d1 --- /dev/null +++ b/src/errors/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.source.string, + ); + 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); + } + } +} |