Skip to main content

kore/
error.rs

1//! Error types for the KORE compiler
2
3use crate::span::Span;
4use thiserror::Error;
5
6#[derive(Error, Debug)]
7pub enum KoreError {
8    #[error("Lexer error at {span:?}: {message}")]
9    Lexer { message: String, span: Span },
10
11    #[error("Parser error at {span:?}: {message}")]
12    Parser { message: String, span: Span },
13
14    #[error("Type error at {span:?}: {message}")]
15    Type { message: String, span: Span },
16
17    #[error("Effect error at {span:?}: {message}")]
18    Effect { message: String, span: Span },
19
20    #[error("Borrow error at {span:?}: {message}")]
21    Borrow { message: String, span: Span },
22
23    #[error("Codegen error at {span:?}: {message}")]
24    Codegen { message: String, span: Span },
25
26    #[error("Runtime error: {message}")]
27    Runtime { message: String },
28
29    #[error("IO error: {0}")]
30    Io(#[from] std::io::Error),
31}
32
33impl KoreError {
34    pub fn lexer(message: impl Into<String>, span: Span) -> Self {
35        KoreError::Lexer {
36            message: message.into(),
37            span,
38        }
39    }
40
41    pub fn parser(message: impl Into<String>, span: Span) -> Self {
42        KoreError::Parser {
43            message: message.into(),
44            span,
45        }
46    }
47
48    pub fn type_error(message: impl Into<String>, span: Span) -> Self {
49        KoreError::Type {
50            message: message.into(),
51            span,
52        }
53    }
54
55    pub fn effect_error(message: impl Into<String>, span: Span) -> Self {
56        KoreError::Effect {
57            message: message.into(),
58            span,
59        }
60    }
61
62    pub fn borrow_error(message: impl Into<String>, span: Span) -> Self {
63        KoreError::Borrow {
64            message: message.into(),
65            span,
66        }
67    }
68
69    pub fn codegen(message: impl Into<String>, span: Span) -> Self {
70        KoreError::Codegen {
71            message: message.into(),
72            span,
73        }
74    }
75
76    pub fn runtime(message: impl Into<String>) -> Self {
77        KoreError::Runtime {
78            message: message.into(),
79        }
80    }
81}
82
83/// Result type for KORE operations
84pub type KoreResult<T> = Result<T, KoreError>;
85