llvm_assembler/formats/llvm/reader/
mod.rs1use gaia_types::Result;
2use oak_core::{Builder, ParseSession};
3use oak_llvm_ir::{LLirBuilder, LLirRoot, LLvmLanguage};
4
5pub struct LLvmReader {
7 language: LLvmLanguage,
8}
9
10impl Default for LLvmReader {
11 fn default() -> Self {
12 Self::new()
13 }
14}
15
16impl LLvmReader {
17 pub fn new() -> Self {
18 Self { language: LLvmLanguage::default() }
19 }
20
21 pub fn read(&self, source: &str) -> Result<LLirRoot> {
23 let builder = LLirBuilder::new(&self.language);
24 let mut session_cache = ParseSession::<LLvmLanguage>::default();
25 let diagnostics = builder.build(source, &[], &mut session_cache);
26
27 match diagnostics.result {
28 Ok(root) => Ok(root),
29 Err(e) => {
30 let message = e.to_string();
31 Err(gaia_types::GaiaError::custom_error(message))
32 }
33 }
34 }
35}
36
37pub fn parse(source: &str) -> Result<LLirRoot> {
39 LLvmReader::new().read(source)
40}