quickscript 0.5.5

A quick programming language with a compiler implemented in Rust.
Documentation
use anyhow::Result;

use crate::tokenizer::token::{operator::Operator, ttype::TokenType};

use super::{expr::Expression, AstParser};

impl AstParser {
    #[allow(unused)]
    pub fn parse_if(&mut self) -> Result<Expression> {
        self.iter
            .next_is(TokenType::Operator(Operator::OpenParens))?;

        let cond = self.iter.read_until_counted(
            TokenType::Operator(Operator::OpenParens),
            TokenType::Operator(Operator::CloseParens),
        );

        let content = self.iter.read_until_counted(
            TokenType::Operator(Operator::OpenCurly),
            TokenType::Operator(Operator::CloseCurly),
        );

        let mut parser = AstParser::new(content);

        parser.parse()?;

        let content = parser
            .exprs
            .iter()
            .map(|v| Box::new(v.clone()))
            .collect::<Vec<Box<Expression>>>();

        let mut parser = AstParser::new(cond);

        parser.parse()?;

        let cond = parser
            .exprs
            .iter()
            .map(|v| Box::new(v.clone()))
            .collect::<Vec<Box<Expression>>>();

        Ok(Expression::If(cond, content))
    }
}