stak-vm 0.10.21

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

#[inline]
pub const fn box_cons(cons: u64) -> u64 {
    cons << 1
}

#[inline]
pub const fn unbox_cons(cons: u64) -> u64 {
    cons >> 1
}

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

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

#[inline]
pub const fn to_number(number: NumberInner) -> NumberInner {
    number >> 1
}

#[inline]
pub const fn from_i64(number: i64) -> NumberInner {
    from_number(number)
}

#[inline]
pub const fn to_i64(number: NumberInner) -> i64 {
    to_number(number)
}

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

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

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

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