cxc 0.3.1

A high performance scripting language
Documentation
use crate::{Type, errors::{UErr, CResult}};

use super::{expr_tree::HNodeData, hlr_data::FuncRep};

pub fn add_void_return_if_ret_type_is_void(hlr: &mut FuncRep) -> CResult<()> {
    if hlr.ret_type.is_void() {
        let new_return = hlr.tree.insert(
            hlr.tree.root,
            HNodeData::Return {
                to_return: None,
                ret_type: Type::void(),
            },
        );
        let main_block = hlr.tree.get_mut(hlr.tree.root);

        match main_block {
            HNodeData::Block { ref mut stmts, .. } => {
                stmts.push(new_return);
            },
            _ => unreachable!(),
        }
    }

    if !hlr.tree.iter().any(|node| matches!(node.1, HNodeData::Return { .. })) {
        Err(UErr::NoReturn)?;
    }

    Ok(())
}