syntax: enable a generalized for with iterate
[nit.git] / src / parser / parser_prod.nit
index 08eb1c1..655a8ab 100644 (file)
@@ -4,6 +4,7 @@ package parser_prod
 
 import lexer
 intrude import parser_nodes
+private import tables
 
 redef class ANode
        # Parent of the node in the AST
@@ -29,15 +30,10 @@ redef class ANode
        # Visit all nodes in order.
        # Thus, call "v.visit(e)" for each node e
        fun visit_all(v: Visitor) is abstract
-
-       # Visit all nodes in reverse order.
-       # Thus, call "v.visit(e)" for each node e starting from the last child
-       fun visit_all_reverse(v: Visitor) is abstract
 end
 
 redef class Token
        redef fun visit_all(v: Visitor) do end
-       redef fun visit_all_reverse(v: Visitor) do end
        redef fun replace_child(old_child: ANode, new_child: nullable ANode) do end
 end
 
@@ -72,26 +68,18 @@ class Visitor
 end
 
 redef class AModule
-    redef fun n_packagedecl=(n)
-    do
-        _n_packagedecl = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_amodule (
-            n_packagedecl: nullable APackagedecl,
+            n_moduledecl: nullable AModuledecl,
             n_imports: Collection[Object], # Should be Collection[AImport]
             n_classdefs: Collection[Object] # Should be Collection[AClassdef]
     )
     do
         empty_init
-        _n_packagedecl = n_packagedecl
-       if n_packagedecl != null then
-               n_packagedecl.parent = self
+        _n_moduledecl = n_moduledecl
+       if n_moduledecl != null then
+               n_moduledecl.parent = self
        end
        for n in n_imports do
                assert n isa AImport
@@ -107,13 +95,13 @@ redef class AModule
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        if _n_packagedecl == old_child then
+        if _n_moduledecl == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa APackagedecl
-                _n_packagedecl = new_child
+               assert new_child isa AModuledecl
+                _n_moduledecl = new_child
            else
-               _n_packagedecl = null
+               _n_moduledecl = null
             end
             return
        end
@@ -145,8 +133,8 @@ redef class AModule
 
     redef fun visit_all(v: Visitor)
     do
-        if _n_packagedecl != null then
-            v.enter_visit(_n_packagedecl.as(not null))
+        if _n_moduledecl != null then
+            v.enter_visit(_n_moduledecl.as(not null))
         end
             for n in _n_imports do
                 v.enter_visit(n)
@@ -155,52 +143,13 @@ redef class AModule
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_packagedecl != null then
-            v.enter_visit(_n_packagedecl.as(not null))
-        end
-       do
-           var i = _n_imports.length
-            while i >= 0 do
-                v.enter_visit(_n_imports[i])
-               i = i - 1
-           end
-       end
-       do
-           var i = _n_classdefs.length
-            while i >= 0 do
-                v.enter_visit(_n_classdefs[i])
-               i = i - 1
-           end
-       end
-    end
 end
-redef class APackagedecl
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwpackage=(n)
-    do
-        _n_kwpackage = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
+redef class AModuledecl
     private init empty_init do end
 
