celsium 0.1.7

A library for building interpreters
Documentation
use crate::block::Block;
use crate::{CelsiumProgram, BuiltinTypes};

#[derive(Clone, Debug,serde::Deserialize, serde::Serialize)]
pub enum FunctionReturnType {
    NONE,
    BuiltinTypes,
}
#[derive(Clone, Debug,serde::Deserialize, serde::Serialize)]
pub struct FunctionSignature {
    pub name: String,
    pub return_type: FunctionReturnType,
    pub args: Vec<FuncArg>,
}
impl FunctionSignature {
    pub fn new(
        func_name: String,
        args: Vec<FuncArg>,
        return_type: FunctionReturnType,
    ) -> FunctionSignature {
        FunctionSignature {
            name: func_name,
            args,
            return_type,
        }
    }
}

#[derive(Clone, Debug,serde::Deserialize, serde::Serialize)]
pub struct FuncArg {
    pub name: String,
    pub arg_type: BuiltinTypes,
}
#[derive(Clone, Debug,serde::Deserialize, serde::Serialize)]
pub enum VISIBILITY {
    PRIVATE,
    PUBLIC,
}
#[derive(Debug, Clone)]
pub struct Function {
    pub signature: FunctionSignature,
    pub body: Block,
}