#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LayerTy {
Float,
Int,
Bool,
Str,
Array,
Variant,
Unknown,
Void,
}
#[derive(Debug, Clone)]
pub struct GlobalConst {
pub name: &'static str,
pub ty: LayerTy,
}
#[derive(Debug, Clone)]
pub struct BuiltinFn {
pub name: &'static str,
pub min_args: u8,
pub max_args: Option<u8>,
pub ret: LayerTy,
}
#[must_use]
pub fn global_consts() -> Vec<GlobalConst> {
use LayerTy::Float;
vec![
GlobalConst {
name: "PI",
ty: Float,
},
GlobalConst {
name: "TAU",
ty: Float,
},
GlobalConst {
name: "INF",
ty: Float,
},
GlobalConst {
name: "NAN",
ty: Float,
},
]
}
#[must_use]
pub fn builtin_fns() -> Vec<BuiltinFn> {
use LayerTy::{Array, Int, Str, Unknown, Void};
vec![
BuiltinFn {
name: "preload",
min_args: 1,
max_args: Some(1),
ret: Unknown,
},
BuiltinFn {
name: "load",
min_args: 1,
max_args: Some(1),
ret: Unknown,
},
BuiltinFn {
name: "range",
min_args: 1,
max_args: Some(3),
ret: Array,
},
BuiltinFn {
name: "len",
min_args: 1,
max_args: Some(1),
ret: Int,
},
BuiltinFn {
name: "char",
min_args: 1,
max_args: Some(1),
ret: Str,
},
BuiltinFn {
name: "assert",
min_args: 1,
max_args: Some(2),
ret: Void,
},
]
}