-    init init_apackagedecl (
+    init init_amoduledecl (
             n_doc: nullable ADoc,
-            n_kwpackage: nullable TKwpackage,
+            n_kwmodule: nullable TKwmodule,
             n_id: nullable TId
     )
     do
@@ -209,8 +158,8 @@ redef class APackagedecl
        if n_doc != null then
                n_doc.parent = self
        end
-        _n_kwpackage = n_kwpackage.as(not null)
-       n_kwpackage.parent = self
+        _n_kwmodule = n_kwmodule.as(not null)
+       n_kwmodule.parent = self
         _n_id = n_id.as(not null)
        n_id.parent = self
     end
@@ -227,11 +176,11 @@ redef class APackagedecl
             end
             return
        end
-        if _n_kwpackage == old_child then
+        if _n_kwmodule == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa TKwpackage
-                _n_kwpackage = new_child
+               assert new_child isa TKwmodule
+                _n_kwmodule = new_child
            else
                abort
             end
@@ -254,36 +203,11 @@ redef class APackagedecl
         if _n_doc != null then
             v.enter_visit(_n_doc.as(not null))
         end
-        v.enter_visit(_n_kwpackage)
-        v.enter_visit(_n_id)
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        v.enter_visit(_n_kwpackage)
+        v.enter_visit(_n_kwmodule)
         v.enter_visit(_n_id)
     end
 end
 redef class AStdImport
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwimport=(n)
-    do
-        _n_kwimport = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_astdimport (
@@ -341,31 +265,8 @@ redef class AStdImport
         v.enter_visit(_n_kwimport)
         v.enter_visit(_n_id)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwimport)
-        v.enter_visit(_n_id)
-    end
 end
 redef class ANoImport
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwimport=(n)
-    do
-        _n_kwimport = n
-       n.parent = self
-    end
-    redef fun n_kwend=(n)
-    do
-        _n_kwend = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_anoimport (
@@ -423,16 +324,8 @@ redef class ANoImport
         v.enter_visit(_n_kwimport)
         v.enter_visit(_n_kwend)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwimport)
-        v.enter_visit(_n_kwend)
-    end
 end
 redef class APublicVisibility
-
     private init empty_init do end
 
     init init_apublicvisibility
@@ -447,18 +340,8 @@ redef class APublicVisibility
     redef fun visit_all(v: Visitor)
     do
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-    end
 end
 redef class APrivateVisibility
-    redef fun n_kwprivate=(n)
-    do
-        _n_kwprivate = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aprivatevisibility (
@@ -488,19 +371,8 @@ redef class APrivateVisibility
     do
         v.enter_visit(_n_kwprivate)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwprivate)
-    end
 end
 redef class AProtectedVisibility
-    redef fun n_kwprotected=(n)
-    do
-        _n_kwprotected = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aprotectedvisibility (
@@ -530,19 +402,8 @@ redef class AProtectedVisibility
     do
         v.enter_visit(_n_kwprotected)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwprotected)
-    end
 end
 redef class AIntrudeVisibility
-    redef fun n_kwintrude=(n)
-    do
-        _n_kwintrude = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aintrudevisibility (
@@ -572,45 +433,8 @@ redef class AIntrudeVisibility
     do
         v.enter_visit(_n_kwintrude)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwintrude)
-    end
 end
 redef class AStdClassdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_classkind=(n)
-    do
-        _n_classkind = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_astdclassdef (
@@ -771,45 +595,8 @@ redef class AStdClassdef
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_classkind)
-        if _n_id != null then
-            v.enter_visit(_n_id.as(not null))
-        end
-       do
-           var i = _n_formaldefs.length
-            while i >= 0 do
-                v.enter_visit(_n_formaldefs[i])
-               i = i - 1
-           end
-       end
-       do
-           var i = _n_superclasses.length
-            while i >= 0 do
-                v.enter_visit(_n_superclasses[i])
-               i = i - 1
-           end
-       end
-       do
-           var i = _n_propdefs.length
-            while i >= 0 do
-                v.enter_visit(_n_propdefs[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class ATopClassdef
-
     private init empty_init do end
 
     init init_atopclassdef (
@@ -846,20 +633,8 @@ redef class ATopClassdef
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       do
-           var i = _n_propdefs.length
-            while i >= 0 do
-                v.enter_visit(_n_propdefs[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class AMainClassdef
-
     private init empty_init do end
 
     init init_amainclassdef (
@@ -896,25 +671,8 @@ redef class AMainClassdef
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       do
-           var i = _n_propdefs.length
-            while i >= 0 do
-                v.enter_visit(_n_propdefs[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class AConcreteClasskind
-    redef fun n_kwclass=(n)
-    do
-        _n_kwclass = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aconcreteclasskind (
@@ -944,24 +702,8 @@ redef class AConcreteClasskind
     do
         v.enter_visit(_n_kwclass)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwclass)
-    end
 end
 redef class AAbstractClasskind
-    redef fun n_kwabstract=(n)
-    do
-        _n_kwabstract = n
-       n.parent = self
-    end
-    redef fun n_kwclass=(n)
-    do
-        _n_kwclass = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aabstractclasskind (
@@ -1005,20 +747,8 @@ redef class AAbstractClasskind
         v.enter_visit(_n_kwabstract)
         v.enter_visit(_n_kwclass)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwabstract)
-        v.enter_visit(_n_kwclass)
-    end
 end
 redef class AInterfaceClasskind
-    redef fun n_kwinterface=(n)
-    do
-        _n_kwinterface = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_ainterfaceclasskind (
@@ -1048,37 +778,26 @@ redef class AInterfaceClasskind
     do
         v.enter_visit(_n_kwinterface)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwinterface)
-    end
 end
-redef class AUniversalClasskind
-    redef fun n_kwuniversal=(n)
-    do
-        _n_kwuniversal = n
-       n.parent = self
-    end
-
+redef class AEnumClasskind
     private init empty_init do end
 
-    init init_auniversalclasskind (
-            n_kwuniversal: nullable TKwuniversal
+    init init_aenumclasskind (
+            n_kwenum: nullable TKwenum
     )
     do
         empty_init
-        _n_kwuniversal = n_kwuniversal.as(not null)
-       n_kwuniversal.parent = self
+        _n_kwenum = n_kwenum.as(not null)
+       n_kwenum.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        if _n_kwuniversal == old_child then
+        if _n_kwenum == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa TKwuniversal
-                _n_kwuniversal = new_child
+               assert new_child isa TKwenum
+                _n_kwenum = new_child
            else
                abort
             end
@@ -1088,28 +807,10 @@ redef class AUniversalClasskind
 
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwuniversal)
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwuniversal)
+        v.enter_visit(_n_kwenum)
     end
 end
 redef class AFormaldef
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aformaldef (
@@ -1157,37 +858,25 @@ redef class AFormaldef
             v.enter_visit(_n_type.as(not null))
         end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-        if _n_type != null then
-            v.enter_visit(_n_type.as(not null))
-        end
-    end
 end
 redef class ASuperclass
-    redef fun n_kwspecial=(n)
-    do
-        _n_kwspecial = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_asuperclass (
             n_kwspecial: nullable TKwspecial,
+            n_kwsuper: nullable TKwsuper,
             n_type: nullable AType
     )
     do
         empty_init
-        _n_kwspecial = n_kwspecial.as(not null)
-       n_kwspecial.parent = self
+        _n_kwspecial = n_kwspecial
+       if n_kwspecial != null then
+               n_kwspecial.parent = self
+       end
+        _n_kwsuper = n_kwsuper
+       if n_kwsuper != null then
+               n_kwsuper.parent = self
+       end
         _n_type = n_type.as(not null)
        n_type.parent = self
     end
@@ -1200,7 +889,17 @@ redef class ASuperclass
                assert new_child isa TKwspecial
                 _n_kwspecial = new_child
            else
-               abort
+               _n_kwspecial = null
+            end
+            return
+       end
+        if _n_kwsuper == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwsuper
+                _n_kwsuper = new_child
+           else
+               _n_kwsuper = null
             end
             return
        end
@@ -1218,75 +917,16 @@ redef class ASuperclass
 
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwspecial)
-        v.enter_visit(_n_type)
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwspecial)
+        if _n_kwspecial != null then
+            v.enter_visit(_n_kwspecial.as(not null))
+        end
+        if _n_kwsuper != null then
+            v.enter_visit(_n_kwsuper.as(not null))
+        end
         v.enter_visit(_n_type)
     end
 end
 redef class AAttrPropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_readable=(n)
-    do
-        _n_readable = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_writable=(n)
-    do
-        _n_writable = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwvar=(n)
-    do
-        _n_kwvar = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aattrpropdef (
@@ -1297,6 +937,7 @@ redef class AAttrPropdef
             n_visibility: nullable AVisibility,
             n_kwvar: nullable TKwvar,
             n_id: nullable TAttrid,
+            n_id2: nullable TId,
             n_type: nullable AType,
             n_expr: nullable AExpr
     )
@@ -1322,8 +963,14 @@ redef class AAttrPropdef
        n_visibility.parent = self
         _n_kwvar = n_kwvar.as(not null)
        n_kwvar.parent = self
-        _n_id = n_id.as(not null)
-       n_id.parent = self
+        _n_id = n_id
+       if n_id != null then
+               n_id.parent = self
+       end
+        _n_id2 = n_id2
+       if n_id2 != null then
+               n_id2.parent = self
+       end
         _n_type = n_type
        if n_type != null then
                n_type.parent = self
@@ -1402,7 +1049,17 @@ redef class AAttrPropdef
                assert new_child isa TAttrid
                 _n_id = new_child
            else
-               abort
+               _n_id = null
+            end
+            return
+       end
+        if _n_id2 == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TId
+                _n_id2 = new_child
+           else
+               _n_id2 = null
             end
             return
        end
@@ -1444,7 +1101,12 @@ redef class AAttrPropdef
         end
         v.enter_visit(_n_visibility)
         v.enter_visit(_n_kwvar)
-        v.enter_visit(_n_id)
+        if _n_id != null then
+            v.enter_visit(_n_id.as(not null))
+        end
+        if _n_id2 != null then
+            v.enter_visit(_n_id2.as(not null))
+        end
         if _n_type != null then
             v.enter_visit(_n_type.as(not null))
         end
@@ -1452,72 +1114,17 @@ redef class AAttrPropdef
             v.enter_visit(_n_expr.as(not null))
         end
     end
+end
+redef class AMethPropdef
+    private init empty_init do end
 
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_readable != null then
-            v.enter_visit(_n_readable.as(not null))
-        end
-        if _n_writable != null then
-            v.enter_visit(_n_writable.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwvar)
-        v.enter_visit(_n_id)
-        if _n_type != null then
-            v.enter_visit(_n_type.as(not null))
-        end
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
-        end
-    end
-end
-redef class AMethPropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_methid=(n)
-    do
-        _n_methid = n
-       n.parent = self
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-
-    private init empty_init do end
-
-    init init_amethpropdef (
-            n_doc: nullable ADoc,
-            n_kwredef: nullable TKwredef,
-            n_visibility: nullable AVisibility,
-            n_methid: nullable AMethid,
-            n_signature: nullable ASignature
-    )
+    init init_amethpropdef (
+            n_doc: nullable ADoc,
+            n_kwredef: nullable TKwredef,
+            n_visibility: nullable AVisibility,
+            n_methid: nullable AMethid,
+            n_signature: nullable ASignature
+    )
     do
         empty_init
         _n_doc = n_doc
@@ -1602,56 +1209,8 @@ redef class AMethPropdef
         v.enter_visit(_n_methid)
         v.enter_visit(_n_signature)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_methid)
-        v.enter_visit(_n_signature)
-    end
 end
 redef class ADeferredMethPropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwmeth=(n)
-    do
-        _n_kwmeth = n
-       n.parent = self
-    end
-    redef fun n_methid=(n)
-    do
-        _n_methid = n
-       n.parent = self
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_adeferredmethpropdef (
@@ -1759,57 +1318,8 @@ redef class ADeferredMethPropdef
         v.enter_visit(_n_methid)
         v.enter_visit(_n_signature)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwmeth)
-        v.enter_visit(_n_methid)
-        v.enter_visit(_n_signature)
-    end
 end
 redef class AInternMethPropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwmeth=(n)
-    do
-        _n_kwmeth = n
-       n.parent = self
-    end
-    redef fun n_methid=(n)
-    do
-        _n_methid = n
-       n.parent = self
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_ainternmethpropdef (
@@ -1917,64 +1427,8 @@ redef class AInternMethPropdef
         v.enter_visit(_n_methid)
         v.enter_visit(_n_signature)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwmeth)
-        v.enter_visit(_n_methid)
-        v.enter_visit(_n_signature)
-    end
 end
 redef class AExternMethPropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwmeth=(n)
-    do
-        _n_kwmeth = n
-       n.parent = self
-    end
-    redef fun n_methid=(n)
-    do
-        _n_methid = n
-       n.parent = self
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-    redef fun n_extern=(n)
-    do
-        _n_extern = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aexternmethpropdef (
@@ -2100,67 +1554,8 @@ redef class AExternMethPropdef
             v.enter_visit(_n_extern.as(not null))
         end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwmeth)
-        v.enter_visit(_n_methid)
-        v.enter_visit(_n_signature)
-        if _n_extern != null then
-            v.enter_visit(_n_extern.as(not null))
-        end
-    end
 end
 redef class AConcreteMethPropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwmeth=(n)
-    do
-        _n_kwmeth = n
-       n.parent = self
-    end
-    redef fun n_methid=(n)
-    do
-        _n_methid = n
-       n.parent = self
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-    redef fun n_block=(n)
-    do
-        _n_block = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aconcretemethpropdef (
@@ -2286,69 +1681,8 @@ redef class AConcreteMethPropdef
             v.enter_visit(_n_block.as(not null))
         end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwmeth)
-        v.enter_visit(_n_methid)
-        v.enter_visit(_n_signature)
-        if _n_block != null then
-            v.enter_visit(_n_block.as(not null))
-        end
-    end
 end
 redef class AConcreteInitPropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwinit=(n)
-    do
-        _n_kwinit = n
-       n.parent = self
-    end
-    redef fun n_methid=(n)
-    do
-        _n_methid = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-    redef fun n_block=(n)
-    do
-        _n_block = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aconcreteinitpropdef (
@@ -2478,42 +1812,8 @@ redef class AConcreteInitPropdef
             v.enter_visit(_n_block.as(not null))
         end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwinit)
-        if _n_methid != null then
-            v.enter_visit(_n_methid.as(not null))
-        end
-        v.enter_visit(_n_signature)
-        if _n_block != null then
-            v.enter_visit(_n_block.as(not null))
-        end
-    end
 end
 redef class AMainMethPropdef
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_block=(n)
-    do
-        _n_block = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_amainmethpropdef (
@@ -2565,53 +1865,8 @@ redef class AMainMethPropdef
             v.enter_visit(_n_block.as(not null))
         end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        if _n_block != null then
-            v.enter_visit(_n_block.as(not null))
-        end
-    end
 end
 redef class ATypePropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwtype=(n)
-    do
-        _n_kwtype = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_atypepropdef (
@@ -2719,36 +1974,9 @@ redef class ATypePropdef
         v.enter_visit(_n_id)
         v.enter_visit(_n_type)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwtype)
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_type)
-    end
-end
-redef class AReadAble
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwreadable=(n)
-    do
-        _n_kwreadable = n
-       n.parent = self
-    end
-
-    private init empty_init do end
+end
+redef class AReadAble
+    private init empty_init do end
 
     init init_areadable (
             n_kwredef: nullable TKwredef,
@@ -2795,33 +2023,13 @@ redef class AReadAble
         end
         v.enter_visit(_n_kwreadable)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_kwreadable)
-    end
 end
 redef class AWriteAble
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwwritable=(n)
-    do
-        _n_kwwritable = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_awriteable (
             n_kwredef: nullable TKwredef,
+            n_visibility: nullable AVisibility,
             n_kwwritable: nullable TKwwritable
     )
     do
@@ -2830,6 +2038,10 @@ redef class AWriteAble
        if n_kwredef != null then
                n_kwredef.parent = self
        end
+        _n_visibility = n_visibility
+       if n_visibility != null then
+               n_visibility.parent = self
+       end
         _n_kwwritable = n_kwwritable.as(not null)
        n_kwwritable.parent = self
     end
@@ -2846,6 +2058,16 @@ redef class AWriteAble
             end
             return
        end
+        if _n_visibility == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AVisibility
+                _n_visibility = new_child
+           else
+               _n_visibility = null
+            end
+            return
+       end
         if _n_kwwritable == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -2863,24 +2085,13 @@ redef class AWriteAble
         if _n_kwredef != null then
             v.enter_visit(_n_kwredef.as(not null))
         end
-        v.enter_visit(_n_kwwritable)
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
+        if _n_visibility != null then
+            v.enter_visit(_n_visibility.as(not null))
         end
         v.enter_visit(_n_kwwritable)
     end
 end
 redef class AIdMethid
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aidmethid (
@@ -2910,19 +2121,8 @@ redef class AIdMethid
     do
         v.enter_visit(_n_id)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-    end
 end
 redef class APlusMethid
-    redef fun n_plus=(n)
-    do
-        _n_plus = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aplusmethid (
@@ -2952,19 +2152,8 @@ redef class APlusMethid
     do
         v.enter_visit(_n_plus)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_plus)
-    end
 end
 redef class AMinusMethid
-    redef fun n_minus=(n)
-    do
-        _n_minus = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aminusmethid (
@@ -2994,19 +2183,8 @@ redef class AMinusMethid
     do
         v.enter_visit(_n_minus)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_minus)
-    end
 end
 redef class AStarMethid
-    redef fun n_star=(n)
-    do
-        _n_star = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_astarmethid (
@@ -3036,19 +2214,8 @@ redef class AStarMethid
     do
         v.enter_visit(_n_star)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_star)
-    end
 end
 redef class ASlashMethid
-    redef fun n_slash=(n)
-    do
-        _n_slash = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aslashmethid (
@@ -3078,19 +2245,8 @@ redef class ASlashMethid
     do
         v.enter_visit(_n_slash)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_slash)
-    end
 end
 redef class APercentMethid
-    redef fun n_percent=(n)
-    do
-        _n_percent = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_apercentmethid (
@@ -3120,19 +2276,8 @@ redef class APercentMethid
     do
         v.enter_visit(_n_percent)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_percent)
-    end
 end
 redef class AEqMethid
-    redef fun n_eq=(n)
-    do
-        _n_eq = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aeqmethid (
@@ -3162,19 +2307,8 @@ redef class AEqMethid
     do
         v.enter_visit(_n_eq)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_eq)
-    end
 end
 redef class ANeMethid
-    redef fun n_ne=(n)
-    do
-        _n_ne = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_anemethid (
@@ -3204,19 +2338,8 @@ redef class ANeMethid
     do
         v.enter_visit(_n_ne)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_ne)
-    end
 end
 redef class ALeMethid
-    redef fun n_le=(n)
-    do
-        _n_le = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_alemethid (
@@ -3246,19 +2369,8 @@ redef class ALeMethid
     do
         v.enter_visit(_n_le)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_le)
-    end
 end
 redef class AGeMethid
-    redef fun n_ge=(n)
-    do
-        _n_ge = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_agemethid (
@@ -3288,19 +2400,8 @@ redef class AGeMethid
     do
         v.enter_visit(_n_ge)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_ge)
-    end
 end
 redef class ALtMethid
-    redef fun n_lt=(n)
-    do
-        _n_lt = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_altmethid (
@@ -3330,19 +2431,8 @@ redef class ALtMethid
     do
         v.enter_visit(_n_lt)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_lt)
-    end
 end
 redef class AGtMethid
-    redef fun n_gt=(n)
-    do
-        _n_gt = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_agtmethid (
@@ -3372,24 +2462,70 @@ redef class AGtMethid
     do
         v.enter_visit(_n_gt)
     end
+end
+redef class ALlMethid
+    private init empty_init do end
 
-    redef fun visit_all_reverse(v: Visitor)
+    init init_allmethid (
+            n_ll: nullable TLl
+    )
     do
-        v.enter_visit(_n_gt)
+        empty_init
+        _n_ll = n_ll.as(not null)
+       n_ll.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_ll == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TLl
+                _n_ll = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_ll)
     end
 end
-redef class ABraMethid
-    redef fun n_obra=(n)
+redef class AGgMethid
+    private init empty_init do end
+
+    init init_aggmethid (
+            n_gg: nullable TGg
+    )
     do
-        _n_obra = n
-       n.parent = self
+        empty_init
+        _n_gg = n_gg.as(not null)
+       n_gg.parent = self
     end
-    redef fun n_cbra=(n)
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        _n_cbra = n
-       n.parent = self
+        if _n_gg == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TGg
+                _n_gg = new_child
+           else
+               abort
+            end
+            return
+       end
     end
 
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_gg)
+    end
+end
+redef class ABraMethid
     private init empty_init do end
 
     init init_abramethid (
@@ -3433,20 +2569,8 @@ redef class ABraMethid
         v.enter_visit(_n_obra)
         v.enter_visit(_n_cbra)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_obra)
-        v.enter_visit(_n_cbra)
-    end
 end
 redef class AStarshipMethid
-    redef fun n_starship=(n)
-    do
-        _n_starship = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_astarshipmethid (
@@ -3476,24 +2600,8 @@ redef class AStarshipMethid
     do
         v.enter_visit(_n_starship)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_starship)
-    end
 end
 redef class AAssignMethid
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aassignmethid (
@@ -3537,30 +2645,8 @@ redef class AAssignMethid
         v.enter_visit(_n_id)
         v.enter_visit(_n_assign)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_assign)
-    end
 end
 redef class ABraassignMethid
-    redef fun n_obra=(n)
-    do
-        _n_obra = n
-       n.parent = self
-    end
-    redef fun n_cbra=(n)
-    do
-        _n_cbra = n
-       n.parent = self
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_abraassignmethid (
@@ -3618,23 +2704,8 @@ redef class ABraassignMethid
         v.enter_visit(_n_cbra)
         v.enter_visit(_n_assign)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_obra)
-        v.enter_visit(_n_cbra)
-        v.enter_visit(_n_assign)
-    end
 end
 redef class ASignature
-    redef fun n_type=(n)
-    do
-        _n_type = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_asignature (
@@ -3710,49 +2781,8 @@ redef class ASignature
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       do
-           var i = _n_params.length
-            while i >= 0 do
-                v.enter_visit(_n_params[i])
-               i = i - 1
-           end
-       end
-        if _n_type != null then
-            v.enter_visit(_n_type.as(not null))
-        end
-       do
-           var i = _n_closure_decls.length
-            while i >= 0 do
-                v.enter_visit(_n_closure_decls[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class AParam
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_dotdotdot=(n)
-    do
-        _n_dotdotdot = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aparam (
@@ -3818,49 +2848,8 @@ redef class AParam
             v.enter_visit(_n_dotdotdot.as(not null))
         end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-        if _n_type != null then
-            v.enter_visit(_n_type.as(not null))
-        end
-        if _n_dotdotdot != null then
-            v.enter_visit(_n_dotdotdot.as(not null))
-        end
-    end
 end
 redef class AClosureDecl
-    redef fun n_kwbreak=(n)
-    do
-        _n_kwbreak = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_bang=(n)
-    do
-        _n_bang = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aclosuredecl (
@@ -3954,35 +2943,9 @@ redef class AClosureDecl
             v.enter_visit(_n_expr.as(not null))
         end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_kwbreak != null then
-            v.enter_visit(_n_kwbreak.as(not null))
-        end
-        v.enter_visit(_n_bang)
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_signature)
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
-        end
-    end
-end
-redef class AType
-    redef fun n_kwnullable=(n)
-    do
-        _n_kwnullable = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
-    private init empty_init do end
+end
+redef class AType
+    private init empty_init do end
 
     init init_atype (
             n_kwnullable: nullable TKwnullable,
@@ -4050,34 +3013,8 @@ redef class AType
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_kwnullable != null then
-            v.enter_visit(_n_kwnullable.as(not null))
-        end
-        v.enter_visit(_n_id)
-       do
-           var i = _n_types.length
-            while i >= 0 do
-                v.enter_visit(_n_types[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class ALabel
-    redef fun n_kwlabel=(n)
-    do
-        _n_kwlabel = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_alabel (
@@ -4121,15 +3058,8 @@ redef class ALabel
         v.enter_visit(_n_kwlabel)
         v.enter_visit(_n_id)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwlabel)
-        v.enter_visit(_n_id)
-    end
 end
 redef class ABlockExpr
-
     private init empty_init do end
 
     init init_ablockexpr (
@@ -4166,51 +3096,8 @@ redef class ABlockExpr
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       do
-           var i = _n_expr.length
-            while i >= 0 do
-                v.enter_visit(_n_expr[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class AVardeclExpr
-    redef fun n_kwvar=(n)
-    do
-        _n_kwvar = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_avardeclexpr (
@@ -4308,36 +3195,8 @@ redef class AVardeclExpr
             v.enter_visit(_n_expr.as(not null))
         end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwvar)
-        v.enter_visit(_n_id)
-        if _n_type != null then
-            v.enter_visit(_n_type.as(not null))
-        end
-        if _n_assign != null then
-            v.enter_visit(_n_assign.as(not null))
-        end
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
-        end
-    end
 end
 redef class AReturnExpr
-    redef fun n_kwreturn=(n)
-    do
-        _n_kwreturn = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_areturnexpr (
@@ -4346,8 +3205,10 @@ redef class AReturnExpr
     )
     do
         empty_init
-        _n_kwreturn = n_kwreturn.as(not null)
-       n_kwreturn.parent = self
+        _n_kwreturn = n_kwreturn
+       if n_kwreturn != null then
+               n_kwreturn.parent = self
+       end
         _n_expr = n_expr
        if n_expr != null then
                n_expr.parent = self
@@ -4362,7 +3223,7 @@ redef class AReturnExpr
                assert new_child isa TKwreturn
                 _n_kwreturn = new_child
            else
-               abort
+               _n_kwreturn = null
             end
             return
        end
@@ -4380,41 +3241,15 @@ redef class AReturnExpr
 
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwreturn)
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
+        if _n_kwreturn != null then
+            v.enter_visit(_n_kwreturn.as(not null))
         end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwreturn)
         if _n_expr != null then
             v.enter_visit(_n_expr.as(not null))
         end
     end
 end
 redef class ABreakExpr
-    redef fun n_kwbreak=(n)
-    do
-        _n_kwbreak = n
-       n.parent = self
-    end
-    redef fun n_label=(n)
-    do
-        _n_label = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_abreakexpr (
@@ -4480,25 +3315,8 @@ redef class ABreakExpr
             v.enter_visit(_n_expr.as(not null))
         end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwbreak)
-        if _n_label != null then
-            v.enter_visit(_n_label.as(not null))
-        end
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
-        end
-    end
 end
 redef class AAbortExpr
-    redef fun n_kwabort=(n)
-    do
-        _n_kwabort = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aabortexpr (
@@ -4528,33 +3346,8 @@ redef class AAbortExpr
     do
         v.enter_visit(_n_kwabort)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwabort)
-    end
 end
 redef class AContinueExpr
-    redef fun n_kwcontinue=(n)
-    do
-        _n_kwcontinue = n
-       n.parent = self
-    end
-    redef fun n_label=(n)
-    do
-        _n_label = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_acontinueexpr (
@@ -4564,8 +3357,10 @@ redef class AContinueExpr
     )
     do
         empty_init
-        _n_kwcontinue = n_kwcontinue.as(not null)
-       n_kwcontinue.parent = self
+        _n_kwcontinue = n_kwcontinue
+       if n_kwcontinue != null then
+               n_kwcontinue.parent = self
+       end
         _n_label = n_label
        if n_label != null then
                n_label.parent = self
@@ -4584,7 +3379,7 @@ redef class AContinueExpr
                assert new_child isa TKwcontinue
                 _n_kwcontinue = new_child
            else
-               abort
+               _n_kwcontinue = null
             end
             return
        end
@@ -4612,18 +3407,9 @@ redef class AContinueExpr
 
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwcontinue)
-        if _n_label != null then
-            v.enter_visit(_n_label.as(not null))
-        end
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
+        if _n_kwcontinue != null then
+            v.enter_visit(_n_kwcontinue.as(not null))
         end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwcontinue)
         if _n_label != null then
             v.enter_visit(_n_label.as(not null))
         end
@@ -4633,26 +3419,6 @@ redef class AContinueExpr
     end
 end
 redef class ADoExpr
-    redef fun n_kwdo=(n)
-    do
-        _n_kwdo = n
-       n.parent = self
-    end
-    redef fun n_block=(n)
-    do
-        _n_block = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_label=(n)
-    do
-        _n_label = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_adoexpr (
@@ -4718,44 +3484,8 @@ redef class ADoExpr
             v.enter_visit(_n_label.as(not null))
         end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwdo)
-        if _n_block != null then
-            v.enter_visit(_n_block.as(not null))
-        end
-        if _n_label != null then
-            v.enter_visit(_n_label.as(not null))
-        end
-    end
 end
 redef class AIfExpr
-    redef fun n_kwif=(n)
-    do
-        _n_kwif = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_then=(n)
-    do
-        _n_then = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_else=(n)
-    do
-        _n_else = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aifexpr (
@@ -4835,51 +3565,8 @@ redef class AIfExpr
             v.enter_visit(_n_else.as(not null))
         end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwif)
-        v.enter_visit(_n_expr)
-        if _n_then != null then
-            v.enter_visit(_n_then.as(not null))
-        end
-        if _n_else != null then
-            v.enter_visit(_n_else.as(not null))
-        end
-    end
 end
 redef class AIfexprExpr
-    redef fun n_kwif=(n)
-    do
-        _n_kwif = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_kwthen=(n)
-    do
-        _n_kwthen = n
-       n.parent = self
-    end
-    redef fun n_then=(n)
-    do
-        _n_then = n
-       n.parent = self
-    end
-    redef fun n_kwelse=(n)
-    do
-        _n_kwelse = n
-       n.parent = self
-    end
-    redef fun n_else=(n)
-    do
-        _n_else = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aifexprexpr (
@@ -4979,48 +3666,8 @@ redef class AIfexprExpr
         v.enter_visit(_n_kwelse)
         v.enter_visit(_n_else)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwif)
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_kwthen)
-        v.enter_visit(_n_then)
-        v.enter_visit(_n_kwelse)
-        v.enter_visit(_n_else)
-    end
 end
 redef class AWhileExpr
-    redef fun n_kwwhile=(n)
-    do
-        _n_kwwhile = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_kwdo=(n)
-    do
-        _n_kwdo = n
-       n.parent = self
-    end
-    redef fun n_block=(n)
-    do
-        _n_block = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_label=(n)
-    do
-        _n_label = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_awhileexpr (
@@ -5114,76 +3761,19 @@ redef class AWhileExpr
             v.enter_visit(_n_label.as(not null))
         end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwwhile)
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_kwdo)
-        if _n_block != null then
-            v.enter_visit(_n_block.as(not null))
-        end
-        if _n_label != null then
-            v.enter_visit(_n_label.as(not null))
-        end
-    end
 end
-redef class AForExpr
-    redef fun n_kwfor=(n)
-    do
-        _n_kwfor = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_kwdo=(n)
-    do
-        _n_kwdo = n
-       n.parent = self
-    end
-    redef fun n_block=(n)
-    do
-        _n_block = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_label=(n)
-    do
-        _n_label = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
+redef class ALoopExpr
     private init empty_init do end
 
-    init init_aforexpr (
-            n_kwfor: nullable TKwfor,
-            n_id: nullable TId,
-            n_expr: nullable AExpr,
-            n_kwdo: nullable TKwdo,
+    init init_aloopexpr (
+            n_kwloop: nullable TKwloop,
             n_block: nullable AExpr,
             n_label: nullable ALabel
     )
     do
         empty_init
-        _n_kwfor = n_kwfor.as(not null)
-       n_kwfor.parent = self
-        _n_id = n_id.as(not null)
-       n_id.parent = self
-        _n_expr = n_expr.as(not null)
-       n_expr.parent = self
-        _n_kwdo = n_kwdo.as(not null)
-       n_kwdo.parent = self
+        _n_kwloop = n_kwloop.as(not null)
+       n_kwloop.parent = self
         _n_block = n_block
        if n_block != null then
                n_block.parent = self
@@ -5196,26 +3786,107 @@ redef class AForExpr
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        if _n_kwfor == old_child then
+        if _n_kwloop == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa TKwfor
-                _n_kwfor = new_child
+               assert new_child isa TKwloop
+                _n_kwloop = new_child
            else
                abort
             end
             return
        end
-        if _n_id == old_child then
+        if _n_block == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa TId
-                _n_id = new_child
+               assert new_child isa AExpr
+                _n_block = new_child
+           else
+               _n_block = null
+            end
+            return
+       end
+        if _n_label == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa ALabel
+                _n_label = new_child
+           else
+               _n_label = null
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_kwloop)
+        if _n_block != null then
+            v.enter_visit(_n_block.as(not null))
+        end
+        if _n_label != null then
+            v.enter_visit(_n_label.as(not null))
+        end
+    end
+end
+redef class AForExpr
+    private init empty_init do end
+
+    init init_aforexpr (
+            n_kwfor: nullable TKwfor,
+            n_ids: Collection[Object], # Should be Collection[TId]
+            n_expr: nullable AExpr,
+            n_kwdo: nullable TKwdo,
+            n_block: nullable AExpr,
+            n_label: nullable ALabel
+    )
+    do
+        empty_init
+        _n_kwfor = n_kwfor.as(not null)
+       n_kwfor.parent = self
+       for n in n_ids do
+               assert n isa TId
+               _n_ids.add(n)
+               n.parent = self
+       end
+        _n_expr = n_expr.as(not null)
+       n_expr.parent = self
+        _n_kwdo = n_kwdo.as(not null)
+       n_kwdo.parent = self
+        _n_block = n_block
+       if n_block != null then
+               n_block.parent = self
+       end
+        _n_label = n_label
+       if n_label != null then
+               n_label.parent = self
+       end
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_kwfor == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwfor
+                _n_kwfor = new_child
            else
                abort
             end
             return
        end
+        for i in [0.._n_ids.length[ do
+            if _n_ids[i] == old_child then
+                if new_child != null then
+                   assert new_child isa TId
+                    _n_ids[i] = new_child
+                    new_child.parent = self
+                else
+                    _n_ids.remove_at(i)
+                end
+                return
+            end
+        end
         if _n_expr == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -5261,21 +3932,9 @@ redef class AForExpr
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwfor)
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_kwdo)
-        if _n_block != null then
-            v.enter_visit(_n_block.as(not null))
-        end
-        if _n_label != null then
-            v.enter_visit(_n_label.as(not null))
-        end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwfor)
-        v.enter_visit(_n_id)
+            for n in _n_ids do
+                v.enter_visit(n)
+           end
         v.enter_visit(_n_expr)
         v.enter_visit(_n_kwdo)
         if _n_block != null then
@@ -5287,30 +3946,13 @@ redef class AForExpr
     end
 end
 redef class AAssertExpr
-    redef fun n_kwassert=(n)
-    do
-        _n_kwassert = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aassertexpr (
             n_kwassert: nullable TKwassert,
             n_id: nullable TId,
-            n_expr: nullable AExpr
+            n_expr: nullable AExpr,
+            n_else: nullable AExpr
     )
     do
         empty_init
@@ -5322,6 +3964,10 @@ redef class AAssertExpr
        end
         _n_expr = n_expr.as(not null)
        n_expr.parent = self
+        _n_else = n_else
+       if n_else != null then
+               n_else.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -5356,6 +4002,16 @@ redef class AAssertExpr
             end
             return
        end
+        if _n_else == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_else = new_child
+           else
+               _n_else = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -5365,29 +4021,12 @@ redef class AAssertExpr
             v.enter_visit(_n_id.as(not null))
         end
         v.enter_visit(_n_expr)
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwassert)
-        if _n_id != null then
-            v.enter_visit(_n_id.as(not null))
+        if _n_else != null then
+            v.enter_visit(_n_else.as(not null))
         end
-        v.enter_visit(_n_expr)
     end
 end
 redef class AOnceExpr
-    redef fun n_kwonce=(n)
-    do
-        _n_kwonce = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aonceexpr (
@@ -5431,20 +4070,8 @@ redef class AOnceExpr
         v.enter_visit(_n_kwonce)
         v.enter_visit(_n_expr)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwonce)
-        v.enter_visit(_n_expr)
-    end
 end
 redef class ASendExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_asendexpr (
@@ -5474,24 +4101,8 @@ redef class ASendExpr
     do
         v.enter_visit(_n_expr)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-    end
 end
 redef class ABinopExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_abinopexpr (
@@ -5535,25 +4146,8 @@ redef class ABinopExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class AOrExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aorexpr (
@@ -5597,25 +4191,8 @@ redef class AOrExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class AAndExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aandexpr (
@@ -5659,25 +4236,53 @@ redef class AAndExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
+end
+redef class AOrElseExpr
+    private init empty_init do end
 
-    redef fun visit_all_reverse(v: Visitor)
+    init init_aorelseexpr (
+            n_expr: nullable AExpr,
+            n_expr2: nullable AExpr
+    )
     do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
+        empty_init
+        _n_expr = n_expr.as(not null)
+       n_expr.parent = self
+        _n_expr2 = n_expr2.as(not null)
+       n_expr2.parent = self
     end
-end
-redef class ANotExpr
-    redef fun n_kwnot=(n)
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        _n_kwnot = n
-       n.parent = self
+        if _n_expr == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_expr = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_expr2 == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_expr2 = new_child
+           else
+               abort
+            end
+            return
+       end
     end
-    redef fun n_expr=(n)
+
+    redef fun visit_all(v: Visitor)
     do
-        _n_expr = n
-       n.parent = self
+        v.enter_visit(_n_expr)
+        v.enter_visit(_n_expr2)
     end
-
+end
+redef class ANotExpr
     private init empty_init do end
 
     init init_anotexpr (
@@ -5721,25 +4326,8 @@ redef class ANotExpr
         v.enter_visit(_n_kwnot)
         v.enter_visit(_n_expr)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwnot)
-        v.enter_visit(_n_expr)
-    end
 end
 redef class AEqExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aeqexpr (
@@ -5783,25 +4371,8 @@ redef class AEqExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class AEeExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aeeexpr (
@@ -5845,25 +4416,8 @@ redef class AEeExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class ANeExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aneexpr (
@@ -5907,25 +4461,8 @@ redef class ANeExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class ALtExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_altexpr (
@@ -5969,25 +4506,8 @@ redef class ALtExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class ALeExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aleexpr (
@@ -6031,25 +4551,53 @@ redef class ALeExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
+end
+redef class ALlExpr
+    private init empty_init do end
 
-    redef fun visit_all_reverse(v: Visitor)
+    init init_allexpr (
+            n_expr: nullable AExpr,
+            n_expr2: nullable AExpr
+    )
     do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
+        empty_init
+        _n_expr = n_expr.as(not null)
+       n_expr.parent = self
+        _n_expr2 = n_expr2.as(not null)
+       n_expr2.parent = self
     end
-end
-redef class AGtExpr
-    redef fun n_expr=(n)
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        _n_expr = n
-       n.parent = self
+        if _n_expr == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_expr = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_expr2 == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_expr2 = new_child
+           else
+               abort
+            end
+            return
+       end
     end
-    redef fun n_expr2=(n)
+
+    redef fun visit_all(v: Visitor)
     do
-        _n_expr2 = n
-       n.parent = self
+        v.enter_visit(_n_expr)
+        v.enter_visit(_n_expr2)
     end
-
+end
+redef class AGtExpr
     private init empty_init do end
 
     init init_agtexpr (
@@ -6093,25 +4641,8 @@ redef class AGtExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class AGeExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_ageexpr (
@@ -6155,25 +4686,53 @@ redef class AGeExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
+end
+redef class AGgExpr
+    private init empty_init do end
 
-    redef fun visit_all_reverse(v: Visitor)
+    init init_aggexpr (
+            n_expr: nullable AExpr,
+            n_expr2: nullable AExpr
+    )
     do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
+        empty_init
+        _n_expr = n_expr.as(not null)
+       n_expr.parent = self
+        _n_expr2 = n_expr2.as(not null)
+       n_expr2.parent = self
     end
-end
-redef class AIsaExpr
-    redef fun n_expr=(n)
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        _n_expr = n
-       n.parent = self
+        if _n_expr == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_expr = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_expr2 == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_expr2 = new_child
+           else
+               abort
+            end
+            return
+       end
     end
-    redef fun n_type=(n)
+
+    redef fun visit_all(v: Visitor)
     do
-        _n_type = n
-       n.parent = self
+        v.enter_visit(_n_expr)
+        v.enter_visit(_n_expr2)
     end
-
+end
+redef class AIsaExpr
     private init empty_init do end
 
     init init_aisaexpr (
@@ -6217,25 +4776,8 @@ redef class AIsaExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_type)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_type)
-    end
 end
 redef class APlusExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aplusexpr (
@@ -6279,25 +4821,8 @@ redef class APlusExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class AMinusExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aminusexpr (
@@ -6341,25 +4866,8 @@ redef class AMinusExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class AStarshipExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_astarshipexpr (
@@ -6403,25 +4911,8 @@ redef class AStarshipExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class AStarExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_astarexpr (
@@ -6465,25 +4956,8 @@ redef class AStarExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class ASlashExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aslashexpr (
@@ -6527,25 +5001,8 @@ redef class ASlashExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
-redef class APercentExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
+redef class APercentExpr
     private init empty_init do end
 
     init init_apercentexpr (
@@ -6589,25 +5046,8 @@ redef class APercentExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class AUminusExpr
-    redef fun n_minus=(n)
-    do
-        _n_minus = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_auminusexpr (
@@ -6651,32 +5091,8 @@ redef class AUminusExpr
         v.enter_visit(_n_minus)
         v.enter_visit(_n_expr)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_minus)
-        v.enter_visit(_n_expr)
-    end
 end
 redef class ANewExpr
-    redef fun n_kwnew=(n)
-    do
-        _n_kwnew = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_anewexpr (
@@ -6759,35 +5175,8 @@ redef class ANewExpr
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwnew)
-        v.enter_visit(_n_type)
-        if _n_id != null then
-            v.enter_visit(_n_id.as(not null))
-        end
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class AAttrExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aattrexpr (
@@ -6831,35 +5220,8 @@ redef class AAttrExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_id)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_id)
-    end
 end
 redef class AAttrAssignExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aattrassignexpr (
@@ -6931,37 +5293,8 @@ redef class AAttrAssignExpr
         v.enter_visit(_n_assign)
         v.enter_visit(_n_value)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_assign)
-        v.enter_visit(_n_value)
-    end
 end
 redef class AAttrReassignExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign_op=(n)
-    do
-        _n_assign_op = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aattrreassignexpr (
@@ -7033,27 +5366,8 @@ redef class AAttrReassignExpr
         v.enter_visit(_n_assign_op)
         v.enter_visit(_n_value)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_assign_op)
-        v.enter_visit(_n_value)
-    end
 end
 redef class ACallExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_acallexpr (
@@ -7139,49 +5453,8 @@ redef class ACallExpr
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_id)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
-       do
-           var i = _n_closure_defs.length
-            while i >= 0 do
-                v.enter_visit(_n_closure_defs[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class ACallAssignExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_acallassignexpr (
@@ -7274,44 +5547,8 @@ redef class ACallAssignExpr
         v.enter_visit(_n_assign)
         v.enter_visit(_n_value)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_id)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
-        v.enter_visit(_n_assign)
-        v.enter_visit(_n_value)
-    end
 end
 redef class ACallReassignExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign_op=(n)
-    do
-        _n_assign_op = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_acallreassignexpr (
@@ -7404,36 +5641,8 @@ redef class ACallReassignExpr
         v.enter_visit(_n_assign_op)
         v.enter_visit(_n_value)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_id)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
-        v.enter_visit(_n_assign_op)
-        v.enter_visit(_n_value)
-    end
 end
 redef class ASuperExpr
-    redef fun n_qualified=(n)
-    do
-        _n_qualified = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwsuper=(n)
-    do
-        _n_kwsuper = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_asuperexpr (
@@ -7502,34 +5711,8 @@ redef class ASuperExpr
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_qualified != null then
-            v.enter_visit(_n_qualified.as(not null))
-        end
-        v.enter_visit(_n_kwsuper)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class AInitExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_kwinit=(n)
-    do
-        _n_kwinit = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_ainitexpr (
@@ -7594,27 +5777,8 @@ redef class AInitExpr
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_kwinit)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class ABraExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_abraexpr (
@@ -7686,43 +5850,8 @@ redef class ABraExpr
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
-       do
-           var i = _n_closure_defs.length
-            while i >= 0 do
-                v.enter_visit(_n_closure_defs[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class ABraAssignExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_abraassignexpr (
@@ -7801,38 +5930,8 @@ redef class ABraAssignExpr
         v.enter_visit(_n_assign)
         v.enter_visit(_n_value)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
-        v.enter_visit(_n_assign)
-        v.enter_visit(_n_value)
-    end
 end
 redef class ABraReassignExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_assign_op=(n)
-    do
-        _n_assign_op = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_abrareassignexpr (
@@ -7911,28 +6010,8 @@ redef class ABraReassignExpr
         v.enter_visit(_n_assign_op)
         v.enter_visit(_n_value)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
-        v.enter_visit(_n_assign_op)
-        v.enter_visit(_n_value)
-    end
 end
 redef class AClosureCallExpr
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aclosurecallexpr (
@@ -8004,33 +6083,8 @@ redef class AClosureCallExpr
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
-       do
-           var i = _n_closure_defs.length
-            while i >= 0 do
-                v.enter_visit(_n_closure_defs[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class AVarExpr
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_avarexpr (
@@ -8060,29 +6114,8 @@ redef class AVarExpr
     do
         v.enter_visit(_n_id)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-    end
 end
 redef class AVarAssignExpr
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_avarassignexpr (
@@ -8140,31 +6173,8 @@ redef class AVarAssignExpr
         v.enter_visit(_n_assign)
         v.enter_visit(_n_value)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_assign)
-        v.enter_visit(_n_value)
-    end
 end
 redef class AVarReassignExpr
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign_op=(n)
-    do
-        _n_assign_op = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_avarreassignexpr (
@@ -8222,26 +6232,8 @@ redef class AVarReassignExpr
         v.enter_visit(_n_assign_op)
         v.enter_visit(_n_value)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_assign_op)
-        v.enter_visit(_n_value)
-    end
 end
 redef class ARangeExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_arangeexpr (
@@ -8285,25 +6277,8 @@ redef class ARangeExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class ACrangeExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_acrangeexpr (
@@ -8347,25 +6322,8 @@ redef class ACrangeExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class AOrangeExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aorangeexpr (
@@ -8409,15 +6367,8 @@ redef class AOrangeExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
 redef class AArrayExpr
-
     private init empty_init do end
 
     init init_aarrayexpr (
@@ -8454,25 +6405,8 @@ redef class AArrayExpr
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       do
-           var i = _n_exprs.length
-            while i >= 0 do
-                v.enter_visit(_n_exprs[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class ASelfExpr
-    redef fun n_kwself=(n)
-    do
-        _n_kwself = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aselfexpr (
@@ -8502,14 +6436,8 @@ redef class ASelfExpr
     do
         v.enter_visit(_n_kwself)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwself)
-    end
 end
 redef class AImplicitSelfExpr
-
     private init empty_init do end
 
     init init_aimplicitselfexpr
@@ -8524,18 +6452,8 @@ redef class AImplicitSelfExpr
     redef fun visit_all(v: Visitor)
     do
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-    end
 end
 redef class ATrueExpr
-    redef fun n_kwtrue=(n)
-    do
-        _n_kwtrue = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_atrueexpr (
@@ -8565,19 +6483,8 @@ redef class ATrueExpr
     do
         v.enter_visit(_n_kwtrue)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwtrue)
-    end
 end
 redef class AFalseExpr
-    redef fun n_kwfalse=(n)
-    do
-        _n_kwfalse = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_afalseexpr (
@@ -8607,19 +6514,8 @@ redef class AFalseExpr
     do
         v.enter_visit(_n_kwfalse)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwfalse)
-    end
 end
 redef class ANullExpr
-    redef fun n_kwnull=(n)
-    do
-        _n_kwnull = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_anullexpr (
@@ -8649,19 +6545,8 @@ redef class ANullExpr
     do
         v.enter_visit(_n_kwnull)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwnull)
-    end
 end
 redef class AIntExpr
-    redef fun n_number=(n)
-    do
-        _n_number = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aintexpr (
@@ -8691,19 +6576,8 @@ redef class AIntExpr
     do
         v.enter_visit(_n_number)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_number)
-    end
 end
 redef class AFloatExpr
-    redef fun n_float=(n)
-    do
-        _n_float = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_afloatexpr (
@@ -8733,19 +6607,8 @@ redef class AFloatExpr
     do
         v.enter_visit(_n_float)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_float)
-    end
 end
 redef class ACharExpr
-    redef fun n_char=(n)
-    do
-        _n_char = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_acharexpr (
@@ -8775,19 +6638,8 @@ redef class ACharExpr
     do
         v.enter_visit(_n_char)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_char)
-    end
 end
 redef class AStringExpr
-    redef fun n_string=(n)
-    do
-        _n_string = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_astringexpr (
@@ -8817,19 +6669,8 @@ redef class AStringExpr
     do
         v.enter_visit(_n_string)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_string)
-    end
 end
 redef class AStartStringExpr
-    redef fun n_string=(n)
-    do
-        _n_string = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_astartstringexpr (
@@ -8859,19 +6700,8 @@ redef class AStartStringExpr
     do
         v.enter_visit(_n_string)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_string)
-    end
 end
 redef class AMidStringExpr
-    redef fun n_string=(n)
-    do
-        _n_string = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_amidstringexpr (
@@ -8901,19 +6731,8 @@ redef class AMidStringExpr
     do
         v.enter_visit(_n_string)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_string)
-    end
 end
 redef class AEndStringExpr
-    redef fun n_string=(n)
-    do
-        _n_string = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aendstringexpr (
@@ -8943,14 +6762,8 @@ redef class AEndStringExpr
     do
         v.enter_visit(_n_string)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_string)
-    end
 end
 redef class ASuperstringExpr
-
     private init empty_init do end
 
     init init_asuperstringexpr (
@@ -8987,25 +6800,8 @@ redef class ASuperstringExpr
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       do
-           var i = _n_exprs.length
-            while i >= 0 do
-                v.enter_visit(_n_exprs[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class AParExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aparexpr (
@@ -9035,29 +6831,8 @@ redef class AParExpr
     do
         v.enter_visit(_n_expr)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-    end
 end
 redef class AAsCastExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_kwas=(n)
-    do
-        _n_kwas = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aascastexpr (
@@ -9115,36 +6890,8 @@ redef class AAsCastExpr
         v.enter_visit(_n_kwas)
         v.enter_visit(_n_type)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_kwas)
-        v.enter_visit(_n_type)
-    end
 end
 redef class AAsNotnullExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_kwas=(n)
-    do
-        _n_kwas = n
-       n.parent = self
-    end
-    redef fun n_kwnot=(n)
-    do
-        _n_kwnot = n
-       n.parent = self
-    end
-    redef fun n_kwnull=(n)
-    do
-        _n_kwnull = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aasnotnullexpr (
@@ -9216,32 +6963,8 @@ redef class AAsNotnullExpr
         v.enter_visit(_n_kwnot)
         v.enter_visit(_n_kwnull)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_kwas)
-        v.enter_visit(_n_kwnot)
-        v.enter_visit(_n_kwnull)
-    end
 end
 redef class AIssetAttrExpr
-    redef fun n_kwisset=(n)
-    do
-        _n_kwisset = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aissetattrexpr (
@@ -9299,21 +7022,8 @@ redef class AIssetAttrExpr
         v.enter_visit(_n_expr)
         v.enter_visit(_n_id)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwisset)
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_id)
-    end
 end
 redef class APlusAssignOp
-    redef fun n_pluseq=(n)
-    do
-        _n_pluseq = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aplusassignop (
@@ -9343,19 +7053,8 @@ redef class APlusAssignOp
     do
         v.enter_visit(_n_pluseq)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_pluseq)
-    end
 end
 redef class AMinusAssignOp
-    redef fun n_minuseq=(n)
-    do
-        _n_minuseq = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aminusassignop (
@@ -9385,43 +7084,8 @@ redef class AMinusAssignOp
     do
         v.enter_visit(_n_minuseq)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_minuseq)
-    end
 end
 redef class AClosureDef
-    redef fun n_bang=(n)
-    do
-        _n_bang = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_kwdo=(n)
-    do
-        _n_kwdo = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_label=(n)
-    do
-        _n_label = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aclosuredef (
@@ -9443,8 +7107,10 @@ redef class AClosureDef
                _n_ids.add(n)
                n.parent = self
        end
-        _n_kwdo = n_kwdo.as(not null)
-       n_kwdo.parent = self
+        _n_kwdo = n_kwdo
+       if n_kwdo != null then
+               n_kwdo.parent = self
+       end
         _n_expr = n_expr
        if n_expr != null then
                n_expr.parent = self
@@ -9495,7 +7161,7 @@ redef class AClosureDef
                assert new_child isa TKwdo
                 _n_kwdo = new_child
            else
-               abort
+               _n_kwdo = null
             end
             return
        end
@@ -9528,27 +7194,9 @@ redef class AClosureDef
             for n in _n_ids do
                 v.enter_visit(n)
            end
-        v.enter_visit(_n_kwdo)
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
-        end
-        if _n_label != null then
-            v.enter_visit(_n_label.as(not null))
+        if _n_kwdo != null then
+            v.enter_visit(_n_kwdo.as(not null))
         end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_bang)
-        v.enter_visit(_n_id)
-       do
-           var i = _n_ids.length
-            while i >= 0 do
-                v.enter_visit(_n_ids[i])
-               i = i - 1
-           end
-       end
-        v.enter_visit(_n_kwdo)
         if _n_expr != null then
             v.enter_visit(_n_expr.as(not null))
         end
@@ -9558,12 +7206,6 @@ redef class AClosureDef
     end
 end
 redef class ASimpleClosureId
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_asimpleclosureid (
@@ -9593,19 +7235,8 @@ redef class ASimpleClosureId
     do
         v.enter_visit(_n_id)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-    end
 end
 redef class ABreakClosureId
-    redef fun n_kwbreak=(n)
-    do
-        _n_kwbreak = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_abreakclosureid (
@@ -9635,21 +7266,8 @@ redef class ABreakClosureId
     do
         v.enter_visit(_n_kwbreak)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwbreak)
-    end
 end
 redef class AQualified
-    redef fun n_classid=(n)
-    do
-        _n_classid = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aqualified (
@@ -9704,23 +7322,8 @@ redef class AQualified
             v.enter_visit(_n_classid.as(not null))
         end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       do
-           var i = _n_id.length
-            while i >= 0 do
-                v.enter_visit(_n_id[i])
-               i = i - 1
-           end
-       end
-        if _n_classid != null then
-            v.enter_visit(_n_classid.as(not null))
-        end
-    end
 end
 redef class ADoc
-
     private init empty_init do end
 
     init init_adoc (
@@ -9757,17 +7360,6 @@ redef class ADoc
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       do
-           var i = _n_comment.length
-            while i >= 0 do
-                v.enter_visit(_n_comment[i])
-               i = i - 1
-           end
-       end
-    end
 end
 
 redef class Start
@@ -9800,12 +7392,4 @@ redef class Start
         end
        v.enter_visit(_n_eof)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       v.enter_visit(_n_eof)
-        if _n_base != null then
-            v.enter_visit(_n_base.as(not null))
-        end
-    end
 end