rta: use callsites in AFor instead re-resolving stuff
[nit.git] / src / parser / parser_prod.nit
index 61d6f95..05daac5 100644 (file)
 # Production AST nodes full definition.
 # This file was generated by SableCC (http://www.sablecc.org/).
-package parser_prod
+module parser_prod
 
 import lexer
 intrude import parser_nodes
-
-redef class ANode
-       # Parent of the node in the AST
-       readable writable var _parent: nullable ANode
-
-       # Remove a child from the AST
-       fun remove_child(child: ANode)
-       do
-               replace_child(child, null)
-       end
-
-       # Replace a child with an other node in the AST
-       fun replace_child(old_child: ANode, new_child: nullable ANode) is abstract
-
-       # Replace itself with an other node in the AST
-       fun replace_with(node: ANode)
-       do
-               if (_parent != null) then
-                       _parent.replace_child(self, node)
-               end
-       end
-
-       # Visit all nodes in order.
-       # Thus, call "v.visit(e)" for each node e
-       fun visit_all(v: Visitor) is abstract
-
-       # Visit all nodes in reverse order.
-       # Thus, call "v.visit(e)" for each node e starting from the last child
-       fun visit_all_reverse(v: Visitor) is abstract
-end
-
-redef class Token
-       redef fun visit_all(v: Visitor) do end
-       redef fun visit_all_reverse(v: Visitor) do end
-       redef fun replace_child(old_child: ANode, new_child: nullable ANode) do end
-end
-
-redef class Prod
-       redef fun replace_with(n: ANode)
-        do
-                super
-                assert n isa Prod
-                n.location = location
-        end
-end
-
-# Abstract standard visitor
-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
-
-        # Ask the visitor to visit a given node.
-        # Usually automatically called by visit_all* methods.
-       # This methos should not be redefined
-        fun enter_visit(e: nullable ANode)
-       do
-               var old = _current_node
-               _current_node = e
-               visit(e)
-               _current_node = old
-       end
-
-       # The current visited node
-       readable var _current_node: nullable ANode = null
-end
+private import tables
 
 redef class AModule
-    redef fun n_packagedecl=(n)
-    do
-        _n_packagedecl = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_amodule (
-            n_packagedecl: nullable APackagedecl,
+            n_moduledecl: nullable AModuledecl,
             n_imports: Collection[Object], # Should be Collection[AImport]
+            n_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)
@@ -107,13 +40,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
@@ -129,6 +62,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
@@ -143,65 +88,39 @@ redef class AModule
         end
     end
 
+               redef fun n_moduledecl=(node)
+               do
+                       _n_moduledecl = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     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_classdefs do
+            for n in _n_extern_code_blocks do
                 v.enter_visit(n)
            end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_packagedecl != null then
-            v.enter_visit(_n_packagedecl.as(not null))
-        end
-       do
-           var i = _n_imports.length
-            while i >= 0 do
-                v.enter_visit(_n_imports[i])
-               i = i - 1
-           end
-       end
-       do
-           var i = _n_classdefs.length
-            while i >= 0 do
-                v.enter_visit(_n_classdefs[i])
-               i = i - 1
+            for n in _n_classdefs do
+                v.enter_visit(n)
            end
-       end
     end
 end
-redef class APackagedecl
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwpackage=(n)
-    do
-        _n_kwpackage = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
+redef class AModuledecl
     private init empty_init do end
 
-    init init_apackagedecl (
+    init init_amoduledecl (
             n_doc: nullable ADoc,
-            n_kwpackage: nullable TKwpackage,
-            n_id: nullable TId
+            n_kwmodule: nullable TKwmodule,
+            n_name: nullable AModuleName,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -209,10 +128,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)
@@ -227,69 +150,84 @@ 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 n_doc=(node)
+               do
+                       _n_doc = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwmodule=(node)
+               do
+                       _n_kwmodule = node
+                       node.parent = self
+               end
+               redef fun n_name=(node)
+               do
+                       _n_name = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         if _n_doc != null then
             v.enter_visit(_n_doc.as(not null))
         end
-        v.enter_visit(_n_kwpackage)
-        v.enter_visit(_n_id)
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
+        v.enter_visit(_n_kwmodule)
+        v.enter_visit(_n_name)
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
         end
-        v.enter_visit(_n_kwpackage)
-        v.enter_visit(_n_id)
     end
 end
 redef class AStdImport
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwimport=(n)
-    do
-        _n_kwimport = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_astdimport (
             n_visibility: nullable AVisibility,
             n_kwimport: nullable TKwimport,
-            n_id: nullable TId
+            n_name: nullable AModuleName,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -297,8 +235,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)
@@ -323,49 +265,63 @@ 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)
-    end
+               redef fun n_visibility=(node)
+               do
+                       _n_visibility = node
+                       node.parent = self
+               end
+               redef fun n_kwimport=(node)
+               do
+                       _n_kwimport = node
+                       node.parent = self
+               end
+               redef fun n_name=(node)
+               do
+                       _n_name = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    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
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwimport=(n)
-    do
-        _n_kwimport = n
-       n.parent = self
-    end
-    redef fun n_kwend=(n)
-    do
-        _n_kwend = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_anoimport (
@@ -417,14 +373,24 @@ redef class ANoImport
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwimport)
-        v.enter_visit(_n_kwend)
-    end
+               redef fun n_visibility=(node)
+               do
+                       _n_visibility = node
+                       node.parent = self
+               end
+               redef fun n_kwimport=(node)
+               do
+                       _n_kwimport = node
+                       node.parent = self
+               end
+               redef fun n_kwend=(node)
+               do
+                       _n_kwend = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_visibility)
         v.enter_visit(_n_kwimport)
@@ -432,7 +398,6 @@ redef class ANoImport
     end
 end
 redef class APublicVisibility
-
     private init empty_init do end
 
     init init_apublicvisibility
@@ -444,21 +409,13 @@ redef class APublicVisibility
     do
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-    end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
     end
 end
 redef class APrivateVisibility
-    redef fun n_kwprivate=(n)
-    do
-        _n_kwprivate = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aprivatevisibility (
@@ -484,23 +441,19 @@ redef class APrivateVisibility
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwprivate)
-    end
+               redef fun n_kwprivate=(node)
+               do
+                       _n_kwprivate = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwprivate)
     end
 end
 redef class AProtectedVisibility
-    redef fun n_kwprotected=(n)
-    do
-        _n_kwprotected = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aprotectedvisibility (
@@ -526,23 +479,19 @@ redef class AProtectedVisibility
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwprotected)
-    end
+               redef fun n_kwprotected=(node)
+               do
+                       _n_kwprotected = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwprotected)
     end
 end
 redef class AIntrudeVisibility
-    redef fun n_kwintrude=(n)
-    do
-        _n_kwintrude = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aintrudevisibility (
@@ -568,49 +517,19 @@ redef class AIntrudeVisibility
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwintrude)
-    end
+               redef fun n_kwintrude=(node)
+               do
+                       _n_kwintrude = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwintrude)
     end
 end
 redef class AStdClassdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_classkind=(n)
-    do
-        _n_classkind = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_astdclassdef (
@@ -620,8 +539,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
@@ -646,6 +568,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)
@@ -656,6 +586,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)
@@ -722,6 +654,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
@@ -746,8 +698,70 @@ 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 n_doc=(node)
+               do
+                       _n_doc = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwredef=(node)
+               do
+                       _n_kwredef = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_visibility=(node)
+               do
+                       _n_visibility = node
+                       node.parent = self
+               end
+               redef fun n_classkind=(node)
+               do
+                       _n_classkind = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_extern_code_block=(node)
+               do
+                       _n_extern_code_block = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwend=(node)
+               do
+                       _n_kwend = node
+                       node.parent = self
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         if _n_doc != null then
@@ -764,52 +778,22 @@ 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
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_classkind)
-        if _n_id != null then
-            v.enter_visit(_n_id.as(not null))
-        end
-       do
-           var i = _n_formaldefs.length
-            while i >= 0 do
-                v.enter_visit(_n_formaldefs[i])
-               i = i - 1
-           end
-       end
-       do
-           var i = _n_superclasses.length
-            while i >= 0 do
-                v.enter_visit(_n_superclasses[i])
-               i = i - 1
-           end
-       end
-       do
-           var i = _n_propdefs.length
-            while i >= 0 do
-                v.enter_visit(_n_propdefs[i])
-               i = i - 1
-           end
-       end
+        v.enter_visit(_n_kwend)
     end
 end
 redef class ATopClassdef
-
     private init empty_init do end
 
     init init_atopclassdef (
@@ -840,26 +824,16 @@ redef class ATopClassdef
         end
     end
 
+
+
     redef fun visit_all(v: Visitor)
     do
             for n in _n_propdefs do
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       do
-           var i = _n_propdefs.length
-            while i >= 0 do
-                v.enter_visit(_n_propdefs[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class AMainClassdef
-
     private init empty_init do end
 
     init init_amainclassdef (
@@ -890,31 +864,16 @@ redef class AMainClassdef
         end
     end
 
+
+
     redef fun visit_all(v: Visitor)
     do
             for n in _n_propdefs do
                 v.enter_visit(n)
            end
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       do
-           var i = _n_propdefs.length
-            while i >= 0 do
-                v.enter_visit(_n_propdefs[i])
-               i = i - 1
-           end
-       end
-    end
 end
 redef class AConcreteClasskind
-    redef fun n_kwclass=(n)
-    do
-        _n_kwclass = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aconcreteclasskind (
@@ -940,28 +899,19 @@ redef class AConcreteClasskind
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwclass)
-    end
+               redef fun n_kwclass=(node)
+               do
+                       _n_kwclass = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwclass)
     end
 end
 redef class AAbstractClasskind
-    redef fun n_kwabstract=(n)
-    do
-        _n_kwabstract = n
-       n.parent = self
-    end
-    redef fun n_kwclass=(n)
-    do
-        _n_kwclass = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aabstractclasskind (
@@ -1000,25 +950,25 @@ redef class AAbstractClasskind
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwabstract)
-        v.enter_visit(_n_kwclass)
-    end
+               redef fun n_kwabstract=(node)
+               do
+                       _n_kwabstract = node
+                       node.parent = self
+               end
+               redef fun n_kwclass=(node)
+               do
+                       _n_kwclass = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwabstract)
         v.enter_visit(_n_kwclass)
     end
 end
 redef class AInterfaceClasskind
-    redef fun n_kwinterface=(n)
-    do
-        _n_kwinterface = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_ainterfaceclasskind (
@@ -1044,41 +994,37 @@ redef class AInterfaceClasskind
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwinterface)
-    end
+               redef fun n_kwinterface=(node)
+               do
+                       _n_kwinterface = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwinterface)
     end
 end
-redef class AUniversalClasskind
-    redef fun n_kwuniversal=(n)
-    do
-        _n_kwuniversal = n
-       n.parent = self
-    end
-
+redef class AEnumClasskind
     private init empty_init do end
 
-    init init_auniversalclasskind (
-            n_kwuniversal: nullable TKwuniversal
+    init init_aenumclasskind (
+            n_kwenum: nullable TKwenum
     )
     do
         empty_init
-        _n_kwuniversal = n_kwuniversal.as(not null)
-       n_kwuniversal.parent = self
+        _n_kwenum = n_kwenum.as(not null)
+       n_kwenum.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        if _n_kwuniversal == old_child then
+        if _n_kwenum == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa TKwuniversal
-                _n_kwuniversal = new_child
+               assert new_child isa TKwenum
+                _n_kwenum = new_child
            else
                abort
             end
@@ -1086,35 +1032,88 @@ redef class AUniversalClasskind
        end
     end
 
+               redef fun n_kwenum=(node)
+               do
+                       _n_kwenum = node
+                       node.parent = self
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwuniversal)
+        v.enter_visit(_n_kwenum)
     end
+end
+redef class AExternClasskind
+    private init empty_init do end
 
-    redef fun visit_all_reverse(v: Visitor)
+    init init_aexternclasskind (
+            n_kwextern: nullable TKwextern,
+            n_kwclass: nullable TKwclass
+    )
     do
-        v.enter_visit(_n_kwuniversal)
+        empty_init
+        _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
-end
-redef class AFormaldef
-    redef fun n_id=(n)
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        _n_id = n
-       n.parent = self
+        if _n_kwextern == old_child then
+            if new_child != null then
+                new_child.parent = self
+               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 n_type=(n)
+
+               redef fun n_kwextern=(node)
+               do
+                       _n_kwextern = node
+                       node.parent = self
+               end
+               redef fun n_kwclass=(node)
+               do
+                       _n_kwclass = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
+    redef fun visit_all(v: Visitor)
     do
-        _n_type = n
-        if n != null then
-           n.parent = self
+        v.enter_visit(_n_kwextern)
+        if _n_kwclass != null then
+            v.enter_visit(_n_kwclass.as(not null))
         end
     end
-
+end
+redef class AFormaldef
     private init empty_init do end
 
     init init_aformaldef (
             n_id: nullable TClassid,
-            n_type: nullable AType
+            n_type: nullable AType,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -1124,6 +1123,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)
@@ -1148,57 +1151,77 @@ 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 n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+               redef fun n_type=(node)
+               do
+                       _n_type = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_id)
         if _n_type != null then
             v.enter_visit(_n_type.as(not null))
         end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-        if _n_type != null then
