midenc_hir/dialects/
builtin.rs

1mod builders;
2mod ops;
3
4use alloc::boxed::Box;
5
6pub use self::{
7    builders::{BuiltinOpBuilder, ComponentBuilder, FunctionBuilder, ModuleBuilder, WorldBuilder},
8    ops::*,
9};
10use crate::{
11    AttributeValue, Builder, Dialect, DialectInfo, DialectRegistration, OperationRef, SourceSpan,
12    Type,
13};
14
15#[derive(Debug)]
16pub struct BuiltinDialect {
17    info: DialectInfo,
18}
19
20impl BuiltinDialect {
21    #[inline]
22    pub fn num_registered(&self) -> usize {
23        self.registered_ops().len()
24    }
25}
26
27impl DialectRegistration for BuiltinDialect {
28    const NAMESPACE: &'static str = "builtin";
29
30    #[inline]
31    fn init(info: DialectInfo) -> Self {
32        Self { info }
33    }
34
35    fn register_operations(info: &mut DialectInfo) {
36        info.register_operation::<ops::World>();
37        info.register_operation::<ops::Component>();
38        info.register_operation::<ops::Module>();
39        info.register_operation::<ops::Function>();
40        info.register_operation::<ops::GlobalVariable>();
41        info.register_operation::<ops::GlobalSymbol>();
42        info.register_operation::<ops::Segment>();
43        info.register_operation::<ops::UnrealizedConversionCast>();
44        info.register_operation::<ops::Ret>();
45        info.register_operation::<ops::RetImm>();
46    }
47}
48
49impl Dialect for BuiltinDialect {
50    #[inline]
51    fn info(&self) -> &DialectInfo {
52        &self.info
53    }
54
55    fn materialize_constant(
56        &self,
57        _builder: &mut dyn Builder,
58        _attr: Box<dyn AttributeValue>,
59        _ty: &Type,
60        _span: SourceSpan,
61    ) -> Option<OperationRef> {
62        None
63    }
64}