airlang 0.23.0

Air is a minimalist and universal programming language.
Documentation
use crate::semantics::cfg::Cfg;
use crate::semantics::func::ConstFn;
use crate::semantics::func::FreeFn;
use crate::semantics::func::MutFn;
use crate::semantics::val::Val;
use crate::type_::ConstRef;
use crate::type_::DynRef;

#[derive(Default, Copy, Clone)]
pub(crate) struct Id;

impl FreeFn<Cfg, Val, Val> for Id {
    fn free_call(&self, cfg: &mut Cfg, input: Val) -> Val {
        if !cfg.step() {
            return Val::default();
        }
        input
    }
}

impl ConstFn<Cfg, Val, Val, Val> for Id {
    fn const_call(&self, cfg: &mut Cfg, _ctx: ConstRef<Val>, input: Val) -> Val {
        if !cfg.step() {
            return Val::default();
        }
        input
    }

    fn opt_const_call(&self, cfg: &mut Cfg, _ctx: Option<ConstRef<Val>>, input: Val) -> Val {
        if !cfg.step() {
            return Val::default();
        }
        input
    }
}

impl MutFn<Cfg, Val, Val, Val> for Id {
    fn mut_call(&self, cfg: &mut Cfg, _ctx: &mut Val, input: Val) -> Val {
        if !cfg.step() {
            return Val::default();
        }
        input
    }

    fn dyn_call(&self, cfg: &mut Cfg, _ctx: DynRef<Val>, input: Val) -> Val {
        if !cfg.step() {
            return Val::default();
        }
        input
    }

    fn opt_dyn_call(&self, cfg: &mut Cfg, _ctx: Option<DynRef<Val>>, input: Val) -> Val {
        if !cfg.step() {
            return Val::default();
        }
        input
    }
}