-            v.enter_visit(_n_type.as(not null))
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
         end
     end
 end
 redef class ASuperclass
-    redef fun n_kwspecial=(n)
-    do
-        _n_kwspecial = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_asuperclass (
-            n_kwspecial: nullable TKwspecial,
-            n_type: nullable AType
+            n_kwsuper: nullable TKwsuper,
+            n_type: nullable AType,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
-        _n_kwspecial = n_kwspecial.as(not null)
-       n_kwspecial.parent = self
+        _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 _n_kwsuper == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa TKwspecial
-                _n_kwspecial = new_child
+               assert new_child isa TKwsuper
+                _n_kwsuper = new_child
            else
                abort
             end
@@ -1214,88 +1237,47 @@ 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
-        v.enter_visit(_n_kwspecial)
-        v.enter_visit(_n_type)
-    end
+               redef fun n_kwsuper=(node)
+               do
+                       _n_kwsuper = node
+                       node.parent = self
+               end
+               redef fun n_type=(node)
+               do
+                       _n_type = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwspecial)
+        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
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_readable=(n)
-    do
-        _n_readable = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_writable=(n)
-    do
-        _n_writable = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwattr=(n)
-    do
-        _n_kwattr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwvar=(n)
-    do
-        _n_kwvar = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aattrpropdef (
@@ -1304,10 +1286,11 @@ redef class AAttrPropdef
             n_writable: nullable AAble,
             n_kwredef: nullable TKwredef,
             n_visibility: nullable AVisibility,
-            n_kwattr: nullable TKwattr,
             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
@@ -1330,20 +1313,24 @@ redef class AAttrPropdef
        end
         _n_visibility = n_visibility.as(not null)
        n_visibility.parent = self
-        _n_kwattr = n_kwattr
-       if n_kwattr != null then
-               n_kwattr.parent = self
+        _n_kwvar = n_kwvar.as(not null)
+       n_kwvar.parent = self
+        _n_id = n_id
+       if n_id != null then
+               n_id.parent = self
        end
-        _n_kwvar = n_kwvar
-       if n_kwvar != null then
-               n_kwvar.parent = self
+        _n_id2 = n_id2
+       if n_id2 != null then
+               n_id2.parent = self
        end
-        _n_id = n_id.as(not null)
-       n_id.parent = self
         _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
@@ -1402,23 +1389,13 @@ redef class AAttrPropdef
             end
             return
        end
-        if _n_kwattr == old_child then
-            if new_child != null then
-                new_child.parent = self
-               assert new_child isa TKwattr
-                _n_kwattr = new_child
-           else
-               _n_kwattr = null
-            end
-            return
-       end
         if _n_kwvar == old_child then
             if new_child != null then
                 new_child.parent = self
                assert new_child isa TKwvar
                 _n_kwvar = new_child
            else
-               _n_kwvar = null
+               abort
             end
             return
        end
@@ -1428,7 +1405,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
@@ -1442,6 +1429,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
@@ -1454,6 +1451,81 @@ redef class AAttrPropdef
        end
     end
 
+               redef fun n_doc=(node)
+               do
+                       _n_doc = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_readable=(node)
+               do
+                       _n_readable = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_writable=(node)
+               do
+                       _n_writable = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwredef=(node)
+               do
+                       _n_kwredef = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_visibility=(node)
+               do
+                       _n_visibility = node
+                       node.parent = self
+               end
+               redef fun n_kwvar=(node)
+               do
+                       _n_kwvar = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_id2=(node)
+               do
+                       _n_id2 = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_type=(node)
+               do
+                       _n_type = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         if _n_doc != null then
@@ -1469,45 +1541,18 @@ redef class AAttrPropdef
             v.enter_visit(_n_kwredef.as(not null))
         end
         v.enter_visit(_n_visibility)
-        if _n_kwattr != null then
-            v.enter_visit(_n_kwattr.as(not null))
+        v.enter_visit(_n_kwvar)
+        if _n_id != null then
+            v.enter_visit(_n_id.as(not null))
         end
-        if _n_kwvar != null then
-            v.enter_visit(_n_kwvar.as(not null))
+        if _n_id2 != null then
+            v.enter_visit(_n_id2.as(not null))
         end
-        v.enter_visit(_n_id)
         if _n_type != null then
             v.enter_visit(_n_type.as(not null))
         end
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
-        end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_readable != null then
-            v.enter_visit(_n_readable.as(not null))
-        end
-        if _n_writable != null then
-            v.enter_visit(_n_writable.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        if _n_kwattr != null then
-            v.enter_visit(_n_kwattr.as(not null))
-        end
-        if _n_kwvar != null then
-            v.enter_visit(_n_kwvar.as(not null))
-        end
-        v.enter_visit(_n_id)
-        if _n_type != null then
-            v.enter_visit(_n_type.as(not null))
+        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))
@@ -1515,36 +1560,6 @@ redef class AAttrPropdef
     end
 end
 redef class AMethPropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_methid=(n)
-    do
-        _n_methid = n
-       n.parent = self
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_amethpropdef (
@@ -1626,6 +1641,37 @@ redef class AMethPropdef
        end
     end
 
+               redef fun n_doc=(node)
+               do
+                       _n_doc = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwredef=(node)
+               do
+                       _n_kwredef = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_visibility=(node)
+               do
+                       _n_visibility = node
+                       node.parent = self
+               end
+               redef fun n_methid=(node)
+               do
+                       _n_methid = node
+                       node.parent = self
+               end
+               redef fun n_signature=(node)
+               do
+                       _n_signature = node
+                       node.parent = self
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         if _n_doc != null then
@@ -1638,57 +1684,9 @@ redef class AMethPropdef
         v.enter_visit(_n_methid)
         v.enter_visit(_n_signature)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_methid)
-        v.enter_visit(_n_signature)
-    end
-end
-redef class ADeferredMethPropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwmeth=(n)
-    do
-        _n_kwmeth = n
-       n.parent = self
-    end
-    redef fun n_methid=(n)
-    do
-        _n_methid = n
-       n.parent = self
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-
-    private init empty_init do end
+end
+redef class ADeferredMethPropdef
+    private init empty_init do end
 
     init init_adeferredmethpropdef (
             n_doc: nullable ADoc,
@@ -1696,7 +1694,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
@@ -1716,6 +1715,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)
@@ -1780,8 +1783,61 @@ 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 n_doc=(node)
+               do
+                       _n_doc = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwredef=(node)
+               do
+                       _n_kwredef = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_visibility=(node)
+               do
+                       _n_visibility = node
+                       node.parent = self
+               end
+               redef fun n_kwmeth=(node)
+               do
+                       _n_kwmeth = node
+                       node.parent = self
+               end
+               redef fun n_methid=(node)
+               do
+                       _n_methid = node
+                       node.parent = self
+               end
+               redef fun n_signature=(node)
+               do
+                       _n_signature = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         if _n_doc != null then
@@ -1794,58 +1850,12 @@ redef class ADeferredMethPropdef
         v.enter_visit(_n_kwmeth)
         v.enter_visit(_n_methid)
         v.enter_visit(_n_signature)
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
         end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwmeth)
-        v.enter_visit(_n_methid)
-        v.enter_visit(_n_signature)
     end
 end
 redef class AInternMethPropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwmeth=(n)
-    do
-        _n_kwmeth = n
-       n.parent = self
-    end
-    redef fun n_methid=(n)
-    do
-        _n_methid = n
-       n.parent = self
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_ainternmethpropdef (
@@ -1940,21 +1950,43 @@ redef class AInternMethPropdef
        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_kwmeth)
-        v.enter_visit(_n_methid)
-        v.enter_visit(_n_signature)
-    end
+               redef fun n_doc=(node)
+               do
+                       _n_doc = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwredef=(node)
+               do
+                       _n_kwredef = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_visibility=(node)
+               do
+                       _n_visibility = node
+                       node.parent = self
+               end
+               redef fun n_kwmeth=(node)
+               do
+                       _n_kwmeth = node
+                       node.parent = self
+               end
+               redef fun n_methid=(node)
+               do
+                       _n_methid = node
+                       node.parent = self
+               end
+               redef fun n_signature=(node)
+               do
+                       _n_signature = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         if _n_doc != null then
             v.enter_visit(_n_doc.as(not null))
@@ -1969,48 +2001,6 @@ redef class AInternMethPropdef
     end
 end
 redef class AExternMethPropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwmeth=(n)
-    do
-        _n_kwmeth = n
-       n.parent = self
-    end
-    redef fun n_methid=(n)
-    do
-        _n_methid = n
-       n.parent = self
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-    redef fun n_extern=(n)
-    do
-        _n_extern = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aexternmethpropdef (
@@ -2020,7 +2010,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
@@ -2044,6 +2036,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)
@@ -2118,8 +2118,85 @@ 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 n_doc=(node)
+               do
+                       _n_doc = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwredef=(node)
+               do
+                       _n_kwredef = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_visibility=(node)
+               do
+                       _n_visibility = node
+                       node.parent = self
+               end
+               redef fun n_kwmeth=(node)
+               do
+                       _n_kwmeth = node
+                       node.parent = self
+               end
+               redef fun n_methid=(node)
+               do
+                       _n_methid = node
+                       node.parent = self
+               end
+               redef fun n_signature=(node)
+               do
+                       _n_signature = node
+                       node.parent = self
+               end
+               redef fun n_extern=(node)
+               do
+                       _n_extern = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_extern_calls=(node)
+               do
+                       _n_extern_calls = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_extern_code_block=(node)
+               do
+                       _n_extern_code_block = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         if _n_doc != null then
@@ -2135,68 +2212,15 @@ redef class AExternMethPropdef
         if _n_extern != null then
             v.enter_visit(_n_extern.as(not null))
         end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
+        if _n_extern_calls != null then
+            v.enter_visit(_n_extern_calls.as(not null))
         end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwmeth)
-        v.enter_visit(_n_methid)
-        v.enter_visit(_n_signature)
-        if _n_extern != null then
-            v.enter_visit(_n_extern.as(not null))
+        if _n_extern_code_block != null then
+            v.enter_visit(_n_extern_code_block.as(not null))
         end
     end
 end
 redef class AConcreteMethPropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwmeth=(n)
-    do
-        _n_kwmeth = n
-       n.parent = self
-    end
-    redef fun n_methid=(n)
-    do
-        _n_methid = n
-       n.parent = self
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-    redef fun n_block=(n)
-    do
-        _n_block = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aconcretemethpropdef (
@@ -2206,6 +2230,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
@@ -2226,6 +2251,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
@@ -2294,6 +2323,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
@@ -2306,6 +2345,56 @@ redef class AConcreteMethPropdef
        end
     end
 
+               redef fun n_doc=(node)
+               do
+                       _n_doc = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwredef=(node)
+               do
+                       _n_kwredef = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_visibility=(node)
+               do
+                       _n_visibility = node
+                       node.parent = self
+               end
+               redef fun n_kwmeth=(node)
+               do
+                       _n_kwmeth = node
+                       node.parent = self
+               end
+               redef fun n_methid=(node)
+               do
+                       _n_methid = node
+                       node.parent = self
+               end
+               redef fun n_signature=(node)
+               do
+                       _n_signature = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_block=(node)
+               do
+                       _n_block = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         if _n_doc != null then
@@ -2318,73 +2407,15 @@ redef class AConcreteMethPropdef
         v.enter_visit(_n_kwmeth)
         v.enter_visit(_n_methid)
         v.enter_visit(_n_signature)
-        if _n_block != null then
-            v.enter_visit(_n_block.as(not null))
-        end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
         end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwmeth)
-        v.enter_visit(_n_methid)
-        v.enter_visit(_n_signature)
         if _n_block != null then
             v.enter_visit(_n_block.as(not null))
         end
     end
 end
 redef class AConcreteInitPropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwinit=(n)
