onion-vm 0.3.0

Virtual machine runtime for the Onion programming language with async execution and garbage collection
Documentation
use rustc_hash::FxHashMap;

use crate::types::{
    object::{OnionObject, OnionStaticObject},
    pair::OnionPair,
    tuple::OnionTuple,
};

pub mod context;
pub mod definition;
pub mod launcher;
pub(crate) mod native;
pub mod runnable;
pub mod vm_instructions;
pub mod parameter;

pub fn build_dict_from_hashmap(
    hashmap: &FxHashMap<String, OnionStaticObject>,
) -> OnionStaticObject {
    let mut pairs = vec![];
    for (key, value) in hashmap {
        pairs.push(OnionPair::new_static(
            &OnionObject::String(key.clone().into()).stabilize(),
            &value,
        ));
    }
    OnionTuple::new_static_no_ref(&pairs)
}

pub fn build_dict_from_hashmap_weak(hashmap: &FxHashMap<String, OnionObject>) -> OnionStaticObject {
    let mut pairs = vec![];
    for (key, value) in hashmap {
        pairs.push(
            OnionObject::Pair(
                OnionPair::new(OnionObject::String(key.clone().into()), value.clone()).into(),
            )
            .consume_and_stabilize(),
        );
    }
    OnionTuple::new_static_no_ref(&pairs)
}