+ # Part before the loop
+ var before = v.builder.make_block
+ nblock.add before
+
+ # The loop
+ var nloop = v.builder.make_loop
+ nloop.break_mark = escapemark
+ nblock.add nloop
+
+ # Part before the body inside the loop
+ var begin = v.builder.make_block
+ nloop.add begin
+
+ # The `do` block with then user code
+ var ndo = v.builder.make_do
+ ndo.break_mark = escapemark.continue_mark
+ nloop.add ndo
+
+ ndo.add self.n_block.as(not null)
+
+ # Fill up each part
+ for g in n_groups do
+ g.transform_in(v, before, begin, nloop, nblock, escapemark)
+ end
+
+ replace_with(nblock)
+ end
+end
+
+redef class AForGroup
+ private fun transform_in(v: TransformVisitor, before, begin, next, finish: AExpr, escapemark: EscapeMark)
+ do