-    do
-        _n_kwinit = n
-       n.parent = self
-    end
-    redef fun n_methid=(n)
-    do
-        _n_methid = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-    redef fun n_block=(n)
-    do
-        _n_block = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aconcreteinitpropdef (
@@ -2394,6 +2425,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
@@ -2416,6 +2448,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
@@ -2484,6 +2520,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
@@ -2496,6 +2542,58 @@ redef class AConcreteInitPropdef
        end
     end
 
+               redef fun n_doc=(node)
+               do
+                       _n_doc = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwredef=(node)
+               do
+                       _n_kwredef = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_visibility=(node)
+               do
+                       _n_visibility = node
+                       node.parent = self
+               end
+               redef fun n_kwinit=(node)
+               do
+                       _n_kwinit = node
+                       node.parent = self
+               end
+               redef fun n_methid=(node)
+               do
+                       _n_methid = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_signature=(node)
+               do
+                       _n_signature = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_block=(node)
+               do
+                       _n_block = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         if _n_doc != null then
@@ -2510,46 +2608,241 @@ redef class AConcreteInitPropdef
             v.enter_visit(_n_methid.as(not null))
         end
         v.enter_visit(_n_signature)
-        if _n_block != null then
-            v.enter_visit(_n_block.as(not null))
-        end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwinit)
-        if _n_methid != null then
-            v.enter_visit(_n_methid.as(not null))
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
         end
-        v.enter_visit(_n_signature)
         if _n_block != null then
             v.enter_visit(_n_block.as(not null))
         end
     end
 end
-redef class AMainMethPropdef
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_block=(n)
+redef class AExternInitPropdef
+    private init empty_init do end
+
+    init init_aexterninitpropdef (
+            n_doc: nullable ADoc,
+            n_kwredef: nullable TKwredef,
+            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
-        _n_block = n
-        if n != null then
-           n.parent = self
-        end
+        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_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
+               assert new_child isa TKwredef
+                _n_kwredef = new_child
+           else
+               _n_kwredef = null
+            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
+               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 n_doc=(node)
+               do
+                       _n_doc = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwredef=(node)
+               do
+                       _n_kwredef = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_visibility=(node)
+               do
+                       _n_visibility = node
+                       node.parent = self
+               end
+               redef fun n_kwnew=(node)
+               do
+                       _n_kwnew = node
+                       node.parent = self
+               end
+               redef fun n_methid=(node)
+               do
+                       _n_methid = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_signature=(node)
+               do
+                       _n_signature = node
+                       node.parent = self
+               end
+               redef fun n_extern=(node)
+               do
+                       _n_extern = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_extern_calls=(node)
+               do
+                       _n_extern_calls = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_extern_code_block=(node)
+               do
+                       _n_extern_code_block = node
+                       if node != null then
+                               node.parent = self
+                       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 (
@@ -2592,17 +2885,23 @@ redef class AMainMethPropdef
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        if _n_block != null then
-            v.enter_visit(_n_block.as(not null))
-        end
-    end
+               redef fun n_kwredef=(node)
+               do
+                       _n_kwredef = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_block=(node)
+               do
+                       _n_block = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         if _n_kwredef != null then
             v.enter_visit(_n_kwredef.as(not null))
@@ -2613,41 +2912,6 @@ redef class AMainMethPropdef
     end
 end
 redef class ATypePropdef
-    redef fun n_doc=(n)
-    do
-        _n_doc = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_visibility=(n)
-    do
-        _n_visibility = n
-       n.parent = self
-    end
-    redef fun n_kwtype=(n)
-    do
-        _n_kwtype = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_atypepropdef (
@@ -2656,7 +2920,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
@@ -2676,6 +2941,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)
@@ -2740,8 +3009,61 @@ 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 n_doc=(node)
+               do
+                       _n_doc = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwredef=(node)
+               do
+                       _n_kwredef = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_visibility=(node)
+               do
+                       _n_visibility = node
+                       node.parent = self
+               end
+               redef fun n_kwtype=(node)
+               do
+                       _n_kwtype = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+               redef fun n_type=(node)
+               do
+                       _n_type = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         if _n_doc != null then
@@ -2754,36 +3076,12 @@ redef class ATypePropdef
         v.enter_visit(_n_kwtype)
         v.enter_visit(_n_id)
         v.enter_visit(_n_type)
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_doc != null then
-            v.enter_visit(_n_doc.as(not null))
-        end
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
         end
-        v.enter_visit(_n_visibility)
-        v.enter_visit(_n_kwtype)
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_type)
     end
 end
 redef class AReadAble
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwreadable=(n)
-    do
-        _n_kwreadable = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_areadable (
@@ -2824,15 +3122,21 @@ redef class AReadAble
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_kwreadable)
-    end
+               redef fun n_kwredef=(node)
+               do
+                       _n_kwredef = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwreadable=(node)
+               do
+                       _n_kwreadable = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         if _n_kwredef != null then
             v.enter_visit(_n_kwredef.as(not null))
@@ -2841,23 +3145,11 @@ redef class AReadAble
     end
 end
 redef class AWriteAble
-    redef fun n_kwredef=(n)
-    do
-        _n_kwredef = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwwritable=(n)
-    do
-        _n_kwwritable = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_awriteable (
             n_kwredef: nullable TKwredef,
+            n_visibility: nullable AVisibility,
             n_kwwritable: nullable TKwwritable
     )
     do
@@ -2866,6 +3158,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
@@ -2882,6 +3178,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
@@ -2894,30 +3200,40 @@ redef class AWriteAble
        end
     end
 
+               redef fun n_kwredef=(node)
+               do
+                       _n_kwredef = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_visibility=(node)
+               do
+                       _n_visibility = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwwritable=(node)
+               do
+                       _n_kwwritable = node
+                       node.parent = self
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         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
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_kwredef != null then
-            v.enter_visit(_n_kwredef.as(not null))
-        end
-        v.enter_visit(_n_kwwritable)
-    end
-end
-redef class AIdMethid
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
-    private init empty_init do end
+end
+redef class AIdMethid
+    private init empty_init do end
 
     init init_aidmethid (
             n_id: nullable TId
@@ -2942,23 +3258,19 @@ redef class AIdMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-    end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_id)
     end
 end
 redef class APlusMethid
-    redef fun n_plus=(n)
-    do
-        _n_plus = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aplusmethid (
@@ -2984,23 +3296,19 @@ redef class APlusMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_plus)
-    end
+               redef fun n_plus=(node)
+               do
+                       _n_plus = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_plus)
     end
 end
 redef class AMinusMethid
-    redef fun n_minus=(n)
-    do
-        _n_minus = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aminusmethid (
@@ -3026,23 +3334,19 @@ redef class AMinusMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_minus)
-    end
+               redef fun n_minus=(node)
+               do
+                       _n_minus = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_minus)
     end
 end
 redef class AStarMethid
-    redef fun n_star=(n)
-    do
-        _n_star = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_astarmethid (
@@ -3068,23 +3372,19 @@ redef class AStarMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_star)
-    end
+               redef fun n_star=(node)
+               do
+                       _n_star = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_star)
     end
 end
 redef class ASlashMethid
-    redef fun n_slash=(n)
-    do
-        _n_slash = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aslashmethid (
@@ -3110,23 +3410,19 @@ redef class ASlashMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_slash)
-    end
+               redef fun n_slash=(node)
+               do
+                       _n_slash = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_slash)
     end
 end
 redef class APercentMethid
-    redef fun n_percent=(n)
-    do
-        _n_percent = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_apercentmethid (
@@ -3152,23 +3448,19 @@ redef class APercentMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_percent)
-    end
+               redef fun n_percent=(node)
+               do
+                       _n_percent = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_percent)
     end
 end
 redef class AEqMethid
-    redef fun n_eq=(n)
-    do
-        _n_eq = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aeqmethid (
@@ -3194,23 +3486,19 @@ redef class AEqMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_eq)
-    end
+               redef fun n_eq=(node)
+               do
+                       _n_eq = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_eq)
     end
 end
 redef class ANeMethid
-    redef fun n_ne=(n)
-    do
-        _n_ne = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_anemethid (
@@ -3236,23 +3524,19 @@ redef class ANeMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_ne)
-    end
+               redef fun n_ne=(node)
+               do
+                       _n_ne = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_ne)
     end
 end
 redef class ALeMethid
-    redef fun n_le=(n)
-    do
-        _n_le = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_alemethid (
@@ -3278,23 +3562,19 @@ redef class ALeMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_le)
-    end
+               redef fun n_le=(node)
+               do
+                       _n_le = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_le)
     end
 end
 redef class AGeMethid
-    redef fun n_ge=(n)
-    do
-        _n_ge = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_agemethid (
@@ -3320,23 +3600,19 @@ redef class AGeMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_ge)
-    end
+               redef fun n_ge=(node)
+               do
+                       _n_ge = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_ge)
     end
 end
 redef class ALtMethid
-    redef fun n_lt=(n)
-    do
-        _n_lt = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_altmethid (
@@ -3362,23 +3638,19 @@ redef class ALtMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_lt)
-    end
+               redef fun n_lt=(node)
+               do
+                       _n_lt = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_lt)
     end
 end
 redef class AGtMethid
-    redef fun n_gt=(n)
-    do
-        _n_gt = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_agtmethid (
@@ -3404,28 +3676,95 @@ redef class AGtMethid
        end
     end
 
+               redef fun n_gt=(node)
+               do
+                       _n_gt = node
+                       node.parent = self
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         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 visit_all_reverse(v: Visitor)
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        v.enter_visit(_n_gt)
+        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 n_ll=(node)
+               do
+                       _n_ll = node
+                       node.parent = self
+               end
+
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_ll)
     end
 end
-redef class ABraMethid
-    redef fun n_obra=(n)
+redef class AGgMethid
+    private init empty_init do end
+
+    init init_aggmethid (
+            n_gg: nullable TGg
+    )
     do
-        _n_obra = n
-       n.parent = self
+        empty_init
+        _n_gg = n_gg.as(not null)
+       n_gg.parent = self
     end
-    redef fun n_cbra=(n)
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        _n_cbra = n
-       n.parent = self
+        if _n_gg == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TGg
+                _n_gg = new_child
+           else
+               abort
+            end
+            return
+       end
     end
 
+               redef fun n_gg=(node)
+               do
+                       _n_gg = node
+                       node.parent = self
+               end
+
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_gg)
+    end
+end
+redef class ABraMethid
     private init empty_init do end
 
     init init_abramethid (
@@ -3464,25 +3803,25 @@ redef class ABraMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_obra)
-        v.enter_visit(_n_cbra)
-    end
+               redef fun n_obra=(node)
+               do
+                       _n_obra = node
+                       node.parent = self
+               end
+               redef fun n_cbra=(node)
+               do
+                       _n_cbra = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_obra)
         v.enter_visit(_n_cbra)
     end
 end
 redef class AStarshipMethid
-    redef fun n_starship=(n)
-    do
-        _n_starship = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_astarshipmethid (
@@ -3508,28 +3847,19 @@ redef class AStarshipMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_starship)
-    end
+               redef fun n_starship=(node)
+               do
+                       _n_starship = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_starship)
     end
 end
 redef class AAssignMethid
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aassignmethid (
@@ -3568,35 +3898,25 @@ redef class AAssignMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_assign)
-    end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+               redef fun n_assign=(node)
+               do
+                       _n_assign = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_id)
         v.enter_visit(_n_assign)
     end
 end
 redef class ABraassignMethid
-    redef fun n_obra=(n)
-    do
-        _n_obra = n
-       n.parent = self
-    end
-    redef fun n_cbra=(n)
-    do
-        _n_cbra = n
-       n.parent = self
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_abraassignmethid (
@@ -3648,14 +3968,24 @@ redef class ABraassignMethid
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_obra)
-        v.enter_visit(_n_cbra)
-        v.enter_visit(_n_assign)
-    end
+               redef fun n_obra=(node)
+               do
+                       _n_obra = node
+                       node.parent = self
+               end
+               redef fun n_cbra=(node)
+               do
+                       _n_cbra = node
+                       node.parent = self
+               end
+               redef fun n_assign=(node)
+               do
+                       _n_assign = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_obra)
         v.enter_visit(_n_cbra)
@@ -3663,41 +3993,47 @@ redef class ABraassignMethid
     end
 end
 redef class ASignature
-    redef fun n_type=(n)
-    do
-        _n_type = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_asignature (
+            n_opar: nullable TOpar,
             n_params: Collection[Object], # Should be Collection[AParam]
-            n_type: nullable AType,
-            n_closure_decls: Collection[Object] # Should be Collection[AClosureDecl]
+            n_cpar: nullable TCpar,
+            n_type: nullable AType
     )
     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
        end
-       for n in n_closure_decls do
-               assert n isa AClosureDecl
-               _n_closure_decls.add(n)
-               n.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
+               _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
@@ -3710,6 +4046,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
@@ -3720,81 +4066,55 @@ redef class ASignature
             end
             return
        end
