stak-vm 0.12.12

Virtual machines for Stak Scheme
Documentation
pub type NumberInner = i64;

pub const fn box_cons(cons: u64) -> u64 {
    cons << 1
}

pub const fn unbox_cons(cons: u64) -> u64 {
    cons >> 1
}

pub const fn is_cons(value: u64) -> bool {
    value & 1 == 0
}

pub const fn from_number(number: NumberInner) -> NumberInner {
    (number << 1) | 1
}

pub const fn to_number(number: NumberInner) -> NumberInner {
    number >> 1
}

pub const fn from_i64(number: i64) -> NumberInner {
    from_number(number)
}

pub const fn to_i64(number: NumberInner) -> i64 {
    to_number(number)
}

pub const fn from_f64(number: f64) -> NumberInner {
    from_number(number as _)
}

pub const fn to_f64(number: NumberInner) -> f64 {
    to_number(number) as _
}

pub const fn from_raw(raw: u64) -> NumberInner {
    raw as _
}

pub const fn to_raw(number: NumberInner) -> u64 {
    number as _
}

pub const fn power(x: NumberInner, y: NumberInner) -> NumberInner {
    x.pow(y as _)
}