use thiserror::Error;
use crate::ConstString;
#[derive(Error, Debug)]
pub enum CompilationError {
#[error("to many constant values defined: storage overflow")]
ConstantStorageOverflow,
#[error("the ScriptEnum value {value} at line {pos} is not defined")]
EnumValNotFound {
value: ConstString,
pos: usize,
},
#[error("expression expected at line {pos}, got {token}")]
ExpressionExpected {
token: ConstString,
pos: usize,
},
#[error("could not parse {token} at line {pos} as Hex value")]
ParseHex {
token: ConstString,
pos: usize,
},
#[error("could not parse {token} at line {pos} as Integer value")]
ParseInt {
token: ConstString,
pos: usize,
},
#[error("could not parse {token} at line {pos} as Double value")]
ParseNumber {
token: ConstString,
pos: usize,
},
#[error("expected token {expected}, found Token {found} at line {pos}")]
TokenExpected {
expected: ConstString,
found: ConstString,
pos: usize,
},
#[error("unexpected character {c} at line {pos}")]
UnexpectedChar {
c: char,
pos: usize,
},
#[error("unterminated string {str} at line {pos}")]
UnterminatedString {
str: ConstString,
pos: usize,
},
#[error("{file} at line {line} should be unreachable")]
Unreachable {
file: ConstString,
line: u32,
},
}
#[cfg(test)]
mod tests {
use super::*;
const fn is_normal<T: Sized + Send + Sync>() {}
#[test]
const fn normal_types() {
is_normal::<&CompilationError>();
is_normal::<CompilationError>();
}
}