-        for i in [0.._n_closure_decls.length[ do
-            if _n_closure_decls[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AClosureDecl
-                    _n_closure_decls[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_closure_decls.remove_at(i)
-                end
-                return
-            end
-        end
     end
 
+               redef fun n_opar=(node)
+               do
+                       _n_opar = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_cpar=(node)
+               do
+                       _n_cpar = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_type=(node)
+               do
+                       _n_type = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     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_type != null then
-            v.enter_visit(_n_type.as(not null))
+        if _n_cpar != null then
+            v.enter_visit(_n_cpar.as(not null))
         end
-            for n in _n_closure_decls do
-                v.enter_visit(n)
-           end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       do
-           var i = _n_params.length
-            while i >= 0 do
-                v.enter_visit(_n_params[i])
-               i = i - 1
-           end
-       end
         if _n_type != null then
             v.enter_visit(_n_type.as(not null))
         end
-       do
-           var i = _n_closure_decls.length
-            while i >= 0 do
-                v.enter_visit(_n_closure_decls[i])
-               i = i - 1
-           end
-       end
     end
 end
 redef class AParam
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_dotdotdot=(n)
-    do
-        _n_dotdotdot = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aparam (
             n_id: nullable TId,
             n_type: nullable AType,
-            n_dotdotdot: nullable TDotdotdot
+            n_dotdotdot: nullable TDotdotdot,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -3808,6 +4128,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)
@@ -3842,188 +4166,68 @@ redef class AParam
             end
             return
        end
-    end
-
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-        if _n_type != null then
-            v.enter_visit(_n_type.as(not null))
-        end
-        if _n_dotdotdot != null then
-            v.enter_visit(_n_dotdotdot.as(not null))
-        end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-        if _n_type != null then
-            v.enter_visit(_n_type.as(not null))
-        end
-        if _n_dotdotdot != null then
-            v.enter_visit(_n_dotdotdot.as(not null))
-        end
-    end
-end
-redef class AClosureDecl
-    redef fun n_kwwith=(n)
-    do
-        _n_kwwith = n
-       n.parent = self
-    end
-    redef fun n_kwbreak=(n)
-    do
-        _n_kwbreak = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_signature=(n)
-    do
-        _n_signature = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
-    private init empty_init do end
-
-    init init_aclosuredecl (
-            n_kwwith: nullable TKwwith,
-            n_kwbreak: nullable TKwbreak,
-            n_id: nullable TId,
-            n_signature: nullable ASignature,
-            n_expr: nullable AExpr
-    )
-    do
-        empty_init
-        _n_kwwith = n_kwwith.as(not null)
-       n_kwwith.parent = self
-        _n_kwbreak = n_kwbreak
-       if n_kwbreak != null then
-               n_kwbreak.parent = self
-       end
-        _n_id = n_id.as(not null)
-       n_id.parent = self
-        _n_signature = n_signature.as(not null)
-       n_signature.parent = self
-        _n_expr = n_expr
-       if n_expr != null then
-               n_expr.parent = self
-       end
-    end
-
-    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
-    do
-        if _n_kwwith == old_child then
-            if new_child != null then
-                new_child.parent = self
-               assert new_child isa TKwwith
-                _n_kwwith = new_child
-           else
-               abort
-            end
-            return
-       end
-        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
-               _n_kwbreak = null
-            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
-        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_expr == old_child then
+        if _n_annotations == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa AExpr
-                _n_expr = new_child
+               assert new_child isa AAnnotations
+                _n_annotations = new_child
            else
-               _n_expr = null
+               _n_annotations = null
             end
             return
        end
     end
 
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+               redef fun n_type=(node)
+               do
+                       _n_type = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_dotdotdot=(node)
+               do
+                       _n_dotdotdot = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwwith)
-        if _n_kwbreak != null then
-            v.enter_visit(_n_kwbreak.as(not null))
-        end
         v.enter_visit(_n_id)
-        v.enter_visit(_n_signature)
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
+        if _n_type != null then
+            v.enter_visit(_n_type.as(not null))
         end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwwith)
-        if _n_kwbreak != null then
-            v.enter_visit(_n_kwbreak.as(not null))
+        if _n_dotdotdot != null then
+            v.enter_visit(_n_dotdotdot.as(not null))
         end
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_signature)
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
         end
     end
 end
 redef class AType
-    redef fun n_kwnullable=(n)
-    do
-        _n_kwnullable = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     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
@@ -4038,6 +4242,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)
@@ -4074,8 +4282,39 @@ 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 n_kwnullable=(node)
+               do
+                       _n_kwnullable = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         if _n_kwnullable != null then
@@ -4085,35 +4324,12 @@ redef class AType
             for n in _n_types do
                 v.enter_visit(n)
            end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        if _n_kwnullable != null then
-            v.enter_visit(_n_kwnullable.as(not null))
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
         end
-        v.enter_visit(_n_id)
-       do
-           var i = _n_types.length
-            while i >= 0 do
-                v.enter_visit(_n_types[i])
-               i = i - 1
-           end
-       end
     end
 end
 redef class ALabel
-    redef fun n_kwlabel=(n)
-    do
-        _n_kwlabel = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_alabel (
@@ -4152,24 +4368,30 @@ redef class ALabel
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwlabel)
-        v.enter_visit(_n_id)
-    end
+               redef fun n_kwlabel=(node)
+               do
+                       _n_kwlabel = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwlabel)
         v.enter_visit(_n_id)
     end
 end
 redef class ABlockExpr
-
     private init empty_init do end
 
     init init_ablockexpr (
-            n_expr: Collection[Object] # Should be Collection[AExpr]
+            n_expr: Collection[Object], # Should be Collection[AExpr]
+            n_kwend: nullable TKwend
     )
     do
         empty_init
@@ -4178,6 +4400,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)
@@ -4194,59 +4420,38 @@ 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 n_kwend=(node)
+               do
+                       _n_kwend = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
             for n in _n_expr do
                 v.enter_visit(n)
            end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       do
-           var i = _n_expr.length
-            while i >= 0 do
-                v.enter_visit(_n_expr[i])
-               i = i - 1
-           end
-       end
+        if _n_kwend != null then
+            v.enter_visit(_n_kwend.as(not null))
+        end
     end
 end
 redef class AVardeclExpr
-    redef fun n_kwvar=(n)
-    do
-        _n_kwvar = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_avardeclexpr (
@@ -4254,7 +4459,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
@@ -4274,6 +4480,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)
@@ -4328,8 +4538,58 @@ 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 n_kwvar=(node)
+               do
+                       _n_kwvar = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+               redef fun n_type=(node)
+               do
+                       _n_type = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_assign=(node)
+               do
+                       _n_assign = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwvar)
@@ -4343,37 +4603,12 @@ redef class AVardeclExpr
         if _n_expr != null then
             v.enter_visit(_n_expr.as(not null))
         end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwvar)
-        v.enter_visit(_n_id)
-        if _n_type != null then
-            v.enter_visit(_n_type.as(not null))
-        end
-        if _n_assign != null then
-            v.enter_visit(_n_assign.as(not null))
-        end
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
         end
     end
 end
 redef class AReturnExpr
-    redef fun n_kwreturn=(n)
-    do
-        _n_kwreturn = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_areturnexpr (
@@ -4382,8 +4617,10 @@ redef class AReturnExpr
     )
     do
         empty_init
-        _n_kwreturn = n_kwreturn.as(not null)
-       n_kwreturn.parent = self
+        _n_kwreturn = n_kwreturn
+       if n_kwreturn != null then
+               n_kwreturn.parent = self
+       end
         _n_expr = n_expr
        if n_expr != null then
                n_expr.parent = self
@@ -4398,7 +4635,7 @@ redef class AReturnExpr
                assert new_child isa TKwreturn
                 _n_kwreturn = new_child
            else
-               abort
+               _n_kwreturn = null
             end
             return
        end
@@ -4414,43 +4651,33 @@ redef class AReturnExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwreturn)
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
-        end
-    end
+               redef fun n_kwreturn=(node)
+               do
+                       _n_kwreturn = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwreturn)
+        if _n_kwreturn != null then
+            v.enter_visit(_n_kwreturn.as(not null))
+        end
         if _n_expr != null then
             v.enter_visit(_n_expr.as(not null))
         end
     end
 end
 redef class ABreakExpr
-    redef fun n_kwbreak=(n)
-    do
-        _n_kwbreak = n
-       n.parent = self
-    end
-    redef fun n_label=(n)
-    do
-        _n_label = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_abreakexpr (
@@ -4506,18 +4733,28 @@ redef class ABreakExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwbreak)
-        if _n_label != null then
-            v.enter_visit(_n_label.as(not null))
-        end
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
-        end
-    end
+               redef fun n_kwbreak=(node)
+               do
+                       _n_kwbreak = node
+                       node.parent = self
+               end
+               redef fun n_label=(node)
+               do
+                       _n_label = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwbreak)
         if _n_label != null then
@@ -4529,12 +4766,6 @@ redef class ABreakExpr
     end
 end
 redef class AAbortExpr
-    redef fun n_kwabort=(n)
-    do
-        _n_kwabort = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aabortexpr (
@@ -4560,37 +4791,19 @@ redef class AAbortExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwabort)
-    end
+               redef fun n_kwabort=(node)
+               do
+                       _n_kwabort = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwabort)
     end
 end
 redef class AContinueExpr
-    redef fun n_kwcontinue=(n)
-    do
-        _n_kwcontinue = n
-       n.parent = self
-    end
-    redef fun n_label=(n)
-    do
-        _n_label = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_acontinueexpr (
@@ -4600,8 +4813,10 @@ redef class AContinueExpr
     )
     do
         empty_init
-        _n_kwcontinue = n_kwcontinue.as(not null)
-       n_kwcontinue.parent = self
+        _n_kwcontinue = n_kwcontinue
+       if n_kwcontinue != null then
+               n_kwcontinue.parent = self
+       end
         _n_label = n_label
        if n_label != null then
                n_label.parent = self
@@ -4620,7 +4835,7 @@ redef class AContinueExpr
                assert new_child isa TKwcontinue
                 _n_kwcontinue = new_child
            else
-               abort
+               _n_kwcontinue = null
             end
             return
        end
@@ -4646,20 +4861,34 @@ redef class AContinueExpr
        end
     end
 
+               redef fun n_kwcontinue=(node)
+               do
+                       _n_kwcontinue = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_label=(node)
+               do
+                       _n_label = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwcontinue)
-        if _n_label != null then
-            v.enter_visit(_n_label.as(not null))
+        if _n_kwcontinue != null then
+            v.enter_visit(_n_kwcontinue.as(not null))
         end
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
-        end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwcontinue)
         if _n_label != null then
             v.enter_visit(_n_label.as(not null))
         end
@@ -4669,26 +4898,6 @@ redef class AContinueExpr
     end
 end
 redef class ADoExpr
-    redef fun n_kwdo=(n)
-    do
-        _n_kwdo = n
-       n.parent = self
-    end
-    redef fun n_block=(n)
-    do
-        _n_block = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_label=(n)
-    do
-        _n_label = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_adoexpr (
@@ -4744,18 +4953,28 @@ redef class ADoExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwdo)
-        if _n_block != null then
-            v.enter_visit(_n_block.as(not null))
-        end
-        if _n_label != null then
-            v.enter_visit(_n_label.as(not null))
-        end
-    end
+               redef fun n_kwdo=(node)
+               do
+                       _n_kwdo = node
+                       node.parent = self
+               end
+               redef fun n_block=(node)
+               do
+                       _n_block = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_label=(node)
+               do
+                       _n_label = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwdo)
         if _n_block != null then
@@ -4767,31 +4986,6 @@ redef class ADoExpr
     end
 end
 redef class AIfExpr
-    redef fun n_kwif=(n)
-    do
-        _n_kwif = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_then=(n)
-    do
-        _n_then = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_else=(n)
-    do
-        _n_else = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_aifexpr (
@@ -4860,19 +5054,33 @@ redef class AIfExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwif)
-        v.enter_visit(_n_expr)
-        if _n_then != null then
-            v.enter_visit(_n_then.as(not null))
-        end
-        if _n_else != null then
-            v.enter_visit(_n_else.as(not null))
-        end
-    end
+               redef fun n_kwif=(node)
+               do
+                       _n_kwif = node
+                       node.parent = self
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_then=(node)
+               do
+                       _n_then = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_else=(node)
+               do
+                       _n_else = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwif)
         v.enter_visit(_n_expr)
@@ -4885,37 +5093,6 @@ redef class AIfExpr
     end
 end
 redef class AIfexprExpr
-    redef fun n_kwif=(n)
-    do
-        _n_kwif = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_kwthen=(n)
-    do
-        _n_kwthen = n
-       n.parent = self
-    end
-    redef fun n_then=(n)
-    do
-        _n_then = n
-       n.parent = self
-    end
-    redef fun n_kwelse=(n)
-    do
-        _n_kwelse = n
-       n.parent = self
-    end
-    redef fun n_else=(n)
-    do
-        _n_else = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aifexprexpr (
@@ -5006,17 +5183,39 @@ redef class AIfexprExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwif)
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_kwthen)
-        v.enter_visit(_n_then)
-        v.enter_visit(_n_kwelse)
-        v.enter_visit(_n_else)
-    end
+               redef fun n_kwif=(node)
+               do
+                       _n_kwif = node
+                       node.parent = self
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_kwthen=(node)
+               do
+                       _n_kwthen = node
+                       node.parent = self
+               end
+               redef fun n_then=(node)
+               do
+                       _n_then = node
+                       node.parent = self
+               end
+               redef fun n_kwelse=(node)
+               do
+                       _n_kwelse = node
+                       node.parent = self
+               end
+               redef fun n_else=(node)
+               do
+                       _n_else = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwif)
         v.enter_visit(_n_expr)
