add List.releaseExcessCapacity builtin

This commit is contained in:
Brendan Hansknecht 2023-03-13 17:34:18 -07:00
parent 40b50b0091
commit 1319ba4844
No known key found for this signature in database
GPG key ID: 0EA784685083E75B
13 changed files with 177 additions and 3 deletions

View file

@ -555,6 +555,46 @@ impl<'a> LowLevelCall<'a> {
backend.call_host_fn_after_loading_args(bitcode::LIST_RESERVE, 7, false);
}
ListReleaseExcessCapacity => {
// List.releaseExcessCapacity : List elem -> List elem
let list: Symbol = self.arguments[0];
let elem_layout = unwrap_list_elem_layout(self.ret_layout_raw);
let elem_layout = backend.layout_interner.get(elem_layout);
let (elem_width, elem_align) =
elem_layout.stack_size_and_alignment(backend.layout_interner, TARGET_INFO);
// Zig arguments Wasm types
// (return pointer) i32
// list: RocList i64, i32
// alignment: u32 i32
// element_width: usize i32
// update_mode: UpdateMode i32
// return pointer and list
backend.storage.load_symbols_for_call(
backend.env.arena,
&mut backend.code_builder,
&[list],
self.ret_symbol,
&WasmLayout::new(backend.layout_interner, self.ret_layout),
CallConv::Zig,
);
backend.code_builder.i32_const(elem_align as i32);
backend.code_builder.i32_const(elem_width as i32);
backend.code_builder.i32_const(UPDATE_MODE_IMMUTABLE);
backend.call_host_fn_after_loading_args(
bitcode::LIST_RELEASE_EXCESS_CAPACITY,
6,
false,
);
}
ListAppendUnsafe => {
// List.append : List elem, elem -> List elem