machine_check_machine/support/
machine_error.rs

1use crate::wir::WSpan;
2
3#[derive(thiserror::Error, Debug, Clone)]
4pub enum ErrorType {
5    #[error("Error parsing as Rust expression: {0}")]
6    ExpressionParseError(String),
7    #[error("machine-check: Cannot parse module without content")]
8    ModuleWithoutContent,
9
10    #[error("machine-check error: Unknown macro")]
11    UnknownMacro,
12    #[error("{0}")]
13    MacroError(String),
14    #[error("{0}")]
15    MacroParseError(syn::Error),
16    #[error("machine-check: {0}")]
17    UnsupportedConstruct(String),
18    #[error("machine-check: {0}")]
19    IllegalConstruct(String),
20    #[error("machine-check: Could not infer variable type")]
21    InferenceFailure,
22    #[error("machine-check (concrete conversion): {0}")]
23    ConcreteConversionError(String),
24    #[error("machine-check (forward conversion): {0}")]
25    ForwardConversionError(String),
26    #[error("machine-check (backward conversion): {0}")]
27    BackwardConversionError(String),
28
29    #[error("machine-check: {0}")]
30    DescriptionError(String),
31
32    #[error("machine-check internal error (SSA translation): {0}")]
33    SsaInternal(String),
34    #[error("machine-check internal error (forward translation): {0}")]
35    ForwardInternal(String),
36    #[error("machine-check internal error (backward translation): {0}")]
37    BackwardInternal(String),
38    #[error("machine-check internal error (rules): {0}")]
39    RulesInternal(String),
40}
41
42#[derive(thiserror::Error, Debug, Clone)]
43#[error("{ty}")]
44pub struct Error {
45    pub(crate) ty: ErrorType,
46    pub(crate) span: WSpan,
47}
48
49impl Error {
50    pub fn new(ty: ErrorType, span: WSpan) -> Self {
51        Self { ty, span }
52    }
53
54    pub fn into_syn_error(self) -> syn::Error {
55        syn::Error::new_spanned(self.span.syn_delimiters(), self.ty.to_string())
56    }
57
58    pub fn span(&self) -> WSpan {
59        self.span
60    }
61}