@@ -5027,36 +5226,6 @@ redef class AIfexprExpr
     end
 end
 redef class AWhileExpr
-    redef fun n_kwwhile=(n)
-    do
-        _n_kwwhile = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_kwdo=(n)
-    do
-        _n_kwdo = n
-       n.parent = self
-    end
-    redef fun n_block=(n)
-    do
-        _n_block = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_label=(n)
-    do
-        _n_label = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_awhileexpr (
@@ -5138,20 +5307,38 @@ redef class AWhileExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwwhile)
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_kwdo)
-        if _n_block != null then
-            v.enter_visit(_n_block.as(not null))
-        end
-        if _n_label != null then
-            v.enter_visit(_n_label.as(not null))
-        end
-    end
+               redef fun n_kwwhile=(node)
+               do
+                       _n_kwwhile = node
+                       node.parent = self
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_kwdo=(node)
+               do
+                       _n_kwdo = node
+                       node.parent = self
+               end
+               redef fun n_block=(node)
+               do
+                       _n_block = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_label=(node)
+               do
+                       _n_label = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwwhile)
         v.enter_visit(_n_expr)
@@ -5164,62 +5351,18 @@ redef class AWhileExpr
         end
     end
 end
-redef class AForExpr
-    redef fun n_kwfor=(n)
-    do
-        _n_kwfor = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_kwdo=(n)
-    do
-        _n_kwdo = n
-       n.parent = self
-    end
-    redef fun n_block=(n)
-    do
-        _n_block = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_label=(n)
-    do
-        _n_label = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
+redef class ALoopExpr
     private init empty_init do end
 
-    init init_aforexpr (
-            n_kwfor: nullable TKwfor,
-            n_id: nullable TId,
-            n_expr: nullable AExpr,
-            n_kwdo: nullable TKwdo,
+    init init_aloopexpr (
+            n_kwloop: nullable TKwloop,
             n_block: nullable AExpr,
             n_label: nullable ALabel
     )
     do
         empty_init
-        _n_kwfor = n_kwfor.as(not null)
-       n_kwfor.parent = self
-        _n_id = n_id.as(not null)
-       n_id.parent = self
-        _n_expr = n_expr.as(not null)
-       n_expr.parent = self
-        _n_kwdo = n_kwdo.as(not null)
-       n_kwdo.parent = self
+        _n_kwloop = n_kwloop.as(not null)
+       n_kwloop.parent = self
         _n_block = n_block
        if n_block != null then
                n_block.parent = self
@@ -5232,41 +5375,11 @@ redef class AForExpr
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        if _n_kwfor == old_child then
-            if new_child != null then
-                new_child.parent = self
-               assert new_child isa TKwfor
-                _n_kwfor = new_child
-           else
-               abort
-            end
-            return
-       end
-        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
-        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_kwdo == old_child then
+        if _n_kwloop == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa TKwdo
-                _n_kwdo = new_child
+               assert new_child isa TKwloop
+                _n_kwloop = new_child
            else
                abort
             end
@@ -5294,12 +5407,30 @@ redef class AForExpr
        end
     end
 
+               redef fun n_kwloop=(node)
+               do
+                       _n_kwloop = node
+                       node.parent = self
+               end
+               redef fun n_block=(node)
+               do
+                       _n_block = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_label=(node)
+               do
+                       _n_label = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwfor)
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_kwdo)
+        v.enter_visit(_n_kwloop)
         if _n_block != null then
             v.enter_visit(_n_block.as(not null))
         end
@@ -5307,11 +5438,144 @@ redef class AForExpr
             v.enter_visit(_n_label.as(not null))
         end
     end
+end
+redef class AForExpr
+    private init empty_init do end
 
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwfor)
-        v.enter_visit(_n_id)
+    init init_aforexpr (
+            n_kwfor: nullable TKwfor,
+            n_ids: Collection[Object], # Should be Collection[TId]
+            n_expr: nullable AExpr,
+            n_kwdo: nullable TKwdo,
+            n_block: nullable AExpr,
+            n_label: nullable ALabel
+    )
+    do
+        empty_init
+        _n_kwfor = n_kwfor.as(not null)
+       n_kwfor.parent = self
+       for n in n_ids do
+               assert n isa TId
+               _n_ids.add(n)
+               n.parent = self
+       end
+        _n_expr = n_expr.as(not null)
+       n_expr.parent = self
+        _n_kwdo = n_kwdo.as(not null)
+       n_kwdo.parent = self
+        _n_block = n_block
+       if n_block != null then
+               n_block.parent = self
+       end
+        _n_label = n_label
+       if n_label != null then
+               n_label.parent = self
+       end
+    end
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
+    do
+        if _n_kwfor == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TKwfor
+                _n_kwfor = new_child
+           else
+               abort
+            end
+            return
+       end
+        for i in [0.._n_ids.length[ do
+            if _n_ids[i] == old_child then
+                if new_child != null then
+                   assert new_child isa TId
+                    _n_ids[i] = new_child
+                    new_child.parent = self
+                else
+                    _n_ids.remove_at(i)
+                end
+                return
+            end
+        end
+        if _n_expr == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_expr = new_child
+           else
+               abort
+            end
+            return
+       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
+               abort
+            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
+       end
+        if _n_label == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa ALabel
+                _n_label = new_child
+           else
+               _n_label = null
+            end
+            return
+       end
+    end
+
+               redef fun n_kwfor=(node)
+               do
+                       _n_kwfor = node
+                       node.parent = self
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_kwdo=(node)
+               do
+                       _n_kwdo = node
+                       node.parent = self
+               end
+               redef fun n_block=(node)
+               do
+                       _n_block = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_label=(node)
+               do
+                       _n_label = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_kwfor)
+            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
@@ -5323,30 +5587,13 @@ redef class AForExpr
     end
 end
 redef class AAssertExpr
-    redef fun n_kwassert=(n)
-    do
-        _n_kwassert = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aassertexpr (
             n_kwassert: nullable TKwassert,
             n_id: nullable TId,
-            n_expr: nullable AExpr
+            n_expr: nullable AExpr,
+            n_else: nullable AExpr
     )
     do
         empty_init
@@ -5358,6 +5605,10 @@ redef class AAssertExpr
        end
         _n_expr = n_expr.as(not null)
        n_expr.parent = self
+        _n_else = n_else
+       if n_else != null then
+               n_else.parent = self
+       end
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -5392,8 +5643,44 @@ redef class AAssertExpr
             end
             return
        end
+        if _n_else == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_else = new_child
+           else
+               _n_else = null
+            end
+            return
+       end
     end
 
+               redef fun n_kwassert=(node)
+               do
+                       _n_kwassert = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_else=(node)
+               do
+                       _n_else = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwassert)
@@ -5401,29 +5688,12 @@ redef class AAssertExpr
             v.enter_visit(_n_id.as(not null))
         end
         v.enter_visit(_n_expr)
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_kwassert)
-        if _n_id != null then
-            v.enter_visit(_n_id.as(not null))
+        if _n_else != null then
+            v.enter_visit(_n_else.as(not null))
         end
-        v.enter_visit(_n_expr)
     end
 end
 redef class AOnceExpr
