1#![no_std]
2#[macro_use]
3extern crate alloc;
4extern crate serde;
5extern crate webassembly;
6
7mod compiler;
8mod core;
9mod interpreter;
10mod parser;
11mod util;
12
13pub use crate::core::common::*;
14pub use crate::core::view::*;
15use crate::core::wast::Wast;
16pub use crate::core::Instruction;
17pub use crate::core::Program;
18pub use crate::core::ProgramView;
19pub use crate::interpreter::*;
20
21pub fn parse<'p>(input: &'p [u8]) -> Result<core::ProgramView<'p>, &'static str> {
22 parser::wasm::wasm_module(input)
23}
24
25pub fn parse_wast<'p>(input: &'p [u8]) -> Result<Wast, &'static str> {
26 parser::wast::wast_file(input)
27}
28
29#[no_mangle]
33#[cfg(feature = "c_extern")]
34pub unsafe fn c_parse_web_assembly(ptr_wasm_bytes: *mut u8, len: usize) -> core::Program {
35 let wasm_bytes = Vec::from_raw_parts(ptr_wasm_bytes, len, len);
36 parser::wasm_module(&wasm_bytes).unwrap().to_owned()
37}