nanvm_lib/js/
js_array.rs

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