-    redef fun n_kwonce=(n)
-    do
-        _n_kwonce = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aonceexpr (
@@ -5462,25 +5732,25 @@ redef class AOnceExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwonce)
-        v.enter_visit(_n_expr)
-    end
+               redef fun n_kwonce=(node)
+               do
+                       _n_kwonce = node
+                       node.parent = self
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwonce)
         v.enter_visit(_n_expr)
     end
 end
 redef class ASendExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_asendexpr (
@@ -5506,28 +5776,19 @@ redef class ASendExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
     end
 end
 redef class ABinopExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_abinopexpr (
@@ -5566,30 +5827,25 @@ redef class ABinopExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
 end
 redef class AOrExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aorexpr (
@@ -5628,30 +5884,25 @@ redef class AOrExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
 end
 redef class AAndExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aandexpr (
@@ -5690,61 +5941,56 @@ redef class AAndExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
 end
-redef class ANotExpr
-    redef fun n_kwnot=(n)
-    do
-        _n_kwnot = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-
+redef class AOrElseExpr
     private init empty_init do end
 
-    init init_anotexpr (
-            n_kwnot: nullable TKwnot,
-            n_expr: nullable AExpr
+    init init_aorelseexpr (
+            n_expr: nullable AExpr,
+            n_expr2: nullable AExpr
     )
     do
         empty_init
-        _n_kwnot = n_kwnot.as(not null)
-       n_kwnot.parent = self
         _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_kwnot == old_child then
+        if _n_expr == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa TKwnot
-                _n_kwnot = new_child
+               assert new_child isa AExpr
+                _n_expr = new_child
            else
                abort
             end
             return
        end
-        if _n_expr == old_child then
+        if _n_expr2 == old_child then
             if new_child != null then
                 new_child.parent = self
                assert new_child isa AExpr
-                _n_expr = new_child
+                _n_expr2 = new_child
            else
                abort
             end
@@ -5752,33 +5998,28 @@ redef class ANotExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwnot)
-        v.enter_visit(_n_expr)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwnot)
         v.enter_visit(_n_expr)
+        v.enter_visit(_n_expr2)
     end
 end
-redef class AEqExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
+redef class AImpliesExpr
     private init empty_init do end
 
-    init init_aeqexpr (
+    init init_aimpliesexpr (
             n_expr: nullable AExpr,
             n_expr2: nullable AExpr
     )
@@ -5814,61 +6055,56 @@ redef class AEqExpr
        end
     end
 
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
 end
-redef class AEeExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
+redef class ANotExpr
     private init empty_init do end
 
-    init init_aeeexpr (
-            n_expr: nullable AExpr,
-            n_expr2: nullable AExpr
+    init init_anotexpr (
+            n_kwnot: nullable TKwnot,
+            n_expr: nullable AExpr
     )
     do
         empty_init
+        _n_kwnot = n_kwnot.as(not null)
+       n_kwnot.parent = self
         _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 _n_kwnot == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa AExpr
-                _n_expr = new_child
+               assert new_child isa TKwnot
+                _n_kwnot = new_child
            else
                abort
             end
             return
        end
-        if _n_expr2 == old_child then
+        if _n_expr == old_child then
             if new_child != null then
                 new_child.parent = self
                assert new_child isa AExpr
-                _n_expr2 = new_child
+                _n_expr = new_child
            else
                abort
             end
@@ -5876,33 +6112,28 @@ redef class AEeExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_kwnot=(node)
+               do
+                       _n_kwnot = node
+                       node.parent = self
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
+        v.enter_visit(_n_kwnot)
         v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
     end
 end
-redef class ANeExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
+redef class AEqExpr
     private init empty_init do end
 
-    init init_aneexpr (
+    init init_aeqexpr (
             n_expr: nullable AExpr,
             n_expr2: nullable AExpr
     )
@@ -5938,33 +6169,28 @@ redef class ANeExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
 end
-redef class ALtExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
+redef class ANeExpr
     private init empty_init do end
 
-    init init_altexpr (
+    init init_aneexpr (
             n_expr: nullable AExpr,
             n_expr2: nullable AExpr
     )
@@ -6000,33 +6226,28 @@ redef class ALtExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
 end
-redef class ALeExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
+redef class ALtExpr
     private init empty_init do end
 
-    init init_aleexpr (
+    init init_altexpr (
             n_expr: nullable AExpr,
             n_expr2: nullable AExpr
     )
@@ -6062,33 +6283,28 @@ redef class ALeExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
 end
-redef class AGtExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
+redef class ALeExpr
     private init empty_init do end
 
-    init init_agtexpr (
+    init init_aleexpr (
             n_expr: nullable AExpr,
             n_expr2: nullable AExpr
     )
@@ -6124,33 +6340,28 @@ redef class AGtExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
 end
-redef class AGeExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
+redef class ALlExpr
     private init empty_init do end
 
-    init init_ageexpr (
+    init init_allexpr (
             n_expr: nullable AExpr,
             n_expr2: nullable AExpr
     )
@@ -6186,42 +6397,37 @@ redef class AGeExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
 end
-redef class AIsaExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-       n.parent = self
-    end
-
+redef class AGtExpr
     private init empty_init do end
 
-    init init_aisaexpr (
+    init init_agtexpr (
             n_expr: nullable AExpr,
-            n_type: nullable AType
+            n_expr2: nullable AExpr
     )
     do
         empty_init
         _n_expr = n_expr.as(not null)
        n_expr.parent = self
-        _n_type = n_type.as(not null)
-       n_type.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)
@@ -6236,11 +6442,11 @@ redef class AIsaExpr
             end
             return
        end
-        if _n_type == old_child then
+        if _n_expr2 == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa AType
-                _n_type = new_child
+               assert new_child isa AExpr
+                _n_expr2 = new_child
            else
                abort
             end
@@ -6248,33 +6454,28 @@ redef class AIsaExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_type)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
-        v.enter_visit(_n_type)
+        v.enter_visit(_n_expr2)
     end
 end
-redef class APlusExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
+redef class AGeExpr
     private init empty_init do end
 
-    init init_aplusexpr (
+    init init_ageexpr (
             n_expr: nullable AExpr,
             n_expr2: nullable AExpr
     )
@@ -6310,33 +6511,28 @@ redef class APlusExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
 end
-redef class AMinusExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
+redef class AGgExpr
     private init empty_init do end
 
-    init init_aminusexpr (
+    init init_aggexpr (
             n_expr: nullable AExpr,
             n_expr2: nullable AExpr
     )
@@ -6372,42 +6568,37 @@ redef class AMinusExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
 end
-redef class AStarshipExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
+redef class AIsaExpr
     private init empty_init do end
 
-    init init_astarshipexpr (
+    init init_aisaexpr (
             n_expr: nullable AExpr,
-            n_expr2: nullable AExpr
+            n_type: nullable AType
     )
     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
+        _n_type = n_type.as(not null)
+       n_type.parent = self
     end
 
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
@@ -6422,11 +6613,11 @@ redef class AStarshipExpr
             end
             return
        end
-        if _n_expr2 == old_child then
+        if _n_type == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa AExpr
-                _n_expr2 = new_child
+               assert new_child isa AType
+                _n_type = new_child
            else
                abort
             end
@@ -6434,33 +6625,28 @@ redef class AStarshipExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_type=(node)
+               do
+                       _n_type = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
+        v.enter_visit(_n_type)
     end
 end
-redef class AStarExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
+redef class APlusExpr
     private init empty_init do end
 
-    init init_astarexpr (
+    init init_aplusexpr (
             n_expr: nullable AExpr,
             n_expr2: nullable AExpr
     )
@@ -6496,33 +6682,28 @@ redef class AStarExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
 end
-redef class ASlashExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
+redef class AMinusExpr
     private init empty_init do end
 
-    init init_aslashexpr (
+    init init_aminusexpr (
             n_expr: nullable AExpr,
             n_expr2: nullable AExpr
     )
@@ -6558,33 +6739,85 @@ redef class ASlashExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
 end
-redef class APercentExpr
-    redef fun n_expr=(n)
+redef class AStarshipExpr
+    private init empty_init do end
+
+    init init_astarshipexpr (
+            n_expr: nullable AExpr,
+            n_expr2: nullable AExpr
+    )
     do
-        _n_expr = n
-       n.parent = self
+        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 n_expr2=(n)
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        _n_expr2 = n
-       n.parent = self
+        if _n_expr == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_expr = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_expr2 == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_expr2 = new_child
+           else
+               abort
+            end
+            return
+       end
     end
 
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_expr)
+        v.enter_visit(_n_expr2)
+    end
+end
+redef class AStarExpr
     private init empty_init do end
 
-    init init_apercentexpr (
+    init init_astarexpr (
             n_expr: nullable AExpr,
             n_expr2: nullable AExpr
     )
@@ -6620,30 +6853,139 @@ redef class APercentExpr
        end
     end
 
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
+end
+redef class ASlashExpr
+    private init empty_init do end
+
+    init init_aslashexpr (
+            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 n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_expr2)
     end
 end
-redef class AUminusExpr
-    redef fun n_minus=(n)
+redef class APercentExpr
+    private init empty_init do end
+
+    init init_apercentexpr (
+            n_expr: nullable AExpr,
+            n_expr2: nullable AExpr
+    )
     do
-        _n_minus = n
-       n.parent = self
+        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 n_expr=(n)
+
+    redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
-        _n_expr = n
-       n.parent = self
+        if _n_expr == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_expr = new_child
+           else
+               abort
+            end
+            return
+       end
+        if _n_expr2 == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa AExpr
+                _n_expr2 = new_child
+           else
+               abort
+            end
+            return
+       end
     end
 
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_expr)
+        v.enter_visit(_n_expr2)
+    end
+end
+redef class AUminusExpr
     private init empty_init do end
 
     init init_auminusexpr (
@@ -6682,44 +7024,32 @@ redef class AUminusExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_minus)
-        v.enter_visit(_n_expr)
-    end
+               redef fun n_minus=(node)
+               do
+                       _n_minus = node
+                       node.parent = self
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_minus)
         v.enter_visit(_n_expr)
     end
 end
 redef class ANewExpr
-    redef fun n_kwnew=(n)
-    do
-        _n_kwnew = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
     private init empty_init do end
 
     init init_anewexpr (
             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
@@ -6731,11 +7061,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)
@@ -6770,60 +7097,53 @@ 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)
-    do
-        v.enter_visit(_n_kwnew)
-        v.enter_visit(_n_type)
-        if _n_id != null then
-            v.enter_visit(_n_id.as(not null))
-        end
-            for n in _n_args do
-                v.enter_visit(n)
-           end
-    end
+               redef fun n_kwnew=(node)
+               do
+                       _n_kwnew = node
+                       node.parent = self
+               end
+               redef fun n_type=(node)
+               do
+                       _n_type = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_args=(node)
+               do
+                       _n_args = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwnew)
         v.enter_visit(_n_type)
         if _n_id != null then
             v.enter_visit(_n_id.as(not null))
         end
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
+        v.enter_visit(_n_args)
     end
 end
 redef class AAttrExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aattrexpr (
@@ -6862,40 +7182,25 @@ redef class AAttrExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_id)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_id)
     end
 end
 redef class AAttrAssignExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aattrassignexpr (
@@ -6960,15 +7265,29 @@ redef class AAttrAssignExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_assign)
-        v.enter_visit(_n_value)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+               redef fun n_assign=(node)
+               do
+                       _n_assign = node
+                       node.parent = self
+               end
+               redef fun n_value=(node)
+               do
+                       _n_value = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_id)
@@ -6977,27 +7296,6 @@ redef class AAttrAssignExpr
     end
 end
 redef class AAttrReassignExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign_op=(n)
-    do
-        _n_assign_op = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aattrreassignexpr (
@@ -7062,15 +7360,29 @@ redef class AAttrReassignExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_assign_op)
-        v.enter_visit(_n_value)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+               redef fun n_assign_op=(node)
+               do
+                       _n_assign_op = node
+                       node.parent = self
+               end
+               redef fun n_value=(node)
+               do
+                       _n_value = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_id)
@@ -7079,24 +7391,12 @@ redef class AAttrReassignExpr
     end
 end
 redef class ACallExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_acallexpr (
             n_expr: nullable AExpr,
             n_id: nullable TId,
-            n_args: Collection[Object], # Should be Collection[AExpr]
-            n_closure_defs: Collection[Object] # Should be Collection[AClosureDef]
+            n_args: nullable AExprs
     )
     do
         empty_init
@@ -7104,16 +7404,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
-       for n in n_closure_defs do
-               assert n isa AClosureDef
-               _n_closure_defs.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)
@@ -7138,92 +7430,49 @@ 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
-            end
-        end
-        for i in [0.._n_closure_defs.length[ do
-            if _n_closure_defs[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AClosureDef
-                    _n_closure_defs[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_closure_defs.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_id)
-            for n in _n_args do
-                v.enter_visit(n)
-           end
-            for n in _n_closure_defs do
-                v.enter_visit(n)
-           end
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+               redef fun n_args=(node)
+               do
+                       _n_args = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_id)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
-       do
-           var i = _n_closure_defs.length
-            while i >= 0 do
-                v.enter_visit(_n_closure_defs[i])
-               i = i - 1
-           end
-       end
+        v.enter_visit(_n_args)
     end
 end
 redef class ACallAssignExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_acallassignexpr (
             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
     )
@@ -7233,11 +7482,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)
@@ -7266,18 +7512,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
@@ -7300,60 +7544,49 @@ redef class ACallAssignExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    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_assign)
-        v.enter_visit(_n_value)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+               redef fun n_args=(node)
+               do
+                       _n_args = node
+                       node.parent = self
+               end
+               redef fun n_assign=(node)
+               do
+                       _n_assign = node
+                       node.parent = self
+               end
+               redef fun n_value=(node)
+               do
+                       _n_value = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_id)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
+        v.enter_visit(_n_args)
         v.enter_visit(_n_assign)
         v.enter_visit(_n_value)
     end
 end
 redef class ACallReassignExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign_op=(n)
-    do
-        _n_assign_op = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_acallreassignexpr (
             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
     )
@@ -7363,11 +7596,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)
@@ -7396,18 +7626,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
@@ -7430,52 +7658,49 @@ redef class ACallReassignExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    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_assign_op)
-        v.enter_visit(_n_value)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+               redef fun n_args=(node)
+               do
+                       _n_args = node
+                       node.parent = self
+               end
+               redef fun n_assign_op=(node)
+               do
+                       _n_assign_op = node
+                       node.parent = self
+               end
+               redef fun n_value=(node)
+               do
+                       _n_value = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_id)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
+        v.enter_visit(_n_args)
         v.enter_visit(_n_assign_op)
         v.enter_visit(_n_value)
     end
 end
 redef class ASuperExpr
-    redef fun n_qualified=(n)
-    do
-        _n_qualified = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_kwsuper=(n)
-    do
-        _n_kwsuper = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_asuperexpr (
             n_qualified: nullable AQualified,
             n_kwsuper: nullable TKwsuper,
-            n_args: Collection[Object] # Should be Collection[AExpr]
+            n_args: nullable AExprs
     )
     do
         empty_init
@@ -7485,11 +7710,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)
@@ -7514,64 +7736,53 @@ 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)
-    do
-        if _n_qualified != null then
-            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
-    end
+               redef fun n_qualified=(node)
+               do
+                       _n_qualified = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwsuper=(node)
+               do
+                       _n_kwsuper = node
+                       node.parent = self
+               end
+               redef fun n_args=(node)
+               do
+                       _n_args = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         if _n_qualified != null then
             v.enter_visit(_n_qualified.as(not null))
         end
         v.enter_visit(_n_kwsuper)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
+        v.enter_visit(_n_args)
     end
 end
 redef class AInitExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_kwinit=(n)
-    do
-        _n_kwinit = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_ainitexpr (
             n_expr: nullable AExpr,
             n_kwinit: nullable TKwinit,
-            n_args: Collection[Object] # Should be Collection[AExpr]
+            n_args: nullable AExprs
     )
     do
         empty_init
@@ -7579,11 +7790,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)
@@ -7608,70 +7816,55 @@ 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
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_kwinit=(node)
+               do
+                       _n_kwinit = node
+                       node.parent = self
+               end
+               redef fun n_args=(node)
+               do
+                       _n_args = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
         v.enter_visit(_n_kwinit)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
+        v.enter_visit(_n_args)
     end
 end
 redef class ABraExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_abraexpr (
             n_expr: nullable AExpr,
-            n_args: Collection[Object], # Should be Collection[AExpr]
-            n_closure_defs: Collection[Object] # Should be Collection[AClosureDef]
+            n_args: nullable AExprs
     )
     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
-       for n in n_closure_defs do
-               assert n isa AClosureDef
-               _n_closure_defs.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)
@@ -7686,84 +7879,42 @@ 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
-            end
-        end
-        for i in [0.._n_closure_defs.length[ do
-            if _n_closure_defs[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AClosureDef
-                    _n_closure_defs[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_closure_defs.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)
-            for n in _n_args do
-                v.enter_visit(n)
-           end
-            for n in _n_closure_defs do
-                v.enter_visit(n)
-           end
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_args=(node)
+               do
+                       _n_args = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
-       do
-           var i = _n_closure_defs.length
-            while i >= 0 do
-                v.enter_visit(_n_closure_defs[i])
-               i = i - 1
-           end
-       end
+        v.enter_visit(_n_args)
     end
 end
 redef class ABraAssignExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_abraassignexpr (
             n_expr: nullable AExpr,
-            n_args: Collection[Object], # Should be Collection[AExpr]
+            n_args: nullable AExprs,
             n_assign: nullable TAssign,
             n_value: nullable AExpr
     )
@@ -7771,11 +7922,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)
@@ -7794,18 +7942,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
@@ -7828,52 +7974,42 @@ redef class ABraAssignExpr
        end
     end
 
-    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_assign)
-        v.enter_visit(_n_value)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_args=(node)
+               do
+                       _n_args = node
+                       node.parent = self
+               end
+               redef fun n_assign=(node)
+               do
+                       _n_assign = node
+                       node.parent = self
+               end
+               redef fun n_value=(node)
+               do
+                       _n_value = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
+        v.enter_visit(_n_args)
         v.enter_visit(_n_assign)
         v.enter_visit(_n_value)
     end
 end
 redef class ABraReassignExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_assign_op=(n)
-    do
-        _n_assign_op = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_abrareassignexpr (
             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
     )
@@ -7881,11 +8017,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)
@@ -7904,18 +8037,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
@@ -7938,135 +8069,37 @@ redef class ABraReassignExpr
        end
     end
 
