- readable writable var _n_kwfor: TKwfor
- readable var _n_ids: ANodes[TId] = new ANodes[TId](self)
- readable writable var _n_expr: AExpr
- readable writable var _n_kwdo: TKwdo
- readable writable var _n_block: nullable AExpr = null
- init do end
+
+ # The `for` keyword
+ var n_kwfor: TKwfor is writable, noinit
+
+ # The list of groups to iterate
+ var n_groups = new ANodes[AForGroup](self)
+
+ # The `do` keyword
+ var n_kwdo: TKwdo is writable, noinit
+
+ # The body of the loop
+ var n_block: nullable AExpr = null is writable
+end
+
+# A collection iterated by a for, its automatic variables and its implicit iterator.
+#
+# Standard `for` iterate on a single collection.
+# Multiple `for` can iterate on more than one collection at once.
+class AForGroup
+ super Prod
+
+ # The list of name of the automatic variables
+ var n_ids = new ANodes[TId](self)
+
+ # The `in` keyword
+ var n_kwin: TKwin is writable, noinit
+
+ # The expression used as the collection to iterate on
+ var n_expr: AExpr is writable, noinit
+end
+
+# A `with` statement
+class AWithExpr
+ super AExpr
+ super ALabelable
+
+ # The `with` keyword
+ var n_kwwith: TKwwith is writable, noinit
+
+ # The expression used to get the value to control
+ var n_expr: AExpr is writable, noinit
+
+ # The `do` keyword
+ var n_kwdo: TKwdo is writable, noinit
+
+ # The body of the loop
+ var n_block: nullable AExpr = null is writable