public:
PyRegionList(PyOperationRef operation) : operation(std::move(operation)) {}
+ PyRegionIterator dunderIter() {
+ operation->checkValid();
+ return PyRegionIterator(operation);
+ }
+
intptr_t dunderLen() {
operation->checkValid();
return mlirOperationGetNumRegions(operation->get());
static void bind(py::module &m) {
py::class_<PyRegionList>(m, "RegionSequence", py::module_local())
.def("__len__", &PyRegionList::dunderLen)
+ .def("__iter__", &PyRegionList::dunderIter)
.def("__getitem__", &PyRegionList::dunderGetItem);
}
# CHECK: .verify = True
print(f".verify = {module.operation.verify()}")
- # Get the regions and blocks from the default collections.
- default_regions = list(op.regions)
- default_blocks = list(default_regions[0])
+ # Get the blocks from the default collection.
+ default_blocks = list(regions[0])
# They should compare equal regardless of how obtained.
- assert default_regions == regions
assert default_blocks == blocks
# Should be able to get the operations from either the named collection
# CHECK: OP 1: func.return
walk_operations("", op)
+ # CHECK: Region iter: <mlir.{{.+}}.RegionIterator
+ # CHECK: Block iter: <mlir.{{.+}}.BlockIterator
+ # CHECK: Operation iter: <mlir.{{.+}}.OperationIterator
+ print(" Region iter:", iter(op.regions))
+ print(" Block iter:", iter(op.regions[0]))
+ print("Operation iter:", iter(op.regions[0].blocks[0]))
+
# Verify index based traversal of the op/region/block hierarchy.
# CHECK-LABEL: TEST: testTraverseOpRegionBlockIndices