nanvm_lib/js/
js_object.rs

1use crate::{
2    common::bit_subset64::BitSubset64,
3    js::any::Any,
4    mem::{
5        block::Block,
6        flexible_array::FlexibleArray,
7        manager::{Dealloc, Manager},
8        mut_ref::MutRef,
9        ref_::Ref,
10    },
11};
12
13use super::{bitset::OBJECT, js_string::JsStringRef, ref_cast::RefCast};
14
15pub type Property<D> = (JsStringRef<D>, Any<D>);
16
17pub type JsObject<D> = FlexibleArray<Property<D>>;
18
19pub type JsObjectRef<D> = Ref<JsObject<D>, D>;
20
21pub type JsObjectMutRef<D> = MutRef<JsObject<D>, D>;
22
23impl<D: Dealloc> RefCast<D> for JsObject<D> {
24    const REF_SUBSET: BitSubset64<*const Block<Self, D>> = OBJECT.cast();
25}
26
27pub fn new_object<M: Manager, I: ExactSizeIterator<Item = Property<M::Dealloc>>>(
28    m: M,
29    i: impl IntoIterator<IntoIter = I>,
30) -> JsObjectMutRef<M::Dealloc> {
31    m.flexible_array_new(i)
32}