diff --git a/vasm_core/src/parse_error.rs b/vasm_core/src/parse_error.rs index 49f5b32..a1115be 100644 --- a/vasm_core/src/parse_error.rs +++ b/vasm_core/src/parse_error.rs @@ -67,35 +67,47 @@ pub enum AssembleError { MacroError(Location), } +impl AssembleError { + pub fn message(&self) -> String { + match self { + AssembleError::ParseError(_, err) => format!("Parse error: {}", err), + AssembleError::EquResolveError(_, name, _) => format!("Cannot resolve .equ {}", name), + AssembleError::EquDuplicateError(_, name) => format!("Duplicate .equ {}", name), + AssembleError::OrgResolveError(_, _) => "Cannot resolve .org".to_string(), + AssembleError::ArgError(_, _) => "Cannot calculate argument".to_string(), + AssembleError::NoCode => "No output would be generated by this code".to_string(), + AssembleError::IncludeError(_, file) => format!("Cannot read \"{}\"", file), + AssembleError::FileError(_) => "File read error".to_string(), + AssembleError::MacroError(_) => "Malformed macro control structure".to_string() + } + } +} + impl Display for AssembleError { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { match self { AssembleError::EquResolveError(line, name, err) => { - write!(f, "Cannot resolve .equ {} at {}: {}", name, line, err) + write!(f, "{} {} at {}: {}", self.message(), name, line, err) } AssembleError::EquDuplicateError(line, name) => { - write!(f, "Duplicate .equ {} at {}", name, line) - } - AssembleError::OrgResolveError(line, err) => { - write!(f, "Cannot resolve .org at {}: {}", line, err) + write!(f, "{} {} at {}", self.message(), name, line) } + AssembleError::OrgResolveError(line, err) | AssembleError::ArgError(line, err) => { - write!(f, "Cannot calculate argument at {}: {}", line, err) - } - AssembleError::NoCode => { - write!(f, "No output would be generated by this code") + write!(f, "{} at {}: {}", self.message(), line, err) } AssembleError::ParseError(line, err) => { - write!(f, "Parse error at {}: {}", line, err) + write!(f, "{} at {}: {}", self.message(), line, err) } - AssembleError::IncludeError(line, file) => { - write!(f, "Cannot read \"{}\" at {}", file, line) + AssembleError::NoCode => { + write!(f, "{}", self.message()) } + AssembleError::IncludeError(line, _) | AssembleError::MacroError(line) => { - write!(f, "Malformed macro control structure at {}", line) + write!(f, "{} at {}", self.message(), line) } AssembleError::FileError(file) => { - write!(f, "File read error in {}", file) + write!(f, "{} in {}", self.message(), file) } } }