clr_assembler/formats/msil/
mod.rs1use gaia_types::Result;
2use oak_core::{source::ToSource, Builder, ParseSession};
3pub use oak_msil::{ast::*, builder::MsilBuilder, language::MsilLanguage, parser::MsilParser};
4
5pub mod converter;
7
8#[derive(Debug, Clone, Copy, Default)]
10pub struct MsilReadConfig {
11 pub include_debug_info: bool,
13}
14
15pub fn parse(source: &str) -> Result<MsilRoot> {
17 let language = MsilLanguage::default();
18 let builder = MsilBuilder::new(&language);
19 let mut session_cache = ParseSession::<MsilLanguage>::default();
20 let session = builder.build(source, &[], &mut session_cache);
21 if session.has_errors() {
22 return Err(gaia_types::GaiaError::custom_error("MSIL parse error"));
23 }
24 Ok(session.result.unwrap())
25}
26
27pub fn to_source(root: &MsilRoot) -> String {
29 root.to_source_string()
30}
31
32pub fn program_to_source(program: &crate::program::ClrProgram) -> String {
34 let root = converter::ClrToMsilConverter::convert(program);
35 to_source(&root)
36}
37
38pub fn to_doc(root: &MsilRoot) -> String {
40 use oak_pretty_print::{AsDocument, FormatConfig};
41 let doc = root.as_document();
42 let config = FormatConfig::default();
43 doc.render(config)
44}