///|
fn[A] unsafe_cast_to_ptr(x : A) -> Ptr = "%identity"
///|
fn[A] moonbit_reinterpret_as_pointer(x : A) -> Ptr {
let ptr : Ptr = unsafe_cast_to_ptr(x)
moonbit_decref(ptr)
ptr
}
///|
fn unsafe_bytes_to_string(bytes : Bytes) -> String = "%identity"
///|
const UInt16_elem_size_shift = 1
///|
///
/// Access moved bytes is undefined behavior
///
/// change MoonBit header's meta data to UInt16 array and return as String type
///
pub fn move_bytes_to_string(bytes : Bytes) -> String {
let ptr = moonbit_reinterpret_as_pointer(bytes)
let header = moonbit_make_array_header(
Moonbit_BLOCK_KIND_VAL_ARRAY,
UInt16_elem_size_shift,
bytes.length() >> UInt16_elem_size_shift,
)
moonbit_set_array_header(ptr, header)
unsafe_bytes_to_string(bytes)
}