machine_check_machine/support/
machine_error.rs1use 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}