#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LayerTy {
Float,
Int,
Bool,
Str,
Array,
Dictionary,
Color,
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, Bool, Color, Dictionary, Int, Str, Unknown, Variant, Void};
vec![
BuiltinFn {
name: "Color8",
min_args: 3,
max_args: Some(4),
ret: Color,
},
BuiltinFn {
name: "is_instance_of",
min_args: 2,
max_args: Some(2),
ret: Bool,
},
BuiltinFn {
name: "convert",
min_args: 2,
max_args: Some(2),
ret: Variant,
},
BuiltinFn {
name: "dict_to_inst",
min_args: 1,
max_args: Some(1),
ret: Variant,
},
BuiltinFn {
name: "get_stack",
min_args: 0,
max_args: Some(0),
ret: Array,
},
BuiltinFn {
name: "inst_to_dict",
min_args: 1,
max_args: Some(1),
ret: Dictionary,
},
BuiltinFn {
name: "ord",
min_args: 1,
max_args: Some(1),
ret: Int,
},
BuiltinFn {
name: "print_debug",
min_args: 0,
max_args: None,
ret: Void,
},
BuiltinFn {
name: "print_stack",
min_args: 0,
max_args: Some(0),
ret: Void,
},
BuiltinFn {
name: "type_exists",
min_args: 1,
max_args: Some(1),
ret: Bool,
},
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,
},
]
}