nanvm_lib/js/
js_object.rs1use 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}