-    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_assign_op)
-        v.enter_visit(_n_value)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_args=(node)
+               do
+                       _n_args = node
+                       node.parent = self
+               end
+               redef fun n_assign_op=(node)
+               do
+                       _n_assign_op = node
+                       node.parent = self
+               end
+               redef fun n_value=(node)
+               do
+                       _n_value = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_expr)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
+        v.enter_visit(_n_args)
         v.enter_visit(_n_assign_op)
         v.enter_visit(_n_value)
     end
 end
-redef class AClosureCallExpr
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
-    private init empty_init do end
-
-    init init_aclosurecallexpr (
-            n_id: nullable TId,
-            n_args: Collection[Object], # Should be Collection[AExpr]
-            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
-       for n in n_closure_defs do
-               assert n isa AClosureDef
-               _n_closure_defs.add(n)
-               n.parent = self
-       end
-    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
-        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
-            end
-        end
-        for i in [0.._n_closure_defs.length[ do
-            if _n_closure_defs[i] == old_child then
-                if new_child != null then
-                   assert new_child isa AClosureDef
-                    _n_closure_defs[i] = new_child
-                    new_child.parent = self
-                else
-                    _n_closure_defs.remove_at(i)
-                end
-                return
-            end
-        end
-    end
-
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-            for n in _n_args do
-                v.enter_visit(n)
-           end
-            for n in _n_closure_defs do
-                v.enter_visit(n)
-           end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-       do
-           var i = _n_args.length
-            while i >= 0 do
-                v.enter_visit(_n_args[i])
-               i = i - 1
-           end
-       end
-       do
-           var i = _n_closure_defs.length
-            while i >= 0 do
-                v.enter_visit(_n_closure_defs[i])
-               i = i - 1
-           end
-       end
-    end
-end
 redef class AVarExpr
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_avarexpr (
@@ -8092,33 +8125,19 @@ redef class AVarExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-    end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_id)
     end
 end
 redef class AVarAssignExpr
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign=(n)
-    do
-        _n_assign = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_avarassignexpr (
@@ -8170,14 +8189,24 @@ redef class AVarAssignExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_assign)
-        v.enter_visit(_n_value)
-    end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+               redef fun n_assign=(node)
+               do
+                       _n_assign = node
+                       node.parent = self
+               end
+               redef fun n_value=(node)
+               do
+                       _n_value = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_id)
         v.enter_visit(_n_assign)
@@ -8185,22 +8214,6 @@ redef class AVarAssignExpr
     end
 end
 redef class AVarReassignExpr
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-    redef fun n_assign_op=(n)
-    do
-        _n_assign_op = n
-       n.parent = self
-    end
-    redef fun n_value=(n)
-    do
-        _n_value = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_avarreassignexpr (
@@ -8252,14 +8265,24 @@ redef class AVarReassignExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_id)
-        v.enter_visit(_n_assign_op)
-        v.enter_visit(_n_value)
-    end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+               redef fun n_assign_op=(node)
+               do
+                       _n_assign_op = node
+                       node.parent = self
+               end
+               redef fun n_value=(node)
+               do
+                       _n_value = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_id)
         v.enter_visit(_n_assign_op)
@@ -8267,22 +8290,12 @@ redef class AVarReassignExpr
     end
 end
 redef class ARangeExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_arangeexpr (
             n_expr: nullable AExpr,
-            n_expr2: nullable AExpr
+            n_expr2: nullable AExpr,
+            n_annotations: nullable AAnnotations
     )
     do
         empty_init
@@ -8290,6 +8303,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)
@@ -8314,48 +8331,84 @@ 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)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    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
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_acrangeexpr (
+            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
@@ -8376,48 +8429,106 @@ 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_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_obra=(node)
+               do
+                       _n_obra = node
+                       node.parent = self
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+               redef fun n_cbra=(node)
+               do
+                       _n_cbra = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    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
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_expr2=(n)
-    do
-        _n_expr2 = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aorangeexpr (
+            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
@@ -8438,86 +8549,146 @@ 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_expr)
-        v.enter_visit(_n_expr2)
-    end
+               redef fun n_obra=(node)
+               do
+                       _n_obra = node
+                       node.parent = self
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_expr2=(node)
+               do
+                       _n_expr2 = node
+                       node.parent = self
+               end
+               redef fun n_cbra=(node)
+               do
+                       _n_cbra = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    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
-    end
+               redef fun n_exprs=(node)
+               do
+                       _n_exprs = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
-       do
-           var i = _n_exprs.length
-            while i >= 0 do
-                v.enter_visit(_n_exprs[i])
-               i = i - 1
-           end
-       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
-    redef fun n_kwself=(n)
-    do
-        _n_kwself = n
-       n.parent = self
-    end
-
     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)
@@ -8532,20 +8703,41 @@ 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)
-    end
+               redef fun n_kwself=(node)
+               do
+                       _n_kwself = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    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
-
     private init empty_init do end
 
     init init_aimplicitselfexpr
@@ -8557,30 +8749,27 @@ redef class AImplicitSelfExpr
     do
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-    end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
     end
 end
 redef class ATrueExpr
-    redef fun n_kwtrue=(n)
-    do
-        _n_kwtrue = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_atrueexpr (
-            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)
@@ -8595,34 +8784,55 @@ 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)
-    end
+               redef fun n_kwtrue=(node)
+               do
+                       _n_kwtrue = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    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
-    redef fun n_kwfalse=(n)
-    do
-        _n_kwfalse = n
-       n.parent = self
-    end
-
     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)
@@ -8637,34 +8847,55 @@ 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)
-    end
+               redef fun n_kwfalse=(node)
+               do
+                       _n_kwfalse = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    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
-    redef fun n_kwnull=(n)
-    do
-        _n_kwnull = n
-       n.parent = self
-    end
-
     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)
@@ -8679,34 +8910,55 @@ 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)
-    end
+               redef fun n_kwnull=(node)
+               do
+                       _n_kwnull = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    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
-    redef fun n_number=(n)
-    do
-        _n_number = n
-       n.parent = self
-    end
-
     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)
@@ -8721,34 +8973,55 @@ 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)
-    end
+               redef fun n_number=(node)
+               do
+                       _n_number = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    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
-    redef fun n_float=(n)
-    do
-        _n_float = n
-       n.parent = self
-    end
-
     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)
@@ -8763,34 +9036,55 @@ redef class AFloatExpr
             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_float)
-    end
+               redef fun n_float=(node)
+               do
+                       _n_float = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    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
-    redef fun n_char=(n)
-    do
-        _n_char = n
-       n.parent = self
-    end
-
     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)
@@ -8805,34 +9099,55 @@ 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)
-    end
+               redef fun n_char=(node)
+               do
+                       _n_char = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    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
-    redef fun n_string=(n)
-    do
-        _n_string = n
-       n.parent = self
-    end
-
     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)
@@ -8847,25 +9162,41 @@ 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)
-    end
+               redef fun n_string=(node)
+               do
+                       _n_string = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    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
-    redef fun n_string=(n)
-    do
-        _n_string = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_astartstringexpr (
@@ -8891,23 +9222,19 @@ redef class AStartStringExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_string)
-    end
+               redef fun n_string=(node)
+               do
+                       _n_string = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_string)
     end
 end
 redef class AMidStringExpr
-    redef fun n_string=(n)
-    do
-        _n_string = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_amidstringexpr (
@@ -8933,23 +9260,19 @@ redef class AMidStringExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_string)
-    end
+               redef fun n_string=(node)
+               do
+                       _n_string = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_string)
     end
 end
 redef class AEndStringExpr
-    redef fun n_string=(n)
-    do
-        _n_string = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aendstringexpr (
@@ -8975,22 +9298,24 @@ redef class AEndStringExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_string)
-    end
+               redef fun n_string=(node)
+               do
+                       _n_string = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_string)
     end
 end
 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
@@ -8999,6 +9324,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)
@@ -9015,46 +9344,72 @@ 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 n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
+
     redef fun visit_all(v: Visitor)
     do
             for n in _n_exprs do
                 v.enter_visit(n)
            end
-    end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       do
-           var i = _n_exprs.length
-            while i >= 0 do
-                v.enter_visit(_n_exprs[i])
-               i = i - 1
-           end
-       end
+        if _n_annotations != null then
+            v.enter_visit(_n_annotations.as(not null))
+        end
     end
 end
 redef class AParExpr
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aparexpr (
-            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
@@ -9065,41 +9420,71 @@ 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_expr)
-    end
+               redef fun n_opar=(node)
+               do
+                       _n_opar = node
+                       node.parent = self
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_cpar=(node)
+               do
+                       _n_cpar = node
+                       node.parent = self
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    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
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_kwas=(n)
-    do
-        _n_kwas = n
-       n.parent = self
-    end
-    redef fun n_type=(n)
-    do
-        _n_type = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aascastexpr (
             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
@@ -9107,8 +9492,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)
@@ -9133,6 +9522,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
@@ -9143,51 +9542,64 @@ 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_type)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_kwas=(node)
+               do
+                       _n_kwas = node
+                       node.parent = self
+               end
+               redef fun n_opar=(node)
+               do
+                       _n_opar = node
+                       node.parent = self
+               end
+               redef fun n_type=(node)
+               do
+                       _n_type = node
+                       node.parent = self
+               end
+               redef fun n_cpar=(node)
+               do
+                       _n_cpar = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    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
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_kwas=(n)
-    do
-        _n_kwas = n
-       n.parent = self
-    end
-    redef fun n_kwnot=(n)
-    do
-        _n_kwnot = n
-       n.parent = self
-    end
-    redef fun n_kwnull=(n)
-    do
-        _n_kwnull = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aasnotnullexpr (
             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
@@ -9195,10 +9607,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)
@@ -9223,6 +9639,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
@@ -9243,41 +9669,61 @@ 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_kwnot)
-        v.enter_visit(_n_kwnull)
-    end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_kwas=(node)
+               do
+                       _n_kwas = node
+                       node.parent = self
+               end
+               redef fun n_opar=(node)
+               do
+                       _n_opar = node
+                       node.parent = self
+               end
+               redef fun n_kwnot=(node)
+               do
+                       _n_kwnot = node
+                       node.parent = self
+               end
+               redef fun n_kwnull=(node)
+               do
+                       _n_kwnull = node
+                       node.parent = self
+               end
+               redef fun n_cpar=(node)
+               do
+                       _n_cpar = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    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
-    redef fun n_kwisset=(n)
-    do
-        _n_kwisset = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-       n.parent = self
-    end
-    redef fun n_id=(n)
-    do
-        _n_id = n
-       n.parent = self
-    end
-
     private init empty_init do end
 
     init init_aissetattrexpr (
@@ -9329,27 +9775,322 @@ redef class AIssetAttrExpr
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwisset)
-        v.enter_visit(_n_expr)
-        v.enter_visit(_n_id)
-    end
+               redef fun n_kwisset=(node)
+               do
+                       _n_kwisset = node
+                       node.parent = self
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
         v.enter_visit(_n_kwisset)
         v.enter_visit(_n_expr)
         v.enter_visit(_n_id)
     end
 end
