nanvm_lib/js/
js_string.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::{bitset::STRING, ref_cast::RefCast};
13
14pub type JsString = FlexibleArray<u16>;
15
16pub type JsStringRef<D> = Ref<JsString, D>;
17
18pub type JsStringMutRef<D> = MutRef<JsString, D>;
19
20impl<D: Dealloc> RefCast<D> for JsString {
21    const REF_SUBSET: BitSubset64<*const Block<JsString, D>> = STRING.cast();
22}
23
24pub fn new_string<M: Manager, I: ExactSizeIterator<Item = u16>>(
25    m: M,
26    i: impl IntoIterator<IntoIter = I>,
27) -> JsStringMutRef<M::Dealloc> {
28    m.flexible_array_new(i)
29}