use sim_kernel::Symbol;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum IslispFormRole {
Object,
Generic,
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct IslispFormSpec {
pub symbol: Symbol,
pub role: IslispFormRole,
pub organ: Symbol,
pub doc: &'static str,
}
pub fn islisp_form_specs() -> Vec<IslispFormSpec> {
vec![
IslispFormSpec {
symbol: Symbol::qualified("islisp", "defclass"),
role: IslispFormRole::Object,
organ: sim_lib_dispatch::dispatch_organ_symbol(),
doc: "Declare an ISLISP class recipe consumed by generic method shapes.",
},
IslispFormSpec {
symbol: Symbol::qualified("islisp", "defgeneric"),
role: IslispFormRole::Generic,
organ: sim_lib_dispatch::dispatch_organ_symbol(),
doc: "Declare a generic function backed by the shared dispatch organ.",
},
IslispFormSpec {
symbol: Symbol::qualified("islisp", "defmethod"),
role: IslispFormRole::Generic,
organ: sim_lib_dispatch::dispatch_organ_symbol(),
doc: "Attach a primary method to an ISLISP generic through dispatch.",
},
]
}