maid-lang 1.1.0

Maid Programming Language
Documentation
use crate::{
    lexing::{position::Position, token::Token},
    nodes::ast_node::AstNode,
};
use std::sync::Arc;

#[derive(Debug, Clone)]
pub struct FunctionDefinitionNode {
    pub var_name_token: Option<Token>,
    pub arg_name_tokens: Arc<[Token]>,
    pub body_node: Box<AstNode>,
    pub should_auto_return: bool,
    pub pos_start: Option<Position>,
    pub pos_end: Option<Position>,
}

impl FunctionDefinitionNode {
    pub fn new(
        var_name_token: Option<Token>,
        arg_name_tokens: &[Token],
        body_node: Box<AstNode>,
        should_auto_return: bool,
    ) -> Self {
        Self {
            var_name_token: var_name_token.to_owned(),
            arg_name_tokens: Arc::from(arg_name_tokens),
            body_node: body_node.to_owned(),
            should_auto_return,
            pos_start: if var_name_token.is_some() {
                var_name_token.unwrap().pos_end
            } else if !arg_name_tokens.is_empty() {
                arg_name_tokens[0].pos_start.to_owned()
            } else {
                body_node.position_start()
            },
            pos_end: body_node.position_end(),
        }
    }
}