Skip to main content

clr_assembler/formats/msil/
mod.rs

1use 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;
6
7/// MSIL 读取配置
8#[derive(Debug, Clone, Copy, Default)]
9pub struct MsilReadConfig {
10    /// 是否包含调试信息
11    pub include_debug_info: bool,
12}
13
14pub fn parse(source: &str) -> Result<MsilRoot> {
15    let language = MsilLanguage::default();
16    let builder = MsilBuilder::new(&language);
17    let mut session_cache = ParseSession::<MsilLanguage>::default();
18    let session = builder.build(source, &[], &mut session_cache);
19    if session.has_errors() {
20        return Err(gaia_types::GaiaError::custom_error("MSIL parse error"));
21    }
22    Ok(session.result.unwrap())
23}
24
25pub fn to_source(root: &MsilRoot) -> String {
26    root.to_source_string()
27}
28
29pub fn to_doc(root: &MsilRoot) -> String {
30    use oak_pretty_print::{AsDocument, FormatConfig};
31    let doc = root.as_document();
32    let config = FormatConfig::default();
33    doc.render(config)
34}