use sim_kernel::{
Cx, LibId, OpKey, Result, Symbol,
standard::{publish_organ_claims, publish_organ_claims_for_lib},
};
pub fn binding_organ_symbol() -> Symbol {
Symbol::qualified("organ", "binding")
}
pub fn binding_let_op_key() -> OpKey {
binding_op_key("let")
}
pub fn binding_let_star_op_key() -> OpKey {
binding_op_key("let-star")
}
pub fn binding_letrec_op_key() -> OpKey {
binding_op_key("letrec")
}
pub fn binding_dynamic_let_op_key() -> OpKey {
binding_op_key("dynamic-let")
}
pub fn binding_parameterize_op_key() -> OpKey {
binding_op_key("parameterize")
}
pub fn binding_profile_modes_op_key() -> OpKey {
binding_op_key("profile-modes")
}
pub fn binding_op_keys() -> Vec<OpKey> {
[
binding_let_op_key(),
binding_let_star_op_key(),
binding_letrec_op_key(),
binding_dynamic_let_op_key(),
binding_parameterize_op_key(),
binding_profile_modes_op_key(),
]
.into()
}
pub fn publish_binding_organ_claims(cx: &mut Cx) -> Result<()> {
publish_organ_claims(cx, binding_organ_symbol(), binding_op_keys())
}
pub fn publish_binding_organ_claims_for_lib(cx: &mut Cx, lib_id: LibId) -> Result<()> {
publish_organ_claims_for_lib(cx, lib_id, binding_organ_symbol(), binding_op_keys())
}
fn binding_op_key(name: &str) -> OpKey {
OpKey::new(Symbol::new("binding"), Symbol::new(name), 1)
}