lox_one 0.1.0

A tree-walking interpreter for the Lox programming language.
Documentation
use crate::{lox_value::LoxValue, token::Position};

use thiserror::Error;

#[derive(Debug, Error)]
pub enum RuntimeError {
    #[error("{0}, {1}.")]
    Generic(String, Position),
    #[error("Division by zero error, {0}.")]
    DivisionByZero(Position),
    #[error("Variable '{name}' isn't declared, {position}.")]
    VarDoesNotExist { name: String, position: Position },
    #[error("Incorrect number of arguments in function '{name}', on line {position}")]
    IncorrectArity { name: String, position: Position },
    #[error("Type '{type_name}' is not callable, on line {position}.")]
    NotCallable {
        type_name: LoxValue,
        position: Position,
    },
    #[error("")]
    ValidContinue,
    #[error("'continue' can only be used within blocks, {0}.")]
    InvalidContinue(Position),
    #[error("")]
    ValidBreak,
    #[error("'break' can only be used within blocks, {0}.")]
    InvalidBreak(Position),
    #[error("'return' can only be used within blocks, {0}.")]
    InvalidReturn(Position),
    #[error("var '{0}' is being used in it's initializer, {1}.")]
    VarUsedInOwnInitializer(String, Position),
}

pub type RuntimeResult<T> = Result<T, RuntimeError>;