mathic 0.2.0

A compiler with builtin support of symbolic operations, built with LLVM/MLIR
pub mod symbolic_dialect {
    use melior::{dialect::DialectRegistry, pass::Pass};
    use mlir_sys::{MlirContext, MlirDialectRegistry, MlirPass, MlirType};

    #[link(name = "dialect_bindings")]
    unsafe extern "C" {
        fn mlirCreateSymbolicExtractEval() -> MlirPass;
        fn mlirCreateSymbolicToArith() -> MlirPass;
        fn mlirInsertSymbolicDialect(registry: MlirDialectRegistry);
        pub fn getSymExprType(ctx: MlirContext, inner_type: MlirType, is_signed: bool) -> MlirType;
    }

    pub fn register_symbolic_dialect(registry: &DialectRegistry) {
        unsafe {
            mlirInsertSymbolicDialect(registry.to_raw());
        }
    }
    pub fn create_symbolic_to_arith() -> Pass {
        unsafe { Pass::from_raw_fn(mlirCreateSymbolicToArith) }
    }
    pub fn create_symbolic_extract_eval() -> Pass {
        unsafe { Pass::from_raw_fn(mlirCreateSymbolicExtractEval) }
    }
}