Skip to main content

melior/dialect/
registry.rs

1use mlir_sys::{mlirDialectRegistryCreate, mlirDialectRegistryDestroy, MlirDialectRegistry};
2
3/// A dialect registry.
4#[derive(Debug)]
5pub struct DialectRegistry {
6    raw: MlirDialectRegistry,
7}
8
9impl DialectRegistry {
10    /// Creates a dialect registry.
11    pub fn new() -> Self {
12        Self {
13            raw: unsafe { mlirDialectRegistryCreate() },
14        }
15    }
16
17    /// Converts a dialect registry into a raw object.
18    pub const fn to_raw(&self) -> MlirDialectRegistry {
19        self.raw
20    }
21}
22
23impl Drop for DialectRegistry {
24    fn drop(&mut self) {
25        unsafe { mlirDialectRegistryDestroy(self.raw) };
26    }
27}
28
29impl Default for DialectRegistry {
30    fn default() -> Self {
31        Self::new()
32    }
33}
34
35#[cfg(test)]
36mod tests {
37    use super::*;
38    use crate::{context::Context, dialect::DialectHandle};
39
40    #[test]
41    fn new() {
42        DialectRegistry::new();
43    }
44
45    #[test]
46    fn register_all_dialects() {
47        DialectRegistry::new();
48    }
49
50    #[test]
51    fn register_dialect() {
52        let registry = DialectRegistry::new();
53        DialectHandle::func().insert_dialect(&registry);
54
55        let context = Context::new();
56        let count = context.registered_dialect_count();
57
58        context.append_dialect_registry(&registry);
59
60        assert_eq!(context.registered_dialect_count() - count, 1);
61    }
62}