use crate::ast::TopLevel;
use crate::ir::AnalysisResult;
mod body;
mod builtins;
mod effects;
mod flatten;
mod lists;
mod maps;
mod module;
#[cfg(test)]
mod tests;
mod types;
mod wat_helper;
pub use flatten::flatten_multimodule;
#[derive(Debug)]
pub enum WasmGcError {
Unimplemented(&'static str),
Validation(String),
}
impl std::fmt::Display for WasmGcError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Unimplemented(what) => write!(f, "wasm-gc: not implemented yet — {what}"),
Self::Validation(msg) => write!(f, "wasm-gc: validation failed — {msg}"),
}
}
}
impl std::error::Error for WasmGcError {}
pub fn compile_to_wasm_gc(
items: &[TopLevel],
_analysis: Option<&AnalysisResult>,
) -> Result<Vec<u8>, WasmGcError> {
module::emit_module(items, None)
}
pub fn compile_to_wasm_gc_with_handler(
items: &[TopLevel],
_analysis: Option<&AnalysisResult>,
handler: Option<&str>,
) -> Result<Vec<u8>, WasmGcError> {
module::emit_module(items, handler)
}