use crate::LeoMessageCode;
mod ast;
pub use self::ast::*;
mod cli;
pub use self::cli::*;
mod compiler;
pub use self::compiler::*;
mod flattener;
pub use self::flattener::*;
mod loop_unroller;
pub use self::loop_unroller::*;
mod interpreter_halt;
pub use self::interpreter_halt::*;
mod package;
pub use self::package::*;
mod parser;
pub use self::parser::*;
mod static_analyzer;
pub use self::static_analyzer::*;
mod type_checker;
pub use self::type_checker::*;
mod utils;
pub use self::utils::*;
#[derive(Debug, Error)]
pub enum LeoError {
#[error(transparent)]
AstError(#[from] AstError),
#[error(transparent)]
CliError(#[from] CliError),
#[error(transparent)]
CompilerError(#[from] CompilerError),
#[error(transparent)]
InterpreterHalt(#[from] InterpreterHalt),
#[error(transparent)]
PackageError(#[from] PackageError),
#[error(transparent)]
ParserError(#[from] ParserError),
#[error(transparent)]
StaticAnalyzerError(#[from] StaticAnalyzerError),
#[error(transparent)]
TypeCheckerError(#[from] TypeCheckerError),
#[error(transparent)]
LoopUnrollerError(#[from] LoopUnrollerError),
#[error(transparent)]
FlattenError(#[from] FlattenError),
#[error("")]
LastErrorCode(i32),
#[error(transparent)]
UtilError(#[from] UtilError),
#[error(transparent)]
Anyhow(#[from] anyhow::Error),
}
impl LeoError {
pub fn error_code(&self) -> String {
use LeoError::*;
match self {
AstError(error) => error.error_code(),
CompilerError(error) => error.error_code(),
CliError(error) => error.error_code(),
ParserError(error) => error.error_code(),
PackageError(error) => error.error_code(),
StaticAnalyzerError(error) => error.error_code(),
TypeCheckerError(error) => error.error_code(),
LoopUnrollerError(error) => error.error_code(),
FlattenError(error) => error.error_code(),
UtilError(error) => error.error_code(),
LastErrorCode(_) => unreachable!(),
Anyhow(_) => "SnarkVM Error".to_string(), InterpreterHalt(_) => "Interpreter Halt".to_string(),
}
}
pub fn exit_code(&self) -> i32 {
use LeoError::*;
match self {
AstError(error) => error.exit_code(),
CompilerError(error) => error.exit_code(),
CliError(error) => error.exit_code(),
ParserError(error) => error.exit_code(),
PackageError(error) => error.exit_code(),
StaticAnalyzerError(error) => error.exit_code(),
TypeCheckerError(error) => error.exit_code(),
LoopUnrollerError(error) => error.exit_code(),
FlattenError(error) => error.exit_code(),
UtilError(error) => error.exit_code(),
LastErrorCode(code) => *code,
Anyhow(_) => 11000, InterpreterHalt(_) => 1,
}
}
}
#[derive(Debug, Error)]
pub enum LeoWarning {
#[error(transparent)]
ParserWarning(#[from] ParserWarning),
#[error(transparent)]
StaticAnalyzerWarning(#[from] StaticAnalyzerWarning),
#[error(transparent)]
TypeCheckerWarning(#[from] TypeCheckerWarning),
}
impl LeoWarning {
pub fn error_code(&self) -> String {
use LeoWarning::*;
match self {
ParserWarning(warning) => warning.warning_code(),
TypeCheckerWarning(warning) => warning.warning_code(),
StaticAnalyzerWarning(warning) => warning.warning_code(),
}
}
}
pub type Result<T, E = LeoError> = core::result::Result<T, E>;