ralix 0.2.0

A simple, type-safe, tree walking interpreter
use crate::{
    Expression, Parser, ParserDiagnostic, ParserResult, Statement, Token,
    expressions::PrefixOperator, parser::expressions::Precedence,
};

impl Parser<'_> {
    pub fn parse_assignment_statement(&mut self, expr: Expression) -> ParserResult<Statement> {
        match &expr {
            Expression::Identifier(_) => {}
            Expression::Index { .. } => {}
            Expression::Prefix {
                operator: PrefixOperator::Deref,
                ..
            } => {}
            _ => return Err(ParserDiagnostic::CannotAssignTo(expr.into())),
        };

        self.skip_peek_token(Token::Assign);

        let value = self.parse_expression(Precedence::Lowest)?;

        self.consume_peek_token(Token::SemiColon);

        Ok(Statement::Assign { left: expr, value })
    }
}