1use anyhow::Result;
2
3pub mod lexer;
5pub mod parser;
6
7pub mod errors;
9pub mod macros;
10pub mod messages;
11
12pub mod ast;
14pub mod astnode;
15pub mod dynsym;
16pub mod instruction;
17pub mod syscall;
18
19pub mod header;
21pub mod program;
22pub mod section;
23
24pub mod debuginfo;
26
27#[cfg(target_arch = "wasm32")]
29pub mod wasm;
30
31pub use self::{errors::CompileError, lexer::tokenize, parser::parse_tokens, program::Program};
32
33pub fn assemble(source: &str) -> Result<Vec<u8>, Vec<CompileError>> {
34 let tokens = match tokenize(source) {
35 Ok(tokens) => tokens,
36 Err(errors) => {
37 return Err(errors);
38 }
39 };
40 let parse_result = match parse_tokens(&tokens) {
41 Ok(program) => program,
42 Err(errors) => {
43 return Err(errors);
44 }
45 };
46 let program = Program::from_parse_result(parse_result);
47 let bytecode = program.emit_bytecode();
48 Ok(bytecode)
49}