Skip to main content

chipi_core/backend/
cpp.rs

1//! C++ decoder backend.
2//!
3//! Generates a single-header C++ decoder/disassembler from a validated
4//! `.chipi` definition.
5
6use crate::codegen_cpp;
7use crate::config::{CppOptions, GenTarget};
8use crate::tree;
9use crate::types::ValidatedDef;
10
11use super::{CodegenBackend, CodegenError};
12
13/// The C++ code generation backend.
14pub struct CppBackend;
15
16impl CodegenBackend for CppBackend {
17    fn lang(&self) -> &str {
18        "cpp"
19    }
20
21    fn generate(&self, ir: &ValidatedDef, config: &GenTarget) -> Result<String, CodegenError> {
22        let tree = tree::build_tree(ir);
23        let default_opts = CppOptions::default();
24        let opts = config.lang_options.as_cpp().unwrap_or(&default_opts);
25        Ok(codegen_cpp::generate_cpp_code(
26            ir,
27            &tree,
28            opts,
29            &config.type_map,
30        ))
31    }
32
33    fn formatter_command(&self) -> Option<&[&str]> {
34        Some(&["clang-format", "-i"])
35    }
36}