private var parent: ANode
private var items = new Array[E]
redef fun iterator do return items.iterator
+ redef fun reverse_iterator do return items.reverse_iterator
redef fun length do return items.length
redef fun is_empty do return items.is_empty
redef fun push(e)
# 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 expression used as the collection to iterate on
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
end
# A `with` statement
# The starting quad (`::`)
var n_quad: nullable TQuad = null is writable
- # The list of quad-separated project/group identifiers
+ # The list of quad-separated package/group identifiers
var n_path = new ANodes[TId](self)
# The final module identifier
# The starting quad (`::`)
var n_quad: nullable TQuad = null is writable
- # The list of quad-separated project/group/module identifiers
+ # The list of quad-separated package/group/module identifiers
var n_id = new ANodes[TId](self)
# A class identifier