parser: extends grammar to support annotations
[nit.git] / src / parser / parser_prod.nit
index 0535648..1abc515 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
@@ -21,7 +22,7 @@ redef class ANode
        # Replace itself with an other node in the AST
        fun replace_with(node: ANode)
        do
-               if (_parent != null) then
+               if _parent != null then
                        _parent.replace_child(self, node)
                end
        end
@@ -46,7 +47,7 @@ redef class Prod
 end
 
 # Abstract standard visitor
-class Visitor
+abstract class Visitor
        # What the visitor do when a node is visited
         # Concrete visitors should redefine this method.
         protected fun visit(e: nullable ANode) is abstract
@@ -70,21 +71,27 @@ redef class AModule
     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_extern_code_blocks: Collection[Object], # Should be Collection[AExternCodeBlock]
             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
                _n_imports.add(n)
                n.parent = self
        end
+       for n in n_extern_code_blocks do
+               assert n isa AExternCodeBlock
+               _n_extern_code_blocks.add(n)
+               n.parent = self
+       end
        for n in n_classdefs do
                assert n isa AClassdef
                _n_classdefs.add(n)
@@ -94,13 +101,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
@@ -116,6 +123,18 @@ redef class AModule
                 return
             end
         end
+        for i in [0.._n_extern_code_blocks.length[ do
+            if _n_extern_code_blocks[i] == old_child then
+                if new_child != null then
+                   assert new_child isa AExternCodeBlock
+                    _n_extern_code_blocks[i] = new_child
+                    new_child.parent = self
+                else
+                    _n_extern_code_blocks.remove_at(i)
+                end
+                return
+            end
+        end
         for i in [0.._n_classdefs.length[ do
             if _n_classdefs[i] == old_child then
                 if new_child != null then
@@ -132,24 +151,28 @@ 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)
            end
+            for n in _n_extern_code_blocks do
+                v.enter_visit(n)
+           end
             for n in _n_classdefs do
                 v.enter_visit(n)
            end
     end
 end
-redef class APackagedecl
+redef class AModuledecl
     private init empty_init do end
 
-    init init_apackagedecl (
+    init init_amoduledecl (
             n_doc: nullable ADoc,
-            n_kwpackage: nullable TKwpackage,
-            n_id: nullable TId
+            n_kwmodule: nullable TKwmodule,
+            n_name: nullable AModuleName,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -157,10 +180,14 @@ 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_id = n_id.as(not null)
-       n_id.parent = self
+        _n_kwmodule = n_kwmodule.as(not null)
+       n_kwmodule.parent = self
+        _n_name = n_name.as(not null)
+       n_name.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -175,26 +202,36 @@ 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
             return
        end
-        if _n_id == old_child then
+        if _n_name == 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 AModuleName
+                _n_name = new_child
            else
                abort
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -202,8 +239,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)
+        v.enter_visit(_n_kwmodule)
+        v.enter_visit(_n_name)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AStdImport
@@ -212,7 +252,8 @@ redef class AStdImport
     init init_astdimport (
             n_visibility: nullable AVisibility,
             n_kwimport: nullable TKwimport,
-            n_id: nullable TId
+            n_name: nullable AModuleName,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -220,8 +261,12 @@ redef class AStdImport
        n_visibility.parent = self
         _n_kwimport = n_kwimport.as(not null)
        n_kwimport.parent = self
-        _n_id = n_id.as(not null)
-       n_id.parent = self
+        _n_name = n_name.as(not null)
+       n_name.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -246,23 +291,36 @@ redef class AStdImport
             end
             return
        end
-        if _n_id == old_child then
+        if _n_name == 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 AModuleName
+                _n_name = new_child
            else
                abort
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_visibility)
         v.enter_visit(_n_kwimport)
-        v.enter_visit(_n_id)
+        v.enter_visit(_n_name)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class ANoImport
@@ -443,8 +501,11 @@ redef class AStdClassdef
             n_classkind: nullable AClasskind,
             n_id: nullable TClassid,
             n_formaldefs: Collection[Object], # Should be Collection[AFormaldef]
+            n_annotations: nullable AAnnotations,
+            n_extern_code_block: nullable AExternCodeBlock,
             n_superclasses: Collection[Object], # Should be Collection[ASuperclass]
-            n_propdefs: Collection[Object] # Should be Collection[APropdef]
+            n_propdefs: Collection[Object], # Should be Collection[APropdef]
+            n_kwend: nullable TKwend
     )
     do
         empty_init
@@ -469,6 +530,14 @@ redef class AStdClassdef
                _n_formaldefs.add(n)
                n.parent = self
        end
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
+        _n_extern_code_block = n_extern_code_block
+       if n_extern_code_block != null then
+               n_extern_code_block.parent = self
+       end
        for n in n_superclasses do
                assert n isa ASuperclass
                _n_superclasses.add(n)
@@ -479,6 +548,8 @@ redef class AStdClassdef
                _n_propdefs.add(n)
                n.parent = self
        end
+        _n_kwend = n_kwend.as(not null)
+       n_kwend.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -545,6 +616,26 @@ redef class AStdClassdef
                 return
             end
         end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
+        if _n_extern_code_block == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExternCodeBlock
+                _n_extern_code_block = new_child
+           else
+               _n_extern_code_block = null
+            end
+            return
+       end
         for i in [0.._n_superclasses.length[ do
             if _n_superclasses[i] == old_child then
                 if new_child != null then
@@ -569,6 +660,16 @@ redef class AStdClassdef
                 return
             end
         end
+        if _n_kwend == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwend
+                _n_kwend = new_child
+           else
+               abort
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -587,12 +688,19 @@ redef class AStdClassdef
             for n in _n_formaldefs do
                 v.enter_visit(n)
            end
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
+        if _n_extern_code_block != null then
+            v.enter_visit(_n_extern_code_block.as(not null))
+        end
             for n in _n_superclasses do
                 v.enter_visit(n)
            end
             for n in _n_propdefs do
                 v.enter_visit(n)
            end
+        v.enter_visit(_n_kwend)
     end
 end
 redef class ATopClassdef
@@ -778,35 +886,84 @@ redef class AInterfaceClasskind
         v.enter_visit(_n_kwinterface)
     end
 end
-redef class AUniversalClasskind
+redef class AEnumClasskind
+    private init empty_init do end
+
+    init init_aenumclasskind (
+            n_kwenum: nullable TKwenum
+    )
+    do
+        empty_init
+        _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_kwenum == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwenum
+                _n_kwenum = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_kwenum)
+    end
+end
+redef class AExternClasskind
     private init empty_init do end
 
-    init init_auniversalclasskind (
-            n_kwuniversal: nullable TKwuniversal
+    init init_aexternclasskind (
+            n_kwextern: nullable TKwextern,
+            n_kwclass: nullable TKwclass
     )
     do
         empty_init
-        _n_kwuniversal = n_kwuniversal.as(not null)
-       n_kwuniversal.parent = self
+        _n_kwextern = n_kwextern.as(not null)
+       n_kwextern.parent = self
+        _n_kwclass = n_kwclass
+       if n_kwclass != null then
+               n_kwclass.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        if _n_kwuniversal == old_child then
+        if _n_kwextern == 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 TKwextern
+                _n_kwextern = new_child
            else
                abort
             end
             return
        end
+        if _n_kwclass == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwclass
+                _n_kwclass = new_child
+           else
+               _n_kwclass = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwuniversal)
+        v.enter_visit(_n_kwextern)
+        if _n_kwclass != null then
+            v.enter_visit(_n_kwclass.as(not null))
+        end
     end
 end
 redef class AFormaldef
@@ -814,7 +971,8 @@ redef class AFormaldef
 
     init init_aformaldef (
             n_id: nullable TClassid,
-            n_type: nullable AType
+            n_type: nullable AType,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -824,6 +982,10 @@ redef class AFormaldef
        if n_type != null then
                n_type.parent = self
        end
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -848,6 +1010,16 @@ redef class AFormaldef
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -856,49 +1028,40 @@ redef class AFormaldef
         if _n_type != null then
             v.enter_visit(_n_type.as(not null))
         end
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class ASuperclass
     private init empty_init do end
 
     init init_asuperclass (
-            n_kwspecial: nullable TKwspecial,
             n_kwsuper: nullable TKwsuper,
-            n_type: nullable AType
+            n_type: nullable AType,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
-        _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_kwsuper = n_kwsuper.as(not null)
+       n_kwsuper.parent = self
         _n_type = n_type.as(not null)
        n_type.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        if _n_kwspecial == old_child then
-            if new_child != null then
-                new_child.parent = self
-               assert new_child isa TKwspecial
-                _n_kwspecial = new_child
-           else
-               _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
+               abort
             end
             return
        end
@@ -912,17 +1075,25 @@ redef class ASuperclass
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
-        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_kwsuper)
         v.enter_visit(_n_type)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AAttrPropdef
@@ -936,7 +1107,9 @@ redef class AAttrPropdef
             n_visibility: nullable AVisibility,
             n_kwvar: nullable TKwvar,
             n_id: nullable TAttrid,
+            n_id2: nullable TId,
             n_type: nullable AType,
+            n_annotations: nullable AAnnotations,
             n_expr: nullable AExpr
     )
     do
@@ -961,12 +1134,22 @@ 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
        end
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
         _n_expr = n_expr
        if n_expr != null then
                n_expr.parent = self
@@ -1041,7 +1224,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
@@ -1055,6 +1248,16 @@ redef class AAttrPropdef
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
         if _n_expr == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -1083,10 +1286,18 @@ 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
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
         if _n_expr != null then
             v.enter_visit(_n_expr.as(not null))
         end
@@ -1196,7 +1407,8 @@ redef class ADeferredMethPropdef
             n_visibility: nullable AVisibility,
             n_kwmeth: nullable TKwmeth,
             n_methid: nullable AMethid,
-            n_signature: nullable ASignature
+            n_signature: nullable ASignature,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -1216,6 +1428,10 @@ redef class ADeferredMethPropdef
        n_methid.parent = self
         _n_signature = n_signature.as(not null)
        n_signature.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -1280,6 +1496,16 @@ redef class ADeferredMethPropdef
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -1294,6 +1520,9 @@ redef class ADeferredMethPropdef
         v.enter_visit(_n_kwmeth)
         v.enter_visit(_n_methid)
         v.enter_visit(_n_signature)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AInternMethPropdef
@@ -1415,7 +1644,9 @@ redef class AExternMethPropdef
             n_kwmeth: nullable TKwmeth,
             n_methid: nullable AMethid,
             n_signature: nullable ASignature,
-            n_extern: nullable TString
+            n_extern: nullable TString,
+            n_extern_calls: nullable AExternCalls,
+            n_extern_code_block: nullable AExternCodeBlock
     )
     do
         empty_init
@@ -1439,6 +1670,14 @@ redef class AExternMethPropdef
        if n_extern != null then
                n_extern.parent = self
        end
+        _n_extern_calls = n_extern_calls
+       if n_extern_calls != null then
+               n_extern_calls.parent = self
+       end
+        _n_extern_code_block = n_extern_code_block
+       if n_extern_code_block != null then
+               n_extern_code_block.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -1513,6 +1752,26 @@ redef class AExternMethPropdef
             end
             return
        end
+        if _n_extern_calls == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExternCalls
+                _n_extern_calls = new_child
+           else
+               _n_extern_calls = null
+            end
+            return
+       end
+        if _n_extern_code_block == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExternCodeBlock
+                _n_extern_code_block = new_child
+           else
+               _n_extern_code_block = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -1530,6 +1789,12 @@ redef class AExternMethPropdef
         if _n_extern != null then
             v.enter_visit(_n_extern.as(not null))
         end
+        if _n_extern_calls != null then
+            v.enter_visit(_n_extern_calls.as(not null))
+        end
+        if _n_extern_code_block != null then
+            v.enter_visit(_n_extern_code_block.as(not null))
+        end
     end
 end
 redef class AConcreteMethPropdef
@@ -1542,6 +1807,7 @@ redef class AConcreteMethPropdef
             n_kwmeth: nullable TKwmeth,
             n_methid: nullable AMethid,
             n_signature: nullable ASignature,
+            n_annotations: nullable AAnnotations,
             n_block: nullable AExpr
     )
     do
@@ -1562,6 +1828,10 @@ redef class AConcreteMethPropdef
        n_methid.parent = self
         _n_signature = n_signature.as(not null)
        n_signature.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
         _n_block = n_block
        if n_block != null then
                n_block.parent = self
@@ -1630,6 +1900,16 @@ redef class AConcreteMethPropdef
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
         if _n_block == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -1654,6 +1934,9 @@ redef class AConcreteMethPropdef
         v.enter_visit(_n_kwmeth)
         v.enter_visit(_n_methid)
         v.enter_visit(_n_signature)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
         if _n_block != null then
             v.enter_visit(_n_block.as(not null))
         end
@@ -1669,6 +1952,7 @@ redef class AConcreteInitPropdef
             n_kwinit: nullable TKwinit,
             n_methid: nullable AMethid,
             n_signature: nullable ASignature,
+            n_annotations: nullable AAnnotations,
             n_block: nullable AExpr
     )
     do
@@ -1691,6 +1975,10 @@ redef class AConcreteInitPropdef
        end
         _n_signature = n_signature.as(not null)
        n_signature.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
         _n_block = n_block
        if n_block != null then
                n_block.parent = self
@@ -1759,6 +2047,16 @@ redef class AConcreteInitPropdef
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
         if _n_block == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -1785,32 +2083,74 @@ redef class AConcreteInitPropdef
             v.enter_visit(_n_methid.as(not null))
         end
         v.enter_visit(_n_signature)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
         if _n_block != null then
             v.enter_visit(_n_block.as(not null))
         end
     end
 end
-redef class AMainMethPropdef
+redef class AExternInitPropdef
     private init empty_init do end
 
-    init init_amainmethpropdef (
+    init init_aexterninitpropdef (
+            n_doc: nullable ADoc,
             n_kwredef: nullable TKwredef,
-            n_block: nullable AExpr
+            n_visibility: nullable AVisibility,
+            n_kwnew: nullable TKwnew,
+            n_methid: nullable AMethid,
+            n_signature: nullable ASignature,
+            n_extern: nullable TString,
+            n_extern_calls: nullable AExternCalls,
+            n_extern_code_block: nullable AExternCodeBlock
     )
     do
         empty_init
+        _n_doc = n_doc
+       if n_doc != null then
+               n_doc.parent = self
+       end
         _n_kwredef = n_kwredef
        if n_kwredef != null then
                n_kwredef.parent = self
        end
-        _n_block = n_block
-       if n_block != null then
-               n_block.parent = self
+        _n_visibility = n_visibility.as(not null)
+       n_visibility.parent = self
+        _n_kwnew = n_kwnew.as(not null)
+       n_kwnew.parent = self
+        _n_methid = n_methid
+       if n_methid != null then
+               n_methid.parent = self
+       end
+        _n_signature = n_signature.as(not null)
+       n_signature.parent = self
+        _n_extern = n_extern
+       if n_extern != null then
+               n_extern.parent = self
+       end
+        _n_extern_calls = n_extern_calls
+       if n_extern_calls != null then
+               n_extern_calls.parent = self
+       end
+        _n_extern_code_block = n_extern_code_block
+       if n_extern_code_block != null then
+               n_extern_code_block.parent = self
        end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
+        if _n_doc == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa ADoc
+                _n_doc = new_child
+           else
+               _n_doc = null
+            end
+            return
+       end
         if _n_kwredef == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -1821,12 +2161,140 @@ redef class AMainMethPropdef
             end
             return
        end
-        if _n_block == old_child then
+        if _n_visibility == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa AExpr
-                _n_block = new_child
-           else
+               assert new_child isa AVisibility
+                _n_visibility = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_kwnew == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwnew
+                _n_kwnew = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_methid == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AMethid
+                _n_methid = new_child
+           else
+               _n_methid = null
+            end
+            return
+       end
+        if _n_signature == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa ASignature
+                _n_signature = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_extern == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TString
+                _n_extern = new_child
+           else
+               _n_extern = null
+            end
+            return
+       end
+        if _n_extern_calls == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExternCalls
+                _n_extern_calls = new_child
+           else
+               _n_extern_calls = null
+            end
+            return
+       end
+        if _n_extern_code_block == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExternCodeBlock
+                _n_extern_code_block = new_child
+           else
+               _n_extern_code_block = null
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(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_kwnew)
+        if _n_methid != null then
+            v.enter_visit(_n_methid.as(not null))
+        end
+        v.enter_visit(_n_signature)
+        if _n_extern != null then
+            v.enter_visit(_n_extern.as(not null))
+        end
+        if _n_extern_calls != null then
+            v.enter_visit(_n_extern_calls.as(not null))
+        end
+        if _n_extern_code_block != null then
+            v.enter_visit(_n_extern_code_block.as(not null))
+        end
+    end
+end
+redef class AMainMethPropdef
+    private init empty_init do end
+
+    init init_amainmethpropdef (
+            n_kwredef: nullable TKwredef,
+            n_block: nullable AExpr
+    )
+    do
+        empty_init
+        _n_kwredef = n_kwredef
+       if n_kwredef != null then
+               n_kwredef.parent = self
+       end
+        _n_block = n_block
+       if n_block != null then
+               n_block.parent = self
+       end
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_kwredef == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwredef
+                _n_kwredef = new_child
+           else
+               _n_kwredef = null
+            end
+            return
+       end
+        if _n_block == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_block = new_child
+           else
                _n_block = null
             end
             return
@@ -1852,7 +2320,8 @@ redef class ATypePropdef
             n_visibility: nullable AVisibility,
             n_kwtype: nullable TKwtype,
             n_id: nullable TClassid,
-            n_type: nullable AType
+            n_type: nullable AType,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -1872,6 +2341,10 @@ redef class ATypePropdef
        n_id.parent = self
         _n_type = n_type.as(not null)
        n_type.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -1936,6 +2409,16 @@ redef class ATypePropdef
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -1950,6 +2433,9 @@ redef class ATypePropdef
         v.enter_visit(_n_kwtype)
         v.enter_visit(_n_id)
         v.enter_visit(_n_type)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AReadAble
@@ -2006,6 +2492,7 @@ redef class AWriteAble
 
     init init_awriteable (
             n_kwredef: nullable TKwredef,
+            n_visibility: nullable AVisibility,
             n_kwwritable: nullable TKwwritable
     )
     do
@@ -2014,6 +2501,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
@@ -2030,6 +2521,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
@@ -2047,6 +2548,9 @@ redef class AWriteAble
         if _n_kwredef != null then
             v.enter_visit(_n_kwredef.as(not null))
         end
+        if _n_visibility != null then
+            v.enter_visit(_n_visibility.as(not null))
+        end
         v.enter_visit(_n_kwwritable)
     end
 end
@@ -2422,6 +2926,68 @@ redef class AGtMethid
         v.enter_visit(_n_gt)
     end
 end
+redef class ALlMethid
+    private init empty_init do end
+
+    init init_allmethid (
+            n_ll: nullable TLl
+    )
+    do
+        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 AGgMethid
+    private init empty_init do end
+
+    init init_aggmethid (
+            n_gg: nullable TGg
+    )
+    do
+        empty_init
+        _n_gg = n_gg.as(not null)
+       n_gg.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        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
 
@@ -2606,17 +3172,27 @@ redef class ASignature
     private init empty_init do end
 
     init init_asignature (
+            n_opar: nullable TOpar,
             n_params: Collection[Object], # Should be Collection[AParam]
+            n_cpar: nullable TCpar,
             n_type: nullable AType,
             n_closure_decls: Collection[Object] # Should be Collection[AClosureDecl]
     )
     do
         empty_init
+        _n_opar = n_opar
+       if n_opar != null then
+               n_opar.parent = self
+       end
        for n in n_params do
                assert n isa AParam
                _n_params.add(n)
                n.parent = self
        end
+        _n_cpar = n_cpar
+       if n_cpar != null then
+               n_cpar.parent = self
+       end
         _n_type = n_type
        if n_type != null then
                n_type.parent = self
@@ -2630,6 +3206,16 @@ redef class ASignature
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
+        if _n_opar == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TOpar
+                _n_opar = new_child
+           else
+               _n_opar = null
+            end
+            return
+       end
         for i in [0.._n_params.length[ do
             if _n_params[i] == old_child then
                 if new_child != null then
@@ -2642,6 +3228,16 @@ redef class ASignature
                 return
             end
         end
+        if _n_cpar == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TCpar
+                _n_cpar = new_child
+           else
+               _n_cpar = null
+            end
+            return
+       end
         if _n_type == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -2668,9 +3264,15 @@ redef class ASignature
 
     redef fun visit_all(v: Visitor)
     do
+        if _n_opar != null then
+            v.enter_visit(_n_opar.as(not null))
+        end
             for n in _n_params do
                 v.enter_visit(n)
            end
+        if _n_cpar != null then
+            v.enter_visit(_n_cpar.as(not null))
+        end
         if _n_type != null then
             v.enter_visit(_n_type.as(not null))
         end
@@ -2685,7 +3287,8 @@ redef class AParam
     init init_aparam (
             n_id: nullable TId,
             n_type: nullable AType,
-            n_dotdotdot: nullable TDotdotdot
+            n_dotdotdot: nullable TDotdotdot,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -2699,6 +3302,10 @@ redef class AParam
        if n_dotdotdot != null then
                n_dotdotdot.parent = self
        end
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -2733,6 +3340,16 @@ redef class AParam
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -2744,6 +3361,9 @@ redef class AParam
         if _n_dotdotdot != null then
             v.enter_visit(_n_dotdotdot.as(not null))
         end
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AClosureDecl
@@ -2847,7 +3467,8 @@ redef class AType
     init init_atype (
             n_kwnullable: nullable TKwnullable,
             n_id: nullable TClassid,
-            n_types: Collection[Object] # Should be Collection[AType]
+            n_types: Collection[Object], # Should be Collection[AType]
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -2862,6 +3483,10 @@ redef class AType
                _n_types.add(n)
                n.parent = self
        end
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -2898,6 +3523,16 @@ redef class AType
                 return
             end
         end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -2909,6 +3544,9 @@ redef class AType
             for n in _n_types do
                 v.enter_visit(n)
            end
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class ALabel
@@ -2960,7 +3598,8 @@ redef class ABlockExpr
     private init empty_init do end
 
     init init_ablockexpr (
-            n_expr: Collection[Object] # Should be Collection[AExpr]
+            n_expr: Collection[Object], # Should be Collection[AExpr]
+            n_kwend: nullable TKwend
     )
     do
         empty_init
@@ -2969,6 +3608,10 @@ redef class ABlockExpr
                _n_expr.add(n)
                n.parent = self
        end
+        _n_kwend = n_kwend
+       if n_kwend != null then
+               n_kwend.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -2985,6 +3628,16 @@ redef class ABlockExpr
                 return
             end
         end
+        if _n_kwend == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwend
+                _n_kwend = new_child
+           else
+               _n_kwend = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -2992,6 +3645,9 @@ redef class ABlockExpr
             for n in _n_expr do
                 v.enter_visit(n)
            end
+        if _n_kwend != null then
+            v.enter_visit(_n_kwend.as(not null))
+        end
     end
 end
 redef class AVardeclExpr
@@ -3002,7 +3658,8 @@ redef class AVardeclExpr
             n_id: nullable TId,
             n_type: nullable AType,
             n_assign: nullable TAssign,
-            n_expr: nullable AExpr
+            n_expr: nullable AExpr,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -3022,6 +3679,10 @@ redef class AVardeclExpr
        if n_expr != null then
                n_expr.parent = self
        end
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -3076,6 +3737,16 @@ redef class AVardeclExpr
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -3091,6 +3762,9 @@ redef class AVardeclExpr
         if _n_expr != null then
             v.enter_visit(_n_expr.as(not null))
         end
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AReturnExpr
@@ -3731,7 +4405,7 @@ redef class AForExpr
 
     init init_aforexpr (
             n_kwfor: nullable TKwfor,
-            n_id: nullable TId,
+            n_ids: Collection[Object], # Should be Collection[TId]
             n_expr: nullable AExpr,
             n_kwdo: nullable TKwdo,
             n_block: nullable AExpr,
@@ -3741,8 +4415,11 @@ redef class AForExpr
         empty_init
         _n_kwfor = n_kwfor.as(not null)
        n_kwfor.parent = self
-        _n_id = n_id.as(not null)
-       n_id.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)
@@ -3769,16 +4446,18 @@ redef class AForExpr
             end
             return
        end
-        if _n_id == old_child then
-            if new_child != null then
-                new_child.parent = self
-               assert new_child isa TId
-                _n_id = 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
@@ -3824,7 +4503,9 @@ redef class AForExpr
     redef fun visit_all(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
@@ -4442,6 +5123,51 @@ redef class ALeExpr
         v.enter_visit(_n_expr2)
     end
 end
+redef class ALlExpr
+    private init empty_init do end
+
+    init init_allexpr (
+            n_expr: nullable AExpr,
+            n_expr2: nullable AExpr
+    )
+    do
+        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
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        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 visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_expr)
+        v.enter_visit(_n_expr2)
+    end
+end
 redef class AGtExpr
     private init empty_init do end
 
@@ -4532,6 +5258,51 @@ redef class AGeExpr
         v.enter_visit(_n_expr2)
     end
 end
+redef class AGgExpr
+    private init empty_init do end
+
+    init init_aggexpr (
+            n_expr: nullable AExpr,
+            n_expr2: nullable AExpr
+    )
+    do
+        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
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        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 visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_expr)
+        v.enter_visit(_n_expr2)
+    end
+end
 redef class AIsaExpr
     private init empty_init do end
 
@@ -4899,7 +5670,7 @@ redef class ANewExpr
             n_kwnew: nullable TKwnew,
             n_type: nullable AType,
             n_id: nullable TId,
-            n_args: Collection[Object] # Should be Collection[AExpr]
+            n_args: nullable AExprs
     )
     do
         empty_init
@@ -4911,11 +5682,8 @@ redef class ANewExpr
        if n_id != null then
                n_id.parent = self
        end
-       for n in n_args do
-               assert n isa AExpr
-               _n_args.add(n)
-               n.parent = self
-       end
+        _n_args = n_args.as(not null)
+       n_args.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -4950,18 +5718,16 @@ redef class ANewExpr
             end
             return
        end
-        for i in [0.._n_args.length[ do
-            if _n_args[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AExpr
-                    _n_args[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_args.remove_at(i)
-                end
-                return
+        if _n_args == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExprs
+                _n_args = new_child
+           else
+               abort
             end
-        end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -4971,9 +5737,7 @@ redef class ANewExpr
         if _n_id != null then
             v.enter_visit(_n_id.as(not null))
         end
-            for n in _n_args do
-                v.enter_visit(n)
-           end
+        v.enter_visit(_n_args)
     end
 end
 redef class AAttrExpr
@@ -5173,7 +5937,7 @@ redef class ACallExpr
     init init_acallexpr (
             n_expr: nullable AExpr,
             n_id: nullable TId,
-            n_args: Collection[Object], # Should be Collection[AExpr]
+            n_args: nullable AExprs,
             n_closure_defs: Collection[Object] # Should be Collection[AClosureDef]
     )
     do
@@ -5182,11 +5946,8 @@ redef class ACallExpr
        n_expr.parent = self
         _n_id = n_id.as(not null)
        n_id.parent = self
-       for n in n_args do
-               assert n isa AExpr
-               _n_args.add(n)
-               n.parent = self
-       end
+        _n_args = n_args.as(not null)
+       n_args.parent = self
        for n in n_closure_defs do
                assert n isa AClosureDef
                _n_closure_defs.add(n)
@@ -5216,18 +5977,16 @@ redef class ACallExpr
             end
             return
        end
-        for i in [0.._n_args.length[ do
-            if _n_args[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AExpr
-                    _n_args[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_args.remove_at(i)
-                end
-                return
+        if _n_args == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExprs
+                _n_args = new_child
+           else
+               abort
             end
-        end
+            return
+       end
         for i in [0.._n_closure_defs.length[ do
             if _n_closure_defs[i] == old_child then
                 if new_child != null then
@@ -5246,9 +6005,7 @@ redef class ACallExpr
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_id)
-            for n in _n_args do
-                v.enter_visit(n)
-           end
+        v.enter_visit(_n_args)
             for n in _n_closure_defs do
                 v.enter_visit(n)
            end
@@ -5260,7 +6017,7 @@ redef class ACallAssignExpr
     init init_acallassignexpr (
             n_expr: nullable AExpr,
             n_id: nullable TId,
-            n_args: Collection[Object], # Should be Collection[AExpr]
+            n_args: nullable AExprs,
             n_assign: nullable TAssign,
             n_value: nullable AExpr
     )
@@ -5270,11 +6027,8 @@ redef class ACallAssignExpr
        n_expr.parent = self
         _n_id = n_id.as(not null)
        n_id.parent = self
-       for n in n_args do
-               assert n isa AExpr
-               _n_args.add(n)
-               n.parent = self
-       end
+        _n_args = n_args.as(not null)
+       n_args.parent = self
         _n_assign = n_assign.as(not null)
        n_assign.parent = self
         _n_value = n_value.as(not null)
@@ -5303,18 +6057,16 @@ redef class ACallAssignExpr
             end
             return
        end
-        for i in [0.._n_args.length[ do
-            if _n_args[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AExpr
-                    _n_args[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_args.remove_at(i)
-                end
-                return
+        if _n_args == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExprs
+                _n_args = new_child
+           else
+               abort
             end
-        end
+            return
+       end
         if _n_assign == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -5341,9 +6093,7 @@ redef class ACallAssignExpr
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_id)
-            for n in _n_args do
-                v.enter_visit(n)
-           end
+        v.enter_visit(_n_args)
         v.enter_visit(_n_assign)
         v.enter_visit(_n_value)
     end
@@ -5354,7 +6104,7 @@ redef class ACallReassignExpr
     init init_acallreassignexpr (
             n_expr: nullable AExpr,
             n_id: nullable TId,
-            n_args: Collection[Object], # Should be Collection[AExpr]
+            n_args: nullable AExprs,
             n_assign_op: nullable AAssignOp,
             n_value: nullable AExpr
     )
@@ -5364,11 +6114,8 @@ redef class ACallReassignExpr
        n_expr.parent = self
         _n_id = n_id.as(not null)
        n_id.parent = self
-       for n in n_args do
-               assert n isa AExpr
-               _n_args.add(n)
-               n.parent = self
-       end
+        _n_args = n_args.as(not null)
+       n_args.parent = self
         _n_assign_op = n_assign_op.as(not null)
        n_assign_op.parent = self
         _n_value = n_value.as(not null)
@@ -5397,18 +6144,16 @@ redef class ACallReassignExpr
             end
             return
        end
-        for i in [0.._n_args.length[ do
-            if _n_args[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AExpr
-                    _n_args[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_args.remove_at(i)
-                end
-                return
+        if _n_args == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExprs
+                _n_args = new_child
+           else
+               abort
             end
-        end
+            return
+       end
         if _n_assign_op == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -5435,9 +6180,7 @@ redef class ACallReassignExpr
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_id)
-            for n in _n_args do
-                v.enter_visit(n)
-           end
+        v.enter_visit(_n_args)
         v.enter_visit(_n_assign_op)
         v.enter_visit(_n_value)
     end
@@ -5448,7 +6191,7 @@ redef class ASuperExpr
     init init_asuperexpr (
             n_qualified: nullable AQualified,
             n_kwsuper: nullable TKwsuper,
-            n_args: Collection[Object] # Should be Collection[AExpr]
+            n_args: nullable AExprs
     )
     do
         empty_init
@@ -5458,11 +6201,8 @@ redef class ASuperExpr
        end
         _n_kwsuper = n_kwsuper.as(not null)
        n_kwsuper.parent = self
-       for n in n_args do
-               assert n isa AExpr
-               _n_args.add(n)
-               n.parent = self
-       end
+        _n_args = n_args.as(not null)
+       n_args.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -5487,18 +6227,16 @@ redef class ASuperExpr
             end
             return
        end
-        for i in [0.._n_args.length[ do
-            if _n_args[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AExpr
-                    _n_args[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_args.remove_at(i)
-                end
-                return
+        if _n_args == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExprs
+                _n_args = new_child
+           else
+               abort
             end
-        end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -5507,9 +6245,7 @@ redef class ASuperExpr
             v.enter_visit(_n_qualified.as(not null))
         end
         v.enter_visit(_n_kwsuper)
-            for n in _n_args do
-                v.enter_visit(n)
-           end
+        v.enter_visit(_n_args)
     end
 end
 redef class AInitExpr
@@ -5518,7 +6254,7 @@ redef class AInitExpr
     init init_ainitexpr (
             n_expr: nullable AExpr,
             n_kwinit: nullable TKwinit,
-            n_args: Collection[Object] # Should be Collection[AExpr]
+            n_args: nullable AExprs
     )
     do
         empty_init
@@ -5526,11 +6262,8 @@ redef class AInitExpr
        n_expr.parent = self
         _n_kwinit = n_kwinit.as(not null)
        n_kwinit.parent = self
-       for n in n_args do
-               assert n isa AExpr
-               _n_args.add(n)
-               n.parent = self
-       end
+        _n_args = n_args.as(not null)
+       n_args.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -5555,27 +6288,23 @@ redef class AInitExpr
             end
             return
        end
-        for i in [0.._n_args.length[ do
-            if _n_args[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AExpr
-                    _n_args[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_args.remove_at(i)
-                end
-                return
+        if _n_args == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExprs
+                _n_args = new_child
+           else
+               abort
             end
-        end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_kwinit)
-            for n in _n_args do
-                v.enter_visit(n)
-           end
+        v.enter_visit(_n_args)
     end
 end
 redef class ABraExpr
@@ -5583,18 +6312,15 @@ redef class ABraExpr
 
     init init_abraexpr (
             n_expr: nullable AExpr,
-            n_args: Collection[Object], # Should be Collection[AExpr]
+            n_args: nullable AExprs,
             n_closure_defs: Collection[Object] # Should be Collection[AClosureDef]
     )
     do
         empty_init
         _n_expr = n_expr.as(not null)
        n_expr.parent = self
-       for n in n_args do
-               assert n isa AExpr
-               _n_args.add(n)
-               n.parent = self
-       end
+        _n_args = n_args.as(not null)
+       n_args.parent = self
        for n in n_closure_defs do
                assert n isa AClosureDef
                _n_closure_defs.add(n)
@@ -5614,18 +6340,16 @@ redef class ABraExpr
             end
             return
        end
-        for i in [0.._n_args.length[ do
-            if _n_args[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AExpr
-                    _n_args[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_args.remove_at(i)
-                end
-                return
+        if _n_args == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExprs
+                _n_args = new_child
+           else
+               abort
             end
-        end
+            return
+       end
         for i in [0.._n_closure_defs.length[ do
             if _n_closure_defs[i] == old_child then
                 if new_child != null then
@@ -5643,9 +6367,7 @@ redef class ABraExpr
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
-            for n in _n_args do
-                v.enter_visit(n)
-           end
+        v.enter_visit(_n_args)
             for n in _n_closure_defs do
                 v.enter_visit(n)
            end
@@ -5656,7 +6378,7 @@ redef class ABraAssignExpr
 
     init init_abraassignexpr (
             n_expr: nullable AExpr,
-            n_args: Collection[Object], # Should be Collection[AExpr]
+            n_args: nullable AExprs,
             n_assign: nullable TAssign,
             n_value: nullable AExpr
     )
@@ -5664,11 +6386,8 @@ redef class ABraAssignExpr
         empty_init
         _n_expr = n_expr.as(not null)
        n_expr.parent = self
-       for n in n_args do
-               assert n isa AExpr
-               _n_args.add(n)
-               n.parent = self
-       end
+        _n_args = n_args.as(not null)
+       n_args.parent = self
         _n_assign = n_assign.as(not null)
        n_assign.parent = self
         _n_value = n_value.as(not null)
@@ -5687,18 +6406,16 @@ redef class ABraAssignExpr
             end
             return
        end
-        for i in [0.._n_args.length[ do
-            if _n_args[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AExpr
-                    _n_args[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_args.remove_at(i)
-                end
-                return
+        if _n_args == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExprs
+                _n_args = new_child
+           else
+               abort
             end
-        end
+            return
+       end
         if _n_assign == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -5724,9 +6441,7 @@ redef class ABraAssignExpr
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
-            for n in _n_args do
-                v.enter_visit(n)
-           end
+        v.enter_visit(_n_args)
         v.enter_visit(_n_assign)
         v.enter_visit(_n_value)
     end
@@ -5736,7 +6451,7 @@ redef class ABraReassignExpr
 
     init init_abrareassignexpr (
             n_expr: nullable AExpr,
-            n_args: Collection[Object], # Should be Collection[AExpr]
+            n_args: nullable AExprs,
             n_assign_op: nullable AAssignOp,
             n_value: nullable AExpr
     )
@@ -5744,11 +6459,8 @@ redef class ABraReassignExpr
         empty_init
         _n_expr = n_expr.as(not null)
        n_expr.parent = self
-       for n in n_args do
-               assert n isa AExpr
-               _n_args.add(n)
-               n.parent = self
-       end
+        _n_args = n_args.as(not null)
+       n_args.parent = self
         _n_assign_op = n_assign_op.as(not null)
        n_assign_op.parent = self
         _n_value = n_value.as(not null)
@@ -5767,18 +6479,16 @@ redef class ABraReassignExpr
             end
             return
        end
-        for i in [0.._n_args.length[ do
-            if _n_args[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AExpr
-                    _n_args[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_args.remove_at(i)
-                end
-                return
+        if _n_args == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExprs
+                _n_args = new_child
+           else
+               abort
             end
-        end
+            return
+       end
         if _n_assign_op == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -5804,9 +6514,7 @@ redef class ABraReassignExpr
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
-            for n in _n_args do
-                v.enter_visit(n)
-           end
+        v.enter_visit(_n_args)
         v.enter_visit(_n_assign_op)
         v.enter_visit(_n_value)
     end
@@ -5816,18 +6524,15 @@ redef class AClosureCallExpr
 
     init init_aclosurecallexpr (
             n_id: nullable TId,
-            n_args: Collection[Object], # Should be Collection[AExpr]
+            n_args: nullable AExprs,
             n_closure_defs: Collection[Object] # Should be Collection[AClosureDef]
     )
     do
         empty_init
         _n_id = n_id.as(not null)
        n_id.parent = self
-       for n in n_args do
-               assert n isa AExpr
-               _n_args.add(n)
-               n.parent = self
-       end
+        _n_args = n_args.as(not null)
+       n_args.parent = self
        for n in n_closure_defs do
                assert n isa AClosureDef
                _n_closure_defs.add(n)
@@ -5847,18 +6552,16 @@ redef class AClosureCallExpr
             end
             return
        end
-        for i in [0.._n_args.length[ do
-            if _n_args[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AExpr
-                    _n_args[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_args.remove_at(i)
-                end
-                return
+        if _n_args == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExprs
+                _n_args = new_child
+           else
+               abort
             end
-        end
+            return
+       end
         for i in [0.._n_closure_defs.length[ do
             if _n_closure_defs[i] == old_child then
                 if new_child != null then
@@ -5876,9 +6579,7 @@ redef class AClosureCallExpr
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_id)
-            for n in _n_args do
-                v.enter_visit(n)
-           end
+        v.enter_visit(_n_args)
             for n in _n_closure_defs do
                 v.enter_visit(n)
            end
@@ -6038,7 +6739,8 @@ redef class ARangeExpr
 
     init init_arangeexpr (
             n_expr: nullable AExpr,
-            n_expr2: nullable AExpr
+            n_expr2: nullable AExpr,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -6046,6 +6748,10 @@ redef class ARangeExpr
        n_expr.parent = self
         _n_expr2 = n_expr2.as(not null)
        n_expr2.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -6070,31 +6776,65 @@ redef class ARangeExpr
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class ACrangeExpr
     private init empty_init do end
 
     init init_acrangeexpr (
+            n_obra: nullable TObra,
             n_expr: nullable AExpr,
-            n_expr2: nullable AExpr
+            n_expr2: nullable AExpr,
+            n_cbra: nullable TCbra,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
+        _n_obra = n_obra.as(not null)
+       n_obra.parent = self
         _n_expr = n_expr.as(not null)
        n_expr.parent = self
         _n_expr2 = n_expr2.as(not null)
        n_expr2.parent = self
+        _n_cbra = n_cbra.as(not null)
+       n_cbra.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
+        if _n_obra == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TObra
+                _n_obra = new_child
+           else
+               abort
+            end
+            return
+       end
         if _n_expr == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -6115,31 +6855,77 @@ redef class ACrangeExpr
             end
             return
        end
+        if _n_cbra == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TCbra
+                _n_cbra = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
+        v.enter_visit(_n_obra)
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
+        v.enter_visit(_n_cbra)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AOrangeExpr
     private init empty_init do end
 
     init init_aorangeexpr (
+            n_obra: nullable TObra,
             n_expr: nullable AExpr,
-            n_expr2: nullable AExpr
+            n_expr2: nullable AExpr,
+            n_cbra: nullable TObra,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
+        _n_obra = n_obra.as(not null)
+       n_obra.parent = self
         _n_expr = n_expr.as(not null)
        n_expr.parent = self
         _n_expr2 = n_expr2.as(not null)
        n_expr2.parent = self
+        _n_cbra = n_cbra.as(not null)
+       n_cbra.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
+        if _n_obra == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TObra
+                _n_obra = new_child
+           else
+               abort
+            end
+            return
+       end
         if _n_expr == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -6160,62 +6946,103 @@ redef class AOrangeExpr
             end
             return
        end
+        if _n_cbra == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TObra
+                _n_cbra = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
+        v.enter_visit(_n_obra)
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
+        v.enter_visit(_n_cbra)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AArrayExpr
     private init empty_init do end
 
     init init_aarrayexpr (
-            n_exprs: Collection[Object] # Should be Collection[AExpr]
+            n_exprs: nullable AExprs,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
-       for n in n_exprs do
-               assert n isa AExpr
-               _n_exprs.add(n)
-               n.parent = self
+        _n_exprs = n_exprs.as(not null)
+       n_exprs.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
        end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        for i in [0.._n_exprs.length[ do
-            if _n_exprs[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AExpr
-                    _n_exprs[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_exprs.remove_at(i)
-                end
-                return
+        if _n_exprs == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExprs
+                _n_exprs = new_child
+           else
+               abort
             end
-        end
+            return
+       end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
-            for n in _n_exprs do
-                v.enter_visit(n)
-           end
+        v.enter_visit(_n_exprs)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class ASelfExpr
     private init empty_init do end
 
     init init_aselfexpr (
-            n_kwself: nullable TKwself
+            n_kwself: nullable TKwself,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
         _n_kwself = n_kwself.as(not null)
        n_kwself.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -6230,11 +7057,24 @@ redef class ASelfExpr
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwself)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AImplicitSelfExpr
@@ -6257,12 +7097,17 @@ redef class ATrueExpr
     private init empty_init do end
 
     init init_atrueexpr (
-            n_kwtrue: nullable TKwtrue
+            n_kwtrue: nullable TKwtrue,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
         _n_kwtrue = n_kwtrue.as(not null)
        n_kwtrue.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -6277,23 +7122,41 @@ redef class ATrueExpr
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwtrue)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AFalseExpr
     private init empty_init do end
 
     init init_afalseexpr (
-            n_kwfalse: nullable TKwfalse
+            n_kwfalse: nullable TKwfalse,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
         _n_kwfalse = n_kwfalse.as(not null)
        n_kwfalse.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -6308,23 +7171,41 @@ redef class AFalseExpr
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwfalse)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class ANullExpr
     private init empty_init do end
 
     init init_anullexpr (
-            n_kwnull: nullable TKwnull
+            n_kwnull: nullable TKwnull,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
         _n_kwnull = n_kwnull.as(not null)
        n_kwnull.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -6339,23 +7220,41 @@ redef class ANullExpr
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwnull)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AIntExpr
     private init empty_init do end
 
     init init_aintexpr (
-            n_number: nullable TNumber
+            n_number: nullable TNumber,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
         _n_number = n_number.as(not null)
        n_number.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -6370,23 +7269,41 @@ redef class AIntExpr
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_number)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AFloatExpr
     private init empty_init do end
 
     init init_afloatexpr (
-            n_float: nullable TFloat
+            n_float: nullable TFloat,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
         _n_float = n_float.as(not null)
        n_float.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -6401,23 +7318,41 @@ redef class AFloatExpr
             end
             return
        end
-    end
-
-    redef fun visit_all(v: Visitor)
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_float)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class ACharExpr
     private init empty_init do end
 
     init init_acharexpr (
-            n_char: nullable TChar
+            n_char: nullable TChar,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
         _n_char = n_char.as(not null)
        n_char.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -6432,23 +7367,41 @@ redef class ACharExpr
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_char)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AStringExpr
     private init empty_init do end
 
     init init_astringexpr (
-            n_string: nullable TString
+            n_string: nullable TString,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
         _n_string = n_string.as(not null)
        n_string.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -6463,11 +7416,24 @@ redef class AStringExpr
             end
             return
        end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_string)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AStartStringExpr
@@ -6567,7 +7533,8 @@ redef class ASuperstringExpr
     private init empty_init do end
 
     init init_asuperstringexpr (
-            n_exprs: Collection[Object] # Should be Collection[AExpr]
+            n_exprs: Collection[Object], # Should be Collection[AExpr]
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -6576,6 +7543,10 @@ redef class ASuperstringExpr
                _n_exprs.add(n)
                n.parent = self
        end
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -6592,6 +7563,16 @@ redef class ASuperstringExpr
                 return
             end
         end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
@@ -6599,22 +7580,46 @@ redef class ASuperstringExpr
             for n in _n_exprs do
                 v.enter_visit(n)
            end
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AParExpr
     private init empty_init do end
 
     init init_aparexpr (
-            n_expr: nullable AExpr
+            n_opar: nullable TOpar,
+            n_expr: nullable AExpr,
+            n_cpar: nullable TCpar,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
+        _n_opar = n_opar.as(not null)
+       n_opar.parent = self
         _n_expr = n_expr.as(not null)
        n_expr.parent = self
+        _n_cpar = n_cpar.as(not null)
+       n_cpar.parent = self
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
+        if _n_opar == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TOpar
+                _n_opar = new_child
+           else
+               abort
+            end
+            return
+       end
         if _n_expr == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -6625,11 +7630,36 @@ redef class AParExpr
             end
             return
        end
+        if _n_cpar == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TCpar
+                _n_cpar = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
+        v.enter_visit(_n_opar)
         v.enter_visit(_n_expr)
+        v.enter_visit(_n_cpar)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AAsCastExpr
@@ -6638,7 +7668,9 @@ redef class AAsCastExpr
     init init_aascastexpr (
             n_expr: nullable AExpr,
             n_kwas: nullable TKwas,
-            n_type: nullable AType
+            n_opar: nullable TOpar,
+            n_type: nullable AType,
+            n_cpar: nullable TCpar
     )
     do
         empty_init
@@ -6646,8 +7678,12 @@ redef class AAsCastExpr
        n_expr.parent = self
         _n_kwas = n_kwas.as(not null)
        n_kwas.parent = self
+        _n_opar = n_opar.as(not null)
+       n_opar.parent = self
         _n_type = n_type.as(not null)
        n_type.parent = self
+        _n_cpar = n_cpar.as(not null)
+       n_cpar.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -6672,6 +7708,16 @@ redef class AAsCastExpr
             end
             return
        end
+        if _n_opar == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TOpar
+                _n_opar = new_child
+           else
+               abort
+            end
+            return
+       end
         if _n_type == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -6682,13 +7728,25 @@ redef class AAsCastExpr
             end
             return
        end
+        if _n_cpar == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TCpar
+                _n_cpar = new_child
+           else
+               abort
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_kwas)
+        v.enter_visit(_n_opar)
         v.enter_visit(_n_type)
+        v.enter_visit(_n_cpar)
     end
 end
 redef class AAsNotnullExpr
@@ -6697,8 +7755,10 @@ redef class AAsNotnullExpr
     init init_aasnotnullexpr (
             n_expr: nullable AExpr,
             n_kwas: nullable TKwas,
+            n_opar: nullable TOpar,
             n_kwnot: nullable TKwnot,
-            n_kwnull: nullable TKwnull
+            n_kwnull: nullable TKwnull,
+            n_cpar: nullable TCpar
     )
     do
         empty_init
@@ -6706,10 +7766,14 @@ redef class AAsNotnullExpr
        n_expr.parent = self
         _n_kwas = n_kwas.as(not null)
        n_kwas.parent = self
+        _n_opar = n_opar.as(not null)
+       n_opar.parent = self
         _n_kwnot = n_kwnot.as(not null)
        n_kwnot.parent = self
         _n_kwnull = n_kwnull.as(not null)
        n_kwnull.parent = self
+        _n_cpar = n_cpar.as(not null)
+       n_cpar.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -6734,6 +7798,16 @@ redef class AAsNotnullExpr
             end
             return
        end
+        if _n_opar == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TOpar
+                _n_opar = new_child
+           else
+               abort
+            end
+            return
+       end
         if _n_kwnot == old_child then
             if new_child != null then
                 new_child.parent = self
@@ -6754,14 +7828,26 @@ redef class AAsNotnullExpr
             end
             return
        end
+        if _n_cpar == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TCpar
+                _n_cpar = new_child
+           else
+               abort
+            end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_kwas)
+        v.enter_visit(_n_opar)
         v.enter_visit(_n_kwnot)
         v.enter_visit(_n_kwnull)
+        v.enter_visit(_n_cpar)
     end
 end
 redef class AIssetAttrExpr
@@ -6823,25 +7909,64 @@ redef class AIssetAttrExpr
         v.enter_visit(_n_id)
     end
 end
-redef class APlusAssignOp
+redef class ADebugTypeExpr
     private init empty_init do end
 
-    init init_aplusassignop (
-            n_pluseq: nullable TPluseq
+    init init_adebugtypeexpr (
+            n_kwdebug: nullable TKwdebug,
+            n_kwtype: nullable TKwtype,
+            n_expr: nullable AExpr,
+            n_type: nullable AType
     )
     do
         empty_init
-        _n_pluseq = n_pluseq.as(not null)
-       n_pluseq.parent = self
+        _n_kwdebug = n_kwdebug.as(not null)
+       n_kwdebug.parent = self
+        _n_kwtype = n_kwtype.as(not null)
+       n_kwtype.parent = self
+        _n_expr = n_expr.as(not null)
+       n_expr.parent = self
+        _n_type = n_type.as(not null)
+       n_type.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        if _n_pluseq == old_child then
+        if _n_kwdebug == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa TPluseq
-                _n_pluseq = new_child
+               assert new_child isa TKwdebug
+                _n_kwdebug = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_kwtype == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwtype
+                _n_kwtype = new_child
+           else
+               abort
+            end
+            return
+       end
+        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_type == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AType
+                _n_type = new_child
            else
                abort
             end
@@ -6851,137 +7976,102 @@ redef class APlusAssignOp
 
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_pluseq)
+        v.enter_visit(_n_kwdebug)
+        v.enter_visit(_n_kwtype)
+        v.enter_visit(_n_expr)
+        v.enter_visit(_n_type)
     end
 end
-redef class AMinusAssignOp
+redef class AListExprs
     private init empty_init do end
 
-    init init_aminusassignop (
-            n_minuseq: nullable TMinuseq
+    init init_alistexprs (
+            n_exprs: Collection[Object] # Should be Collection[AExpr]
     )
     do
         empty_init
-        _n_minuseq = n_minuseq.as(not null)
-       n_minuseq.parent = self
+       for n in n_exprs do
+               assert n isa AExpr
+               _n_exprs.add(n)
+               n.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        if _n_minuseq == old_child then
-            if new_child != null then
-                new_child.parent = self
-               assert new_child isa TMinuseq
-                _n_minuseq = new_child
-           else
-               abort
+        for i in [0.._n_exprs.length[ do
+            if _n_exprs[i] == old_child then
+                if new_child != null then
+                   assert new_child isa AExpr
+                    _n_exprs[i] = new_child
+                    new_child.parent = self
+                else
+                    _n_exprs.remove_at(i)
+                end
+                return
             end
-            return
-       end
+        end
     end
 
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_minuseq)
+            for n in _n_exprs do
+                v.enter_visit(n)
+           end
     end
 end
-redef class AClosureDef
+redef class AParExprs
     private init empty_init do end
 
-    init init_aclosuredef (
-            n_bang: nullable TBang,
-            n_id: nullable AClosureId,
-            n_ids: Collection[Object], # Should be Collection[TId]
-            n_kwdo: nullable TKwdo,
-            n_expr: nullable AExpr,
-            n_label: nullable ALabel
+    init init_aparexprs (
+            n_opar: nullable TOpar,
+            n_exprs: Collection[Object], # Should be Collection[AExpr]
+            n_cpar: nullable TCpar
     )
     do
         empty_init
-        _n_bang = n_bang.as(not null)
-       n_bang.parent = self
-        _n_id = n_id.as(not null)
-       n_id.parent = self
-       for n in n_ids do
-               assert n isa TId
-               _n_ids.add(n)
+        _n_opar = n_opar.as(not null)
+       n_opar.parent = self
+       for n in n_exprs do
+               assert n isa AExpr
+               _n_exprs.add(n)
                n.parent = self
        end
-        _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
-       end
-        _n_label = n_label
-       if n_label != null then
-               n_label.parent = self
-       end
+        _n_cpar = n_cpar.as(not null)
+       n_cpar.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        if _n_bang == old_child then
-            if new_child != null then
-                new_child.parent = self
-               assert new_child isa TBang
-                _n_bang = new_child
-           else
-               abort
-            end
-            return
-       end
-        if _n_id == old_child then
+        if _n_opar == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa AClosureId
-                _n_id = new_child
+               assert new_child isa TOpar
+                _n_opar = new_child
            else
                abort
             end
             return
        end
-        for i in [0.._n_ids.length[ do
-            if _n_ids[i] == old_child then
+        for i in [0.._n_exprs.length[ do
+            if _n_exprs[i] == old_child then
                 if new_child != null then
-                   assert new_child isa TId
-                    _n_ids[i] = new_child
+                   assert new_child isa AExpr
+                    _n_exprs[i] = new_child
                     new_child.parent = self
                 else
-                    _n_ids.remove_at(i)
+                    _n_exprs.remove_at(i)
                 end
                 return
             end
         end
-        if _n_kwdo == old_child then
-            if new_child != null then
-                new_child.parent = self
-               assert new_child isa TKwdo
-                _n_kwdo = new_child
-           else
-               _n_kwdo = null
-            end
-            return
-       end
-        if _n_expr == old_child then
+        if _n_cpar == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa AExpr
-                _n_expr = new_child
-           else
-               _n_expr = 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
+               assert new_child isa TCpar
+                _n_cpar = new_child
            else
-               _n_label = null
+               abort
             end
             return
        end
@@ -6989,41 +8079,98 @@ redef class AClosureDef
 
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_bang)
-        v.enter_visit(_n_id)
-            for n in _n_ids do
+        v.enter_visit(_n_opar)
+            for n in _n_exprs do
                 v.enter_visit(n)
            end
-        if _n_kwdo != null then
-            v.enter_visit(_n_kwdo.as(not null))
-        end
-        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))
+        v.enter_visit(_n_cpar)
+    end
+end
+redef class ABraExprs
+    private init empty_init do end
+
+    init init_abraexprs (
+            n_obra: nullable TObra,
+            n_exprs: Collection[Object], # Should be Collection[AExpr]
+            n_cbra: nullable TCbra
+    )
+    do
+        empty_init
+        _n_obra = n_obra.as(not null)
+       n_obra.parent = self
+       for n in n_exprs do
+               assert n isa AExpr
+               _n_exprs.add(n)
+               n.parent = self
+       end
+        _n_cbra = n_cbra.as(not null)
+       n_cbra.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_obra == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TObra
+                _n_obra = new_child
+           else
+               abort
+            end
+            return
+       end
+        for i in [0.._n_exprs.length[ do
+            if _n_exprs[i] == old_child then
+                if new_child != null then
+                   assert new_child isa AExpr
+                    _n_exprs[i] = new_child
+                    new_child.parent = self
+                else
+                    _n_exprs.remove_at(i)
+                end
+                return
+            end
         end
+        if _n_cbra == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TCbra
+                _n_cbra = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_obra)
+            for n in _n_exprs do
+                v.enter_visit(n)
+           end
+        v.enter_visit(_n_cbra)
     end
 end
-redef class ASimpleClosureId
+redef class APlusAssignOp
     private init empty_init do end
 
-    init init_asimpleclosureid (
-            n_id: nullable TId
+    init init_aplusassignop (
+            n_pluseq: nullable TPluseq
     )
     do
         empty_init
-        _n_id = n_id.as(not null)
-       n_id.parent = self
+        _n_pluseq = n_pluseq.as(not null)
+       n_pluseq.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        if _n_id == old_child then
+        if _n_pluseq == 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 TPluseq
+                _n_pluseq = new_child
            else
                abort
             end
@@ -7033,28 +8180,28 @@ redef class ASimpleClosureId
 
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_id)
+        v.enter_visit(_n_pluseq)
     end
 end
-redef class ABreakClosureId
+redef class AMinusAssignOp
     private init empty_init do end
 
-    init init_abreakclosureid (
-            n_kwbreak: nullable TKwbreak
+    init init_aminusassignop (
+            n_minuseq: nullable TMinuseq
     )
     do
         empty_init
-        _n_kwbreak = n_kwbreak.as(not null)
-       n_kwbreak.parent = self
+        _n_minuseq = n_minuseq.as(not null)
+       n_minuseq.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        if _n_kwbreak == old_child then
+        if _n_minuseq == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa TKwbreak
-                _n_kwbreak = new_child
+               assert new_child isa TMinuseq
+                _n_minuseq = new_child
            else
                abort
             end
@@ -7064,50 +8211,106 @@ redef class ABreakClosureId
 
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwbreak)
+        v.enter_visit(_n_minuseq)
     end
 end
-redef class AQualified
+redef class AClosureDef
     private init empty_init do end
 
-    init init_aqualified (
-            n_id: Collection[Object], # Should be Collection[TId]
-            n_classid: nullable TClassid
+    init init_aclosuredef (
+            n_bang: nullable TBang,
+            n_id: nullable AClosureId,
+            n_ids: Collection[Object], # Should be Collection[TId]
+            n_kwdo: nullable TKwdo,
+            n_expr: nullable AExpr,
+            n_label: nullable ALabel
     )
     do
         empty_init
-       for n in n_id do
+        _n_bang = n_bang.as(not null)
+       n_bang.parent = self
+        _n_id = n_id.as(not null)
+       n_id.parent = self
+       for n in n_ids do
                assert n isa TId
-               _n_id.add(n)
+               _n_ids.add(n)
                n.parent = self
        end
-        _n_classid = n_classid
-       if n_classid != null then
-               n_classid.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
+       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
-        for i in [0.._n_id.length[ do
-            if _n_id[i] == old_child then
+        if _n_bang == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TBang
+                _n_bang = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_id == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AClosureId
+                _n_id = 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_id[i] = new_child
+                    _n_ids[i] = new_child
                     new_child.parent = self
                 else
-                    _n_id.remove_at(i)
+                    _n_ids.remove_at(i)
                 end
                 return
             end
         end
-        if _n_classid == old_child then
+        if _n_kwdo == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa TClassid
-                _n_classid = new_child
+               assert new_child isa TKwdo
+                _n_kwdo = new_child
            else
-               _n_classid = null
+               _n_kwdo = null
+            end
+            return
+       end
+        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
+               _n_expr = 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
@@ -7115,62 +8318,1236 @@ redef class AQualified
 
     redef fun visit_all(v: Visitor)
     do
-            for n in _n_id do
+        v.enter_visit(_n_bang)
+        v.enter_visit(_n_id)
+            for n in _n_ids do
                 v.enter_visit(n)
            end
-        if _n_classid != null then
-            v.enter_visit(_n_classid.as(not null))
+        if _n_kwdo != null then
+            v.enter_visit(_n_kwdo.as(not null))
+        end
+        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))
         end
     end
 end
-redef class ADoc
+redef class ASimpleClosureId
     private init empty_init do end
 
-    init init_adoc (
-            n_comment: Collection[Object] # Should be Collection[TComment]
+    init init_asimpleclosureid (
+            n_id: nullable TId
     )
     do
         empty_init
-       for n in n_comment do
-               assert n isa TComment
-               _n_comment.add(n)
-               n.parent = self
-       end
+        _n_id = n_id.as(not null)
+       n_id.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        for i in [0.._n_comment.length[ do
-            if _n_comment[i] == old_child then
-                if new_child != null then
-                   assert new_child isa TComment
-                    _n_comment[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_comment.remove_at(i)
-                end
-                return
+        if _n_id == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TId
+                _n_id = new_child
+           else
+               abort
             end
-        end
+            return
+       end
     end
 
     redef fun visit_all(v: Visitor)
     do
-            for n in _n_comment do
-                v.enter_visit(n)
-           end
+        v.enter_visit(_n_id)
     end
 end
+redef class ABreakClosureId
+    private init empty_init do end
 
-redef class Start
-    init(
-        n_base: nullable AModule,
-        n_eof: EOF)
+    init init_abreakclosureid (
+            n_kwbreak: nullable TKwbreak
+    )
     do
-        _n_base = n_base
-        _n_eof = n_eof
-    end
+        empty_init
+        _n_kwbreak = n_kwbreak.as(not null)
+       n_kwbreak.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_kwbreak == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwbreak
+                _n_kwbreak = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_kwbreak)
+    end
+end
+redef class AModuleName
+    private init empty_init do end
+
+    init init_amodulename (
+            n_quad: nullable TQuad,
+            n_path: Collection[Object], # Should be Collection[TId]
+            n_id: nullable TId
+    )
+    do
+        empty_init
+        _n_quad = n_quad
+       if n_quad != null then
+               n_quad.parent = self
+       end
+       for n in n_path do
+               assert n isa TId
+               _n_path.add(n)
+               n.parent = self
+       end
+        _n_id = n_id.as(not null)
+       n_id.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_quad == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TQuad
+                _n_quad = new_child
+           else
+               _n_quad = null
+            end
+            return
+       end
+        for i in [0.._n_path.length[ do
+            if _n_path[i] == old_child then
+                if new_child != null then
+                   assert new_child isa TId
+                    _n_path[i] = new_child
+                    new_child.parent = self
+                else
+                    _n_path.remove_at(i)
+                end
+                return
+            end
+        end
+        if _n_id == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TId
+                _n_id = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        if _n_quad != null then
+            v.enter_visit(_n_quad.as(not null))
+        end
+            for n in _n_path do
+                v.enter_visit(n)
+           end
+        v.enter_visit(_n_id)
+    end
+end
+redef class AExternCalls
+    private init empty_init do end
+
+    init init_aexterncalls (
+            n_kwimport: nullable TKwimport,
+            n_extern_calls: Collection[Object] # Should be Collection[AExternCall]
+    )
+    do
+        empty_init
+        _n_kwimport = n_kwimport.as(not null)
+       n_kwimport.parent = self
+       for n in n_extern_calls do
+               assert n isa AExternCall
+               _n_extern_calls.add(n)
+               n.parent = self
+       end
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_kwimport == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwimport
+                _n_kwimport = new_child
+           else
+               abort
+            end
+            return
+       end
+        for i in [0.._n_extern_calls.length[ do
+            if _n_extern_calls[i] == old_child then
+                if new_child != null then
+                   assert new_child isa AExternCall
+                    _n_extern_calls[i] = new_child
+                    new_child.parent = self
+                else
+                    _n_extern_calls.remove_at(i)
+                end
+                return
+            end
+        end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_kwimport)
+            for n in _n_extern_calls do
+                v.enter_visit(n)
+           end
+    end
+end
+redef class AExternCall
+    private init empty_init do end
+
+    init init_aexterncall
+    do
+        empty_init
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+    end
+end
+redef class ASuperExternCall
+    private init empty_init do end
+
+    init init_asuperexterncall (
+            n_kwsuper: nullable TKwsuper
+    )
+    do
+        empty_init
+        _n_kwsuper = n_kwsuper.as(not null)
+       n_kwsuper.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        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
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_kwsuper)
+    end
+end
+redef class ALocalPropExternCall
+    private init empty_init do end
+
+    init init_alocalpropexterncall (
+            n_methid: nullable AMethid
+    )
+    do
+        empty_init
+        _n_methid = n_methid.as(not null)
+       n_methid.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_methid == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AMethid
+                _n_methid = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_methid)
+    end
+end
+redef class AFullPropExternCall
+    private init empty_init do end
+
+    init init_afullpropexterncall (
+            n_classid: nullable TClassid,
+            n_quad: nullable TQuad,
+            n_methid: nullable AMethid
+    )
+    do
+        empty_init
+        _n_classid = n_classid.as(not null)
+       n_classid.parent = self
+        _n_quad = n_quad
+       if n_quad != null then
+               n_quad.parent = self
+       end
+        _n_methid = n_methid.as(not null)
+       n_methid.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_classid == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TClassid
+                _n_classid = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_quad == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TQuad
+                _n_quad = new_child
+           else
+               _n_quad = null
+            end
+            return
+       end
+        if _n_methid == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AMethid
+                _n_methid = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_classid)
+        if _n_quad != null then
+            v.enter_visit(_n_quad.as(not null))
+        end
+        v.enter_visit(_n_methid)
+    end
+end
+redef class AInitPropExternCall
+    private init empty_init do end
+
+    init init_ainitpropexterncall (
+            n_classid: nullable TClassid
+    )
+    do
+        empty_init
+        _n_classid = n_classid.as(not null)
+       n_classid.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_classid == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TClassid
+                _n_classid = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_classid)
+    end
+end
+redef class ACastAsExternCall
+    private init empty_init do end
+
+    init init_acastasexterncall (
+            n_from_type: nullable AType,
+            n_kwas: nullable TKwas,
+            n_to_type: nullable AType
+    )
+    do
+        empty_init
+        _n_from_type = n_from_type.as(not null)
+       n_from_type.parent = self
+        _n_kwas = n_kwas.as(not null)
+       n_kwas.parent = self
+        _n_to_type = n_to_type.as(not null)
+       n_to_type.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_from_type == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AType
+                _n_from_type = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_kwas == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwas
+                _n_kwas = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_to_type == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AType
+                _n_to_type = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_from_type)
+        v.enter_visit(_n_kwas)
+        v.enter_visit(_n_to_type)
+    end
+end
+redef class AAsNullableExternCall
+    private init empty_init do end
+
+    init init_aasnullableexterncall (
+            n_type: nullable AType,
+            n_kwas: nullable TKwas,
+            n_kwnullable: nullable TKwnullable
+    )
+    do
+        empty_init
+        _n_type = n_type.as(not null)
+       n_type.parent = self
+        _n_kwas = n_kwas.as(not null)
+       n_kwas.parent = self
+        _n_kwnullable = n_kwnullable.as(not null)
+       n_kwnullable.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_type == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AType
+                _n_type = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_kwas == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwas
+                _n_kwas = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_kwnullable == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwnullable
+                _n_kwnullable = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_type)
+        v.enter_visit(_n_kwas)
+        v.enter_visit(_n_kwnullable)
+    end
+end
+redef class AAsNotNullableExternCall
+    private init empty_init do end
+
+    init init_aasnotnullableexterncall (
+            n_type: nullable AType,
+            n_kwas: nullable TKwas,
+            n_kwnot: nullable TKwnot,
+            n_kwnullable: nullable TKwnullable
+    )
+    do
+        empty_init
+        _n_type = n_type.as(not null)
+       n_type.parent = self
+        _n_kwas = n_kwas.as(not null)
+       n_kwas.parent = self
+        _n_kwnot = n_kwnot.as(not null)
+       n_kwnot.parent = self
+        _n_kwnullable = n_kwnullable.as(not null)
+       n_kwnullable.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_type == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AType
+                _n_type = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_kwas == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwas
+                _n_kwas = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_kwnot == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwnot
+                _n_kwnot = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_kwnullable == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwnullable
+                _n_kwnullable = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_type)
+        v.enter_visit(_n_kwas)
+        v.enter_visit(_n_kwnot)
+        v.enter_visit(_n_kwnullable)
+    end
+end
+redef class AInLanguage
+    private init empty_init do end
+
+    init init_ainlanguage (
+            n_kwin: nullable TKwin,
+            n_string: nullable TString
+    )
+    do
+        empty_init
+        _n_kwin = n_kwin.as(not null)
+       n_kwin.parent = self
+        _n_string = n_string.as(not null)
+       n_string.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_kwin == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwin
+                _n_kwin = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_string == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TString
+                _n_string = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_kwin)
+        v.enter_visit(_n_string)
+    end
+end
+redef class AExternCodeBlock
+    private init empty_init do end
+
+    init init_aexterncodeblock (
+            n_in_language: nullable AInLanguage,
+            n_extern_code_segment: nullable TExternCodeSegment
+    )
+    do
+        empty_init
+        _n_in_language = n_in_language
+       if n_in_language != null then
+               n_in_language.parent = self
+       end
+        _n_extern_code_segment = n_extern_code_segment.as(not null)
+       n_extern_code_segment.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_in_language == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AInLanguage
+                _n_in_language = new_child
+           else
+               _n_in_language = null
+            end
+            return
+       end
+        if _n_extern_code_segment == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TExternCodeSegment
+                _n_extern_code_segment = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        if _n_in_language != null then
+            v.enter_visit(_n_in_language.as(not null))
+        end
+        v.enter_visit(_n_extern_code_segment)
+    end
+end
+redef class AQualified
+    private init empty_init do end
+
+    init init_aqualified (
+            n_id: Collection[Object], # Should be Collection[TId]
+            n_classid: nullable TClassid
+    )
+    do
+        empty_init
+       for n in n_id do
+               assert n isa TId
+               _n_id.add(n)
+               n.parent = self
+       end
+        _n_classid = n_classid
+       if n_classid != null then
+               n_classid.parent = self
+       end
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        for i in [0.._n_id.length[ do
+            if _n_id[i] == old_child then
+                if new_child != null then
+                   assert new_child isa TId
+                    _n_id[i] = new_child
+                    new_child.parent = self
+                else
+                    _n_id.remove_at(i)
+                end
+                return
+            end
+        end
+        if _n_classid == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TClassid
+                _n_classid = new_child
+           else
+               _n_classid = null
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+            for n in _n_id do
+                v.enter_visit(n)
+           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 (
+            n_comment: Collection[Object] # Should be Collection[TComment]
+    )
+    do
+        empty_init
+       for n in n_comment do
+               assert n isa TComment
+               _n_comment.add(n)
+               n.parent = self
+       end
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        for i in [0.._n_comment.length[ do
+            if _n_comment[i] == old_child then
+                if new_child != null then
+                   assert new_child isa TComment
+                    _n_comment[i] = new_child
+                    new_child.parent = self
+                else
+                    _n_comment.remove_at(i)
+                end
+                return
+            end
+        end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+            for n in _n_comment do
+                v.enter_visit(n)
+           end
+    end
+end
+redef class AAnnotations
+    private init empty_init do end
+
+    init init_aannotations (
+            n_at: nullable TAt,
+            n_opar: nullable TOpar,
+            n_items: Collection[Object], # Should be Collection[AAnnotation]
+            n_cpar: nullable TCpar
+    )
+    do
+        empty_init
+        _n_at = n_at
+       if n_at != null then
+               n_at.parent = self
+       end
+        _n_opar = n_opar
+       if n_opar != null then
+               n_opar.parent = self
+       end
+       for n in n_items do
+               assert n isa AAnnotation
+               _n_items.add(n)
+               n.parent = self
+       end
+        _n_cpar = n_cpar
+       if n_cpar != null then
+               n_cpar.parent = self
+       end
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_at == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TAt
+                _n_at = new_child
+           else
+               _n_at = null
+            end
+            return
+       end
+        if _n_opar == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TOpar
+                _n_opar = new_child
+           else
+               _n_opar = null
+            end
+            return
+       end
+        for i in [0.._n_items.length[ do
+            if _n_items[i] == old_child then
+                if new_child != null then
+                   assert new_child isa AAnnotation
+                    _n_items[i] = new_child
+                    new_child.parent = self
+                else
+                    _n_items.remove_at(i)
+                end
+                return
+            end
+        end
+        if _n_cpar == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TCpar
+                _n_cpar = new_child
+           else
+               _n_cpar = null
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        if _n_at != null then
+            v.enter_visit(_n_at.as(not null))
+        end
+        if _n_opar != null then
+            v.enter_visit(_n_opar.as(not null))
+        end
+            for n in _n_items do
+                v.enter_visit(n)
+           end
+        if _n_cpar != null then
+            v.enter_visit(_n_cpar.as(not null))
+        end
+    end
+end
+redef class AAnnotation
+    private init empty_init do end
+
+    init init_aannotation (
+            n_atid: nullable AAtid,
+            n_opar: nullable TOpar,
+            n_args: Collection[Object], # Should be Collection[AAtArg]
+            n_cpar: nullable TCpar,
+            n_annotations: nullable AAnnotations
+    )
+    do
+        empty_init
+        _n_atid = n_atid.as(not null)
+       n_atid.parent = self
+        _n_opar = n_opar
+       if n_opar != null then
+               n_opar.parent = self
+       end
+       for n in n_args do
+               assert n isa AAtArg
+               _n_args.add(n)
+               n.parent = self
+       end
+        _n_cpar = n_cpar
+       if n_cpar != null then
+               n_cpar.parent = self
+       end
+        _n_annotations = n_annotations
+       if n_annotations != null then
+               n_annotations.parent = self
+       end
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_atid == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAtid
+                _n_atid = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_opar == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TOpar
+                _n_opar = new_child
+           else
+               _n_opar = null
+            end
+            return
+       end
+        for i in [0.._n_args.length[ do
+            if _n_args[i] == old_child then
+                if new_child != null then
+                   assert new_child isa AAtArg
+                    _n_args[i] = new_child
+                    new_child.parent = self
+                else
+                    _n_args.remove_at(i)
+                end
+                return
+            end
+        end
+        if _n_cpar == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TCpar
+                _n_cpar = new_child
+           else
+               _n_cpar = null
+            end
+            return
+       end
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               _n_annotations = null
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_atid)
+        if _n_opar != null then
+            v.enter_visit(_n_opar.as(not null))
+        end
+            for n in _n_args do
+                v.enter_visit(n)
+           end
+        if _n_cpar != null then
+            v.enter_visit(_n_cpar.as(not null))
+        end
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
+    end
+end
+redef class ATypeAtArg
+    private init empty_init do end
+
+    init init_atypeatarg (
+            n_type: nullable AType
+    )
+    do
+        empty_init
+        _n_type = n_type.as(not null)
+       n_type.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_type == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AType
+                _n_type = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_type)
+    end
+end
+redef class AExprAtArg
+    private init empty_init do end
+
+    init init_aexpratarg (
+            n_expr: nullable AExpr
+    )
+    do
+        empty_init
+        _n_expr = n_expr.as(not null)
+       n_expr.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        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
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_expr)
+    end
+end
+redef class AAtAtArg
+    private init empty_init do end
+
+    init init_aatatarg (
+            n_annotations: nullable AAnnotations
+    )
+    do
+        empty_init
+        _n_annotations = n_annotations.as(not null)
+       n_annotations.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_annotations == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_annotations)
+    end
+end
+redef class AIdAtid
+    private init empty_init do end
+
+    init init_aidatid (
+            n_id: nullable TId
+    )
+    do
+        empty_init
+        _n_id = n_id.as(not null)
+       n_id.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_id == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TId
+                _n_id = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_id)
+    end
+end
+redef class AKwexternAtid
+    private init empty_init do end
+
+    init init_akwexternatid (
+            n_id: nullable TKwextern
+    )
+    do
+        empty_init
+        _n_id = n_id.as(not null)
+       n_id.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_id == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwextern
+                _n_id = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_id)
+    end
+end
+redef class AKwinternAtid
+    private init empty_init do end
+
+    init init_akwinternatid (
+            n_id: nullable TKwintern
+    )
+    do
+        empty_init
+        _n_id = n_id.as(not null)
+       n_id.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_id == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwintern
+                _n_id = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_id)
+    end
+end
+redef class AKwreadableAtid
+    private init empty_init do end
+
+    init init_akwreadableatid (
+            n_id: nullable TKwreadable
+    )
+    do
+        empty_init
+        _n_id = n_id.as(not null)
+       n_id.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_id == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwreadable
+                _n_id = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_id)
+    end
+end
+redef class AKwwritableAtid
+    private init empty_init do end
+
+    init init_akwwritableatid (
+            n_id: nullable TKwwritable
+    )
+    do
+        empty_init
+        _n_id = n_id.as(not null)
+       n_id.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_id == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwwritable
+                _n_id = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_id)
+    end
+end
+redef class AKwimportAtid
+    private init empty_init do end
+
+    init init_akwimportatid (
+            n_id: nullable TKwimport
+    )
+    do
+        empty_init
+        _n_id = n_id.as(not null)
+       n_id.parent = self
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_id == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwimport
+                _n_id = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_id)
+    end
+end
 
+redef class Start
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
         if _n_base == old_child then