use melior::{
Context,
ir::{Attribute, AttributeLike, Identifier},
};
use mlir_sys::MlirAttribute;
pub mod array;
pub type NamedAttribute<'c> = (Identifier<'c>, Attribute<'c>);
pub(crate) fn null_attr() -> MlirAttribute {
MlirAttribute {
ptr: std::ptr::null_mut(),
}
}
pub(crate) fn rebuild_array_attr<'c>(
context: &'c Context,
attr: Attribute<'c>,
) -> array::ArrayAttribute<'c> {
let elements = (0..unsafe { mlir_sys::mlirArrayAttrGetNumElements(attr.to_raw()) })
.map(|idx| unsafe {
Attribute::from_raw(mlir_sys::mlirArrayAttrGetElement(attr.to_raw(), idx))
})
.collect::<Vec<_>>();
array::ArrayAttribute::new(context, &elements)
}