1mod display;
2pub mod execution;
3mod parser;
4mod structured;
5
6use execution::{AmlExecutionError, DataObject, ExecutionContext};
7use parser::UnresolvedDataObject;
8
9pub use parser::{AmlCode, AmlParseError};
10use structured::StructuredAml;
11
12#[derive(Debug, Clone)]
13#[allow(dead_code)]
14pub struct Aml {
15 code: AmlCode,
16 structured: StructuredAml,
17}
18
19impl Aml {
20 pub fn parse(body: &[u8]) -> Result<Self, AmlParseError> {
21 let code = parser::parse_aml(body)?;
22 Ok(Self {
23 structured: StructuredAml::parse(&code),
24 code,
25 })
26 }
27
28 #[allow(dead_code)]
29 pub fn code(&self) -> &AmlCode {
30 &self.code
31 }
32
33 #[allow(dead_code)]
34 pub fn structured(&self) -> &StructuredAml {
35 &self.structured
36 }
37
38 #[allow(dead_code)]
39 pub fn execute(
40 &self,
41 ctx: &mut ExecutionContext,
42 label: &str,
43 args: &[UnresolvedDataObject],
44 ) -> Result<DataObject, AmlExecutionError> {
45 ctx.execute(&self.structured, label, args)
46 }
47}