Skip to main content

jvm_assembler/formats/jasm/
mod.rs

1use gaia_types::Result;
2use oak_core::{source::ToSource, Builder, ParseSession};
3use oak_jasm::{JasmBuilder, JasmLanguage, JasmRoot};
4use oak_pretty_print::{AsDocument, FormatConfig, Formatter};
5
6pub fn parse(source: &str) -> Result<JasmRoot> {
7    let language = JasmLanguage::default();
8    let builder = JasmBuilder::new(&language);
9    let mut session_cache = ParseSession::<JasmLanguage>::default();
10    let session = builder.build(source, &[], &mut session_cache);
11    if session.has_errors() {
12        // TODO: convert oak diagnostics to gaia diagnostics
13        return Err(gaia_types::GaiaError::custom_error("JASM parse error"));
14    }
15    Ok(session.result.unwrap())
16}
17
18pub fn to_source(root: &JasmRoot) -> String {
19    root.to_source_string()
20}
21
22pub fn to_doc(root: &JasmRoot) -> String {
23    let doc = root.as_document();
24    let config = FormatConfig::default();
25    doc.render(config)
26}