llvm_assembler/formats/llvm/reader/
mod.rs1use gaia_types::Result;
2use oak_core::{Builder, ParseSession};
3use oak_llvm_ir::{LLirBuilder, LLvmLanguage, LLirRoot};
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 {
19 language: LLvmLanguage::default(),
20 }
21 }
22
23 pub fn read(&self, source: &str) -> Result<LLirRoot> {
25 let builder = LLirBuilder::new(&self.language);
26 let mut session_cache = ParseSession::<LLvmLanguage>::default();
27 let diagnostics = builder.build(source, &[], &mut session_cache);
28
29 match diagnostics.result {
30 Ok(root) => Ok(root),
31 Err(e) => {
32 let message = e.to_string();
33 Err(gaia_types::GaiaError::custom_error(message))
34 }
35 }
36 }
37}
38
39pub fn parse(source: &str) -> Result<LLirRoot> {
41 LLvmReader::new().read(source)
42}