-redef class APlusAssignOp
-    redef fun n_pluseq=(n)
-    do
-        _n_pluseq = n
-       n.parent = self
-    end
-
+redef class ADebugTypeExpr
+    private init empty_init do end
+
+    init init_adebugtypeexpr (
+            n_kwdebug: nullable TKwdebug,
+            n_kwtype: nullable TKwtype,
+            n_expr: nullable AExpr,
+            n_type: nullable AType
+    )
+    do
+        empty_init
+        _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_kwdebug == old_child then
+            if new_child != null then
+                new_child.parent = self
+               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
+            return
+       end
+    end
+
+               redef fun n_kwdebug=(node)
+               do
+                       _n_kwdebug = node
+                       node.parent = self
+               end
+               redef fun n_kwtype=(node)
+               do
+                       _n_kwtype = node
+                       node.parent = self
+               end
+               redef fun n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               end
+               redef fun n_type=(node)
+               do
+                       _n_type = node
+                       node.parent = self
+               end
+
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_kwdebug)
+        v.enter_visit(_n_kwtype)
+        v.enter_visit(_n_expr)
+        v.enter_visit(_n_type)
+    end
+end
+redef class AListExprs
+    private init empty_init do end
+
+    init init_alistexprs (
+            n_exprs: Collection[Object] # Should be Collection[AExpr]
+    )
+    do
+        empty_init
+       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
+        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
+    end
+
+
+
+    redef fun visit_all(v: Visitor)
+    do
+            for n in _n_exprs do
+                v.enter_visit(n)
+           end
+    end
+end
+redef class AParExprs
+    private init empty_init do end
+
+    init init_aparexprs (
+            n_opar: nullable TOpar,
+            n_exprs: Collection[Object], # Should be Collection[AExpr]
+            n_cpar: nullable TCpar
+    )
+    do
+        empty_init
+        _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_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_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
+        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_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 n_opar=(node)
+               do
+                       _n_opar = node
+                       node.parent = self
+               end
+               redef fun n_cpar=(node)
+               do
+                       _n_cpar = node
+                       node.parent = self
+               end
+
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_opar)
+            for n in _n_exprs do
+                v.enter_visit(n)
+           end
+        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 n_obra=(node)
+               do
+                       _n_obra = node
+                       node.parent = self
+               end
+               redef fun n_cbra=(node)
+               do
+                       _n_cbra = node
+                       node.parent = self
+               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 APlusAssignOp
     private init empty_init do end
 
     init init_aplusassignop (
@@ -9357,17 +10098,1348 @@ redef class APlusAssignOp
     )
     do
         empty_init
-        _n_pluseq = n_pluseq.as(not null)
-       n_pluseq.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_pluseq == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TPluseq
+                _n_pluseq = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+               redef fun n_pluseq=(node)
+               do
+                       _n_pluseq = node
+                       node.parent = self
+               end
+
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_pluseq)
+    end
+end
+redef class AMinusAssignOp
+    private init empty_init do end
+
+    init init_aminusassignop (
+            n_minuseq: nullable TMinuseq
+    )
+    do
+        empty_init
+        _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_minuseq == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TMinuseq
+                _n_minuseq = new_child
+           else
+               abort
+            end
+            return
+       end
+    end
+
+               redef fun n_minuseq=(node)
+               do
+                       _n_minuseq = node
+                       node.parent = self
+               end
+
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_minuseq)
+    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 n_quad=(node)
+               do
+                       _n_quad = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               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 n_kwimport=(node)
+               do
+                       _n_kwimport = node
+                       node.parent = self
+               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 n_kwsuper=(node)
+               do
+                       _n_kwsuper = node
+                       node.parent = self
+               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 n_methid=(node)
+               do
+                       _n_methid = node
+                       node.parent = self
+               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_type: nullable AType,
+            n_dot: nullable TDot,
+            n_methid: nullable AMethid
+    )
+    do
+        empty_init
+        _n_type = n_type.as(not null)
+       n_type.parent = self
+        _n_dot = n_dot
+       if n_dot != null then
+               n_dot.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_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_dot == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TDot
+                _n_dot = new_child
+           else
+               _n_dot = 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 n_type=(node)
+               do
+                       _n_type = node
+                       node.parent = self
+               end
+               redef fun n_dot=(node)
+               do
+                       _n_dot = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_methid=(node)
+               do
+                       _n_methid = node
+                       node.parent = self
+               end
+
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_type)
+        if _n_dot != null then
+            v.enter_visit(_n_dot.as(not null))
+        end
+        v.enter_visit(_n_methid)
+    end
+end
+redef class AInitPropExternCall
+    private init empty_init do end
+
+    init init_ainitpropexterncall (
+            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 n_type=(node)
+               do
+                       _n_type = node
+                       node.parent = self
+               end
+
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_type)
+    end
+end
+redef class ACastAsExternCall
+    private init empty_init do end
+
+    init init_acastasexterncall (
+            n_from_type: nullable AType,
+            n_dot: nullable TDot,
+            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_dot = n_dot
+       if n_dot != null then
+               n_dot.parent = self
+       end
+        _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_dot == old_child then
+            if new_child != null then
+                new_child.parent = self
+               assert new_child isa TDot
+                _n_dot = new_child
+           else
+               _n_dot = null
+            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 n_from_type=(node)
+               do
+                       _n_from_type = node
+                       node.parent = self
+               end
+               redef fun n_dot=(node)
+               do
+                       _n_dot = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_kwas=(node)
+               do
+                       _n_kwas = node
+                       node.parent = self
+               end
+               redef fun n_to_type=(node)
+               do
+                       _n_to_type = node
+                       node.parent = self
+               end
+
+
+    redef fun visit_all(v: Visitor)
+    do
+        v.enter_visit(_n_from_type)
+        if _n_dot != null then
+            v.enter_visit(_n_dot.as(not null))
+        end
+        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 n_type=(node)
+               do
+                       _n_type = node
+                       node.parent = self
+               end
+               redef fun n_kwas=(node)
+               do
+                       _n_kwas = node
+                       node.parent = self
+               end
+               redef fun n_kwnullable=(node)
+               do
+                       _n_kwnullable = node
+                       node.parent = self
+               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 n_type=(node)
+               do
+                       _n_type = node
+                       node.parent = self
+               end
+               redef fun n_kwas=(node)
+               do
+                       _n_kwas = node
+                       node.parent = self
+               end
+               redef fun n_kwnot=(node)
+               do
+                       _n_kwnot = node
+                       node.parent = self
+               end
+               redef fun n_kwnullable=(node)
+               do
+                       _n_kwnullable = node
+                       node.parent = self
+               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 n_kwin=(node)
+               do
+                       _n_kwin = node
+                       node.parent = self
+               end
+               redef fun n_string=(node)
+               do
+                       _n_string = node
+                       node.parent = self
+               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 n_in_language=(node)
+               do
+                       _n_in_language = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_extern_code_segment=(node)
+               do
+                       _n_extern_code_segment = node
+                       node.parent = self
+               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 n_classid=(node)
+               do
+                       _n_classid = node
+                       if node != null then
+                               node.parent = self
+                       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 n_at=(node)
+               do
+                       _n_at = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_opar=(node)
+               do
+                       _n_opar = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_cpar=(node)
+               do
+                       _n_cpar = node
+                       if node != null then
+                               node.parent = self
+                       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 n_atid=(node)
+               do
+                       _n_atid = node
+                       node.parent = self
+               end
+               redef fun n_opar=(node)
+               do
+                       _n_opar = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_cpar=(node)
+               do
+                       _n_cpar = node
+                       if node != null then
+                               node.parent = self
+                       end
+               end
+               redef fun n_annotations=(node)
+               do
+                       _n_annotations = node
+                       if node != null then
+                               node.parent = self
+                       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 n_type=(node)
+               do
+                       _n_type = node
+                       node.parent = self
+               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 n_expr=(node)
+               do
+                       _n_expr = node
+                       node.parent = self
+               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 n_annotations=(node)
+               do
+                       _n_annotations = node
+                       node.parent = self
+               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 n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               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_pluseq == old_child then
+        if _n_id == 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 TKwextern
+                _n_id = new_child
            else
                abort
             end
@@ -9375,41 +11447,37 @@ redef class APlusAssignOp
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_pluseq)
-    end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_pluseq)
+        v.enter_visit(_n_id)
     end
 end
-redef class AMinusAssignOp
-    redef fun n_minuseq=(n)
-    do
-        _n_minuseq = n
-       n.parent = self
-    end
-
+redef class AKwinternAtid
     private init empty_init do end
 
-    init init_aminusassignop (
-            n_minuseq: nullable TMinuseq
+    init init_akwinternatid (
+            n_id: nullable TKwintern
     )
     do
         empty_init
-        _n_minuseq = n_minuseq.as(not null)
-       n_minuseq.parent = self
+        _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_minuseq == old_child then
+        if _n_id == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa TMinuseq
-                _n_minuseq = new_child
+               assert new_child isa TKwintern
+                _n_id = new_child
            else
                abort
             end
@@ -9417,300 +11485,134 @@ redef class AMinusAssignOp
        end
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_minuseq)
-    end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_minuseq)
+        v.enter_visit(_n_id)
     end
 end
-redef class AClosureDef
-    redef fun n_kwwith=(n)
-    do
-        _n_kwwith = n
-       n.parent = self
-    end
-    redef fun n_kwdo=(n)
-    do
-        _n_kwdo = n
-       n.parent = self
-    end
-    redef fun n_expr=(n)
-    do
-        _n_expr = n
-        if n != null then
-           n.parent = self
-        end
-    end
-    redef fun n_label=(n)
-    do
-        _n_label = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
+redef class AKwreadableAtid
     private init empty_init do end
 
-    init init_aclosuredef (
-            n_kwwith: nullable TKwwith,
-            n_id: Collection[Object], # Should be Collection[TId]
-            n_kwdo: nullable TKwdo,
-            n_expr: nullable AExpr,
-            n_label: nullable ALabel
+    init init_akwreadableatid (
+            n_id: nullable TKwreadable
     )
     do
         empty_init
-        _n_kwwith = n_kwwith.as(not null)
-       n_kwwith.parent = self
-       for n in n_id do
-               assert n isa TId
-               _n_id.add(n)
-               n.parent = self
-       end
-        _n_kwdo = n_kwdo.as(not null)
-       n_kwdo.parent = self
-        _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_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_kwwith == old_child then
-            if new_child != null then
-                new_child.parent = self
-               assert new_child isa TKwwith
-                _n_kwwith = new_child
-           else
-               abort
-            end
-            return
-       end
-        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_kwdo == old_child then
+        if _n_id == old_child then
             if new_child != null then
                 new_child.parent = self
-               assert new_child isa TKwdo
-                _n_kwdo = new_child
+               assert new_child isa TKwreadable
+                _n_id = 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
-               _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
     end
 
-    redef fun visit_all(v: Visitor)
-    do
-        v.enter_visit(_n_kwwith)
-            for n in _n_id do
-                v.enter_visit(n)
-           end
-        v.enter_visit(_n_kwdo)
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
-        end
-        if _n_label != null then
-            v.enter_visit(_n_label.as(not null))
-        end
-    end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
 
-    redef fun visit_all_reverse(v: Visitor)
+
+    redef fun visit_all(v: Visitor)
     do
-        v.enter_visit(_n_kwwith)
-       do
-           var i = _n_id.length
-            while i >= 0 do
-                v.enter_visit(_n_id[i])
-               i = i - 1
-           end
-       end
-        v.enter_visit(_n_kwdo)
-        if _n_expr != null then
-            v.enter_visit(_n_expr.as(not null))
-        end
-        if _n_label != null then
-            v.enter_visit(_n_label.as(not null))
-        end
+        v.enter_visit(_n_id)
     end
 end
-redef class AQualified
-    redef fun n_classid=(n)
-    do
-        _n_classid = n
-        if n != null then
-           n.parent = self
-        end
-    end
-
+redef class AKwwritableAtid
     private init empty_init do end
 
-    init init_aqualified (
-            n_id: Collection[Object], # Should be Collection[TId]
-            n_classid: nullable TClassid
+    init init_akwwritableatid (
+            n_id: nullable TKwwritable
     )
     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
+        _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_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 _n_id == 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 TKwwritable
+                _n_id = new_child
            else
-               _n_classid = null
+               abort
             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
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
-       do
-           var i = _n_id.length
-            while i >= 0 do
-                v.enter_visit(_n_id[i])
-               i = i - 1
-           end
-       end
-        if _n_classid != null then
-            v.enter_visit(_n_classid.as(not null))
-        end
+        v.enter_visit(_n_id)
     end
 end
-redef class ADoc
-
+redef class AKwimportAtid
     private init empty_init do end
 
-    init init_adoc (
-            n_comment: Collection[Object] # Should be Collection[TComment]
+    init init_akwimportatid (
+            n_id: nullable TKwimport
     )
     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 TKwimport
+                _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
-    end
+               redef fun n_id=(node)
+               do
+                       _n_id = node
+                       node.parent = self
+               end
+
 
-    redef fun visit_all_reverse(v: Visitor)
+    redef fun visit_all(v: Visitor)
     do
-       do
-           var i = _n_comment.length
-            while i >= 0 do
-                v.enter_visit(_n_comment[i])
-               i = i - 1
-           end
-       end
+        v.enter_visit(_n_id)
     end
 end
 
 redef class Start
-    init(
-        n_base: nullable AModule,
-        n_eof: EOF)
-    do
-        _n_base = n_base
-        _n_eof = n_eof
-    end
-
     redef fun replace_child(old_child: ANode, new_child: nullable ANode)
     do
         if _n_base == old_child then
@@ -9732,12 +11634,4 @@ redef class Start
         end
        v.enter_visit(_n_eof)
     end
-
-    redef fun visit_all_reverse(v: Visitor)
-    do
-       v.enter_visit(_n_eof)
-        if _n_base != null then
-            v.enter_visit(_n_base.as(not null))
-        end
-    end
 end