portal_pc_waffle_backend/
lib.rs1#![no_std]
3#![forbid(unsafe_code)]
4#![allow(dead_code)]
5
6#[macro_use]
7extern crate alloc;
8
9use alloc::vec::Vec;
10use anyhow::Result;
11
12pub use waffle_entity as entity;
14pub use waffle_ir as ir;
15pub use waffle_ir::*;
16pub use waffle_ir::cfg::CFGInfo;
17pub use waffle_passes_shared;
18
19pub mod backend;
20pub use backend::*;
21
22pub fn to_wasm_bytes(module: &Module<'_>) -> Result<Vec<u8>> {
24 backend::compile(module).map(|m| m.finish())
25}
26
27pub fn to_encoded_module(module: &Module<'_>) -> Result<wasm_encoder::Module> {
29 backend::compile(module)
30}
31
32pub trait ModuleExt<'a>{
33 fn module(&self) -> &Module<'a>;
34 fn to_wasm_bytes(&self) -> Result<Vec<u8>>{
35 return to_wasm_bytes(self.module());
36 }
37 fn to_encoded_module(&self) -> Result<wasm_encoder::Module>{
38 return to_encoded_module(self.module());
39 }
40}
41impl<'a> ModuleExt<'a> for Module<'a>{
42 fn module(&self) -> &Module<'a> {
43 self
44 }
45}
46
47#[cfg(test)]
48mod test {
49 use super::*;
50 #[test]
51 fn empty_module_valid() {
52 let module = Module::empty();
53 let _ = module.to_wasm_bytes().unwrap();
54 }
55}