melior/dialect/
registry.rs1use mlir_sys::{mlirDialectRegistryCreate, mlirDialectRegistryDestroy, MlirDialectRegistry};
2
3#[derive(Debug)]
5pub struct DialectRegistry {
6 raw: MlirDialectRegistry,
7}
8
9impl DialectRegistry {
10 pub fn new() -> Self {
12 Self {
13 raw: unsafe { mlirDialectRegistryCreate() },
14 }
15 }
16
17 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(®istry);
54
55 let context = Context::new();
56 let count = context.registered_dialect_count();
57
58 context.append_dialect_registry(®istry);
59
60 assert_eq!(context.registered_dialect_count() - count, 1);
61 }
62}