use crate::abi::Abi;
use lamina_platform::TargetOperatingSystem;
pub struct WasmABI {
target_os: TargetOperatingSystem,
}
impl WasmABI {
pub fn new(target_os: TargetOperatingSystem) -> Self {
Self { target_os }
}
pub fn mangle_function_name(&self, name: &str) -> String {
name.to_string()
}
pub fn get_print_import(&self) -> &'static str {
"(import \"console\" \"log\" (func $log (param i64)))"
}
pub fn get_wasm_type(&self, ty: &lamina_mir::MirType) -> &'static str {
match ty {
lamina_mir::MirType::Scalar(lamina_mir::ScalarType::I64) => "i64",
_ => "i64",
}
}
pub fn generate_global_decl(&self, index: usize) -> String {
format!(" (global $vreg{} (mut i64) (i64.const 0))", index)
}
pub fn generate_local_decl(&self, index: usize) -> String {
format!(" (local $l{} i64)", index)
}
}
impl Abi for WasmABI {
fn target_os(&self) -> TargetOperatingSystem {
self.target_os
}
fn mangle_function_name(&self, name: &str) -> String {
WasmABI::mangle_function_name(self, name)
}
}