mod alloc;
mod indices;
mod io;
mod lists;
mod maps;
mod strings;
mod vectors;
use wasm_encoder::Function;
use super::value::*;
pub use indices::{RuntimeFuncIndices, emit_base_type_section, lookup_type_index, rt_type_index};
pub const IO_SCRATCH_SIZE: u32 = 128;
pub(crate) const IO_IOVEC: u32 = 0;
pub(crate) const IO_NWRITTEN: u32 = 8;
pub(crate) const IO_INT_BUF: u32 = 16;
pub const NEWLINE_ADDR: u32 = 40;
pub(crate) const IO_FLOAT_BUF: u32 = 48;
#[allow(clippy::vec_init_then_push)]
pub fn emit_runtime_functions(rt: &RuntimeFuncIndices) -> Vec<Function> {
let mut funcs = Vec::new();
funcs.push(alloc::emit_alloc()); funcs.push(alloc::emit_truncate_to_mark()); funcs.push(alloc::emit_collect_begin()); funcs.push(alloc::emit_collect_end(rt)); funcs.push(alloc::emit_rebase_i32()); funcs.push(alloc::emit_retain_i32(rt)); funcs.push(alloc::emit_wrap(rt, OBJ_WRAPPER)); funcs.push(alloc::emit_wrap_f64(rt)); funcs.push(alloc::emit_wrap_i32(rt)); funcs.push(alloc::emit_unwrap_i64()); funcs.push(alloc::emit_unwrap_f64()); funcs.push(alloc::emit_unwrap_i32()); funcs.push(alloc::emit_obj_kind()); funcs.push(alloc::emit_obj_tag()); funcs.push(alloc::emit_obj_meta()); funcs.push(alloc::emit_obj_field_i64()); funcs.push(alloc::emit_obj_field_f64()); funcs.push(alloc::emit_obj_field_i32()); funcs.push(lists::emit_list_cons_i64(rt)); funcs.push(lists::emit_list_cons_f64(rt)); funcs.push(io::emit_int_to_str()); funcs.push(io::emit_float_to_str()); funcs.push(io::emit_fd_write_buf(rt)); funcs.push(strings::emit_str_eq()); funcs.push(strings::emit_str_concat(rt)); funcs.push(strings::emit_i64_to_str_obj(rt)); funcs.push(strings::emit_f64_to_str_obj(rt)); funcs.push(lists::emit_list_take(rt)); funcs.push(lists::emit_list_drop()); funcs.push(lists::emit_list_concat(rt)); funcs.push(lists::emit_list_reverse(rt)); funcs.push(lists::emit_list_contains(rt)); funcs.push(lists::emit_list_zip(rt)); funcs.push(maps::emit_map_get(rt)); funcs.push(maps::emit_map_set(rt)); funcs.push(maps::emit_map_has(rt)); funcs.push(maps::emit_map_keys(rt)); funcs.push(maps::emit_map_entries(rt)); funcs.push(vectors::emit_vec_from_list(rt)); funcs.push(vectors::emit_vec_get(rt)); funcs.push(vectors::emit_vec_len()); funcs.push(vectors::emit_vec_set(rt)); funcs.push(vectors::emit_vec_new(rt)); funcs.push(vectors::emit_vec_to_list(rt)); funcs.push(strings::emit_str_len()); funcs.push(strings::emit_str_byte_len()); funcs.push(strings::emit_str_find(rt)); funcs.push(strings::emit_str_starts_with(rt)); funcs.push(strings::emit_str_ends_with(rt)); funcs.push(strings::emit_str_contains(rt)); funcs.push(strings::emit_str_char_at(rt)); funcs.push(strings::emit_char_from_code(rt)); funcs.push(strings::emit_char_to_code()); funcs.push(strings::emit_byte_to_hex(rt)); funcs.push(strings::emit_byte_from_hex(rt)); funcs.push(strings::emit_str_trim(rt)); funcs.push(strings::emit_str_slice(rt)); funcs.push(strings::emit_str_chars(rt)); funcs.push(strings::emit_str_split(rt)); funcs.push(strings::emit_str_join(rt)); funcs.push(strings::emit_str_replace(rt)); funcs.push(strings::emit_str_to_lower(rt)); funcs.push(strings::emit_str_to_upper(rt)); funcs.push(strings::emit_int_from_str(rt)); funcs.push(strings::emit_float_from_str(rt));
funcs
}