X-Git-Url: http://nitlanguage.org diff --git a/src/parser/parser_prod.nit b/src/parser/parser_prod.nit index 9f442dd..1abc515 100644 --- a/src/parser/parser_prod.nit +++ b/src/parser/parser_prod.nit @@ -22,7 +22,7 @@ redef class ANode # Replace itself with an other node in the AST fun replace_with(node: ANode) do - if (_parent != null) then + if _parent != null then _parent.replace_child(self, node) end end @@ -47,7 +47,7 @@ redef class Prod end # Abstract standard visitor -class Visitor +abstract class Visitor # What the visitor do when a node is visited # Concrete visitors should redefine this method. protected fun visit(e: nullable ANode) is abstract @@ -73,6 +73,7 @@ redef class AModule init init_amodule ( 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 @@ -86,6 +87,11 @@ redef class AModule _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) @@ -117,6 +123,18 @@ redef class AModule return end end + for i in [0.._n_extern_code_blocks.length[ do + if _n_extern_code_blocks[i] == old_child then + if new_child != null then + assert new_child isa AExternCodeBlock + _n_extern_code_blocks[i] = new_child + new_child.parent = self + else + _n_extern_code_blocks.remove_at(i) + end + return + end + end for i in [0.._n_classdefs.length[ do if _n_classdefs[i] == old_child then if new_child != null then @@ -139,6 +157,9 @@ redef class AModule for n in _n_imports do v.enter_visit(n) end + for n in _n_extern_code_blocks do + v.enter_visit(n) + end for n in _n_classdefs do v.enter_visit(n) end @@ -150,7 +171,8 @@ redef class AModuledecl init init_amoduledecl ( n_doc: nullable ADoc, n_kwmodule: nullable TKwmodule, - n_name: nullable AModuleName + n_name: nullable AModuleName, + n_annotations: nullable AAnnotations ) do empty_init @@ -162,6 +184,10 @@ redef class AModuledecl 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) @@ -196,6 +222,16 @@ redef class AModuledecl 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) @@ -205,6 +241,9 @@ redef class AModuledecl end v.enter_visit(_n_kwmodule) v.enter_visit(_n_name) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AStdImport @@ -213,7 +252,8 @@ redef class AStdImport init init_astdimport ( n_visibility: nullable AVisibility, n_kwimport: nullable TKwimport, - n_name: nullable AModuleName + n_name: nullable AModuleName, + n_annotations: nullable AAnnotations ) do empty_init @@ -223,6 +263,10 @@ redef class AStdImport n_kwimport.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) @@ -257,6 +301,16 @@ redef class AStdImport 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) @@ -264,6 +318,9 @@ redef class AStdImport v.enter_visit(_n_visibility) v.enter_visit(_n_kwimport) v.enter_visit(_n_name) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class ANoImport @@ -444,8 +501,11 @@ redef class AStdClassdef n_classkind: nullable AClasskind, n_id: nullable TClassid, n_formaldefs: Collection[Object], # Should be Collection[AFormaldef] + n_annotations: nullable AAnnotations, + n_extern_code_block: nullable AExternCodeBlock, n_superclasses: Collection[Object], # Should be Collection[ASuperclass] - n_propdefs: Collection[Object] # Should be Collection[APropdef] + n_propdefs: Collection[Object], # Should be Collection[APropdef] + n_kwend: nullable TKwend ) do empty_init @@ -470,6 +530,14 @@ redef class AStdClassdef _n_formaldefs.add(n) n.parent = self end + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end + _n_extern_code_block = n_extern_code_block + if n_extern_code_block != null then + n_extern_code_block.parent = self + end for n in n_superclasses do assert n isa ASuperclass _n_superclasses.add(n) @@ -480,6 +548,8 @@ redef class AStdClassdef _n_propdefs.add(n) n.parent = self end + _n_kwend = n_kwend.as(not null) + n_kwend.parent = self end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -546,6 +616,26 @@ redef class AStdClassdef return end end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end + if _n_extern_code_block == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExternCodeBlock + _n_extern_code_block = new_child + else + _n_extern_code_block = null + end + return + end for i in [0.._n_superclasses.length[ do if _n_superclasses[i] == old_child then if new_child != null then @@ -570,6 +660,16 @@ redef class AStdClassdef return end end + if _n_kwend == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwend + _n_kwend = new_child + else + abort + end + return + end end redef fun visit_all(v: Visitor) @@ -588,12 +688,19 @@ redef class AStdClassdef for n in _n_formaldefs do v.enter_visit(n) end + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end + if _n_extern_code_block != null then + v.enter_visit(_n_extern_code_block.as(not null)) + end for n in _n_superclasses do v.enter_visit(n) end for n in _n_propdefs do v.enter_visit(n) end + v.enter_visit(_n_kwend) end end redef class ATopClassdef @@ -810,12 +917,62 @@ redef class AEnumClasskind v.enter_visit(_n_kwenum) end end +redef class AExternClasskind + private init empty_init do end + + init init_aexternclasskind ( + n_kwextern: nullable TKwextern, + n_kwclass: nullable TKwclass + ) + do + 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 + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + 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 visit_all(v: Visitor) + do + 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 @@ -825,6 +982,10 @@ redef class AFormaldef if n_type != null then n_type.parent = self end + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -849,6 +1010,16 @@ redef class AFormaldef end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) @@ -857,49 +1028,40 @@ redef class AFormaldef if _n_type != null then v.enter_visit(_n_type.as(not null)) end + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class ASuperclass private init empty_init do end init init_asuperclass ( - n_kwspecial: nullable TKwspecial, n_kwsuper: nullable TKwsuper, - n_type: nullable AType + n_type: nullable AType, + n_annotations: nullable AAnnotations ) do empty_init - _n_kwspecial = n_kwspecial - if n_kwspecial != null then - n_kwspecial.parent = self - end - _n_kwsuper = n_kwsuper - if n_kwsuper != null then - n_kwsuper.parent = self - end + _n_kwsuper = n_kwsuper.as(not null) + n_kwsuper.parent = self _n_type = n_type.as(not null) n_type.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) do - if _n_kwspecial == old_child then - if new_child != null then - new_child.parent = self - assert new_child isa TKwspecial - _n_kwspecial = new_child - else - _n_kwspecial = null - end - return - end if _n_kwsuper == old_child then if new_child != null then new_child.parent = self assert new_child isa TKwsuper _n_kwsuper = new_child else - _n_kwsuper = null + abort end return end @@ -913,17 +1075,25 @@ redef class ASuperclass end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) do - if _n_kwspecial != null then - v.enter_visit(_n_kwspecial.as(not null)) - end - if _n_kwsuper != null then - v.enter_visit(_n_kwsuper.as(not null)) - end + v.enter_visit(_n_kwsuper) v.enter_visit(_n_type) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AAttrPropdef @@ -939,6 +1109,7 @@ redef class AAttrPropdef n_id: nullable TAttrid, n_id2: nullable TId, n_type: nullable AType, + n_annotations: nullable AAnnotations, n_expr: nullable AExpr ) do @@ -975,6 +1146,10 @@ redef class AAttrPropdef 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 @@ -1073,6 +1248,16 @@ redef class AAttrPropdef end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end if _n_expr == old_child then if new_child != null then new_child.parent = self @@ -1110,6 +1295,9 @@ redef class AAttrPropdef if _n_type != null then v.enter_visit(_n_type.as(not null)) end + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end if _n_expr != null then v.enter_visit(_n_expr.as(not null)) end @@ -1219,7 +1407,8 @@ redef class ADeferredMethPropdef n_visibility: nullable AVisibility, n_kwmeth: nullable TKwmeth, n_methid: nullable AMethid, - n_signature: nullable ASignature + n_signature: nullable ASignature, + n_annotations: nullable AAnnotations ) do empty_init @@ -1239,6 +1428,10 @@ redef class ADeferredMethPropdef n_methid.parent = self _n_signature = n_signature.as(not null) n_signature.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -1303,6 +1496,16 @@ redef class ADeferredMethPropdef end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) @@ -1317,6 +1520,9 @@ redef class ADeferredMethPropdef v.enter_visit(_n_kwmeth) v.enter_visit(_n_methid) v.enter_visit(_n_signature) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AInternMethPropdef @@ -1438,7 +1644,9 @@ redef class AExternMethPropdef n_kwmeth: nullable TKwmeth, n_methid: nullable AMethid, n_signature: nullable ASignature, - n_extern: nullable TString + n_extern: nullable TString, + n_extern_calls: nullable AExternCalls, + n_extern_code_block: nullable AExternCodeBlock ) do empty_init @@ -1462,6 +1670,14 @@ redef class AExternMethPropdef if n_extern != null then n_extern.parent = self end + _n_extern_calls = n_extern_calls + if n_extern_calls != null then + n_extern_calls.parent = self + end + _n_extern_code_block = n_extern_code_block + if n_extern_code_block != null then + n_extern_code_block.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -1536,6 +1752,26 @@ redef class AExternMethPropdef end return end + if _n_extern_calls == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExternCalls + _n_extern_calls = new_child + else + _n_extern_calls = null + end + return + end + if _n_extern_code_block == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExternCodeBlock + _n_extern_code_block = new_child + else + _n_extern_code_block = null + end + return + end end redef fun visit_all(v: Visitor) @@ -1553,6 +1789,12 @@ redef class AExternMethPropdef if _n_extern != null then v.enter_visit(_n_extern.as(not null)) end + if _n_extern_calls != null then + v.enter_visit(_n_extern_calls.as(not null)) + end + if _n_extern_code_block != null then + v.enter_visit(_n_extern_code_block.as(not null)) + end end end redef class AConcreteMethPropdef @@ -1565,6 +1807,7 @@ redef class AConcreteMethPropdef n_kwmeth: nullable TKwmeth, n_methid: nullable AMethid, n_signature: nullable ASignature, + n_annotations: nullable AAnnotations, n_block: nullable AExpr ) do @@ -1585,6 +1828,10 @@ redef class AConcreteMethPropdef n_methid.parent = self _n_signature = n_signature.as(not null) n_signature.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end _n_block = n_block if n_block != null then n_block.parent = self @@ -1653,6 +1900,16 @@ redef class AConcreteMethPropdef end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end if _n_block == old_child then if new_child != null then new_child.parent = self @@ -1677,6 +1934,9 @@ redef class AConcreteMethPropdef v.enter_visit(_n_kwmeth) v.enter_visit(_n_methid) v.enter_visit(_n_signature) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end if _n_block != null then v.enter_visit(_n_block.as(not null)) end @@ -1692,6 +1952,7 @@ redef class AConcreteInitPropdef n_kwinit: nullable TKwinit, n_methid: nullable AMethid, n_signature: nullable ASignature, + n_annotations: nullable AAnnotations, n_block: nullable AExpr ) do @@ -1714,6 +1975,10 @@ redef class AConcreteInitPropdef end _n_signature = n_signature.as(not null) n_signature.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end _n_block = n_block if n_block != null then n_block.parent = self @@ -1782,6 +2047,16 @@ redef class AConcreteInitPropdef end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end if _n_block == old_child then if new_child != null then new_child.parent = self @@ -1808,74 +2083,27 @@ 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 -end -redef class AMainMethPropdef - private init empty_init do end - - init init_amainmethpropdef ( - n_kwredef: nullable TKwredef, - n_block: nullable AExpr - ) - do - empty_init - _n_kwredef = n_kwredef - if n_kwredef != null then - n_kwredef.parent = self - end - _n_block = n_block - if n_block != null then - n_block.parent = self - end - end - - redef fun replace_child(old_child: ANode, new_child: nullable ANode) - do - if _n_kwredef == old_child then - if new_child != null then - new_child.parent = self - assert new_child isa TKwredef - _n_kwredef = new_child - else - _n_kwredef = null - end - return - end - if _n_block == old_child then - if new_child != null then - new_child.parent = self - assert new_child isa AExpr - _n_block = new_child - else - _n_block = null - end - return - end - end - - redef fun visit_all(v: Visitor) - do - 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 if _n_block != null then v.enter_visit(_n_block.as(not null)) end end end -redef class ATypePropdef +redef class AExternInitPropdef private init empty_init do end - init init_atypepropdef ( + init init_aexterninitpropdef ( n_doc: nullable ADoc, n_kwredef: nullable TKwredef, n_visibility: nullable AVisibility, - n_kwtype: nullable TKwtype, - n_id: nullable TClassid, - n_type: nullable AType + n_kwnew: nullable TKwnew, + n_methid: nullable AMethid, + n_signature: nullable ASignature, + n_extern: nullable TString, + n_extern_calls: nullable AExternCalls, + n_extern_code_block: nullable AExternCodeBlock ) do empty_init @@ -1889,12 +2117,26 @@ redef class ATypePropdef end _n_visibility = n_visibility.as(not null) n_visibility.parent = self - _n_kwtype = n_kwtype.as(not null) - n_kwtype.parent = self - _n_id = n_id.as(not null) - n_id.parent = self - _n_type = n_type.as(not null) - n_type.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) @@ -1929,7 +2171,215 @@ redef class ATypePropdef end return end - if _n_kwtype == old_child then + if _n_kwnew == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwnew + _n_kwnew = new_child + else + abort + end + return + end + if _n_methid == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AMethid + _n_methid = new_child + else + _n_methid = null + end + return + end + if _n_signature == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa ASignature + _n_signature = new_child + else + abort + end + return + end + if _n_extern == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TString + _n_extern = new_child + else + _n_extern = null + end + return + end + if _n_extern_calls == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExternCalls + _n_extern_calls = new_child + else + _n_extern_calls = null + end + return + end + if _n_extern_code_block == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExternCodeBlock + _n_extern_code_block = new_child + else + _n_extern_code_block = null + end + return + end + end + + redef fun visit_all(v: Visitor) + do + if _n_doc != null then + v.enter_visit(_n_doc.as(not null)) + end + if _n_kwredef != null then + v.enter_visit(_n_kwredef.as(not null)) + end + v.enter_visit(_n_visibility) + v.enter_visit(_n_kwnew) + if _n_methid != null then + v.enter_visit(_n_methid.as(not null)) + end + v.enter_visit(_n_signature) + if _n_extern != null then + v.enter_visit(_n_extern.as(not null)) + end + if _n_extern_calls != null then + v.enter_visit(_n_extern_calls.as(not null)) + end + if _n_extern_code_block != null then + v.enter_visit(_n_extern_code_block.as(not null)) + end + end +end +redef class AMainMethPropdef + private init empty_init do end + + init init_amainmethpropdef ( + n_kwredef: nullable TKwredef, + n_block: nullable AExpr + ) + do + empty_init + _n_kwredef = n_kwredef + if n_kwredef != null then + n_kwredef.parent = self + end + _n_block = n_block + if n_block != null then + n_block.parent = self + end + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_kwredef == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwredef + _n_kwredef = new_child + else + _n_kwredef = null + end + return + end + if _n_block == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExpr + _n_block = new_child + else + _n_block = null + end + return + 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 +end +redef class ATypePropdef + private init empty_init do end + + init init_atypepropdef ( + n_doc: nullable ADoc, + n_kwredef: nullable TKwredef, + n_visibility: nullable AVisibility, + n_kwtype: nullable TKwtype, + n_id: nullable TClassid, + n_type: nullable AType, + n_annotations: nullable AAnnotations + ) + do + empty_init + _n_doc = n_doc + if n_doc != null then + n_doc.parent = self + end + _n_kwredef = n_kwredef + if n_kwredef != null then + n_kwredef.parent = self + end + _n_visibility = n_visibility.as(not null) + n_visibility.parent = self + _n_kwtype = n_kwtype.as(not null) + n_kwtype.parent = self + _n_id = n_id.as(not null) + 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) + 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_kwtype == old_child then if new_child != null then new_child.parent = self assert new_child isa TKwtype @@ -1959,6 +2409,16 @@ redef class ATypePropdef end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) @@ -1973,6 +2433,9 @@ redef class ATypePropdef v.enter_visit(_n_kwtype) v.enter_visit(_n_id) v.enter_visit(_n_type) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AReadAble @@ -2709,17 +3172,27 @@ redef class ASignature private init empty_init do end init init_asignature ( + n_opar: nullable TOpar, n_params: Collection[Object], # Should be Collection[AParam] + n_cpar: nullable TCpar, n_type: nullable AType, n_closure_decls: Collection[Object] # Should be Collection[AClosureDecl] ) do empty_init + _n_opar = n_opar + if n_opar != null then + n_opar.parent = self + end for n in n_params do assert n isa AParam _n_params.add(n) n.parent = self end + _n_cpar = n_cpar + if n_cpar != null then + n_cpar.parent = self + end _n_type = n_type if n_type != null then n_type.parent = self @@ -2733,6 +3206,16 @@ redef class ASignature redef fun replace_child(old_child: ANode, new_child: nullable ANode) do + if _n_opar == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TOpar + _n_opar = new_child + else + _n_opar = null + end + return + end for i in [0.._n_params.length[ do if _n_params[i] == old_child then if new_child != null then @@ -2745,6 +3228,16 @@ redef class ASignature return end end + if _n_cpar == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TCpar + _n_cpar = new_child + else + _n_cpar = null + end + return + end if _n_type == old_child then if new_child != null then new_child.parent = self @@ -2771,9 +3264,15 @@ redef class ASignature redef fun visit_all(v: Visitor) do + if _n_opar != null then + v.enter_visit(_n_opar.as(not null)) + end for n in _n_params do v.enter_visit(n) end + if _n_cpar != null then + v.enter_visit(_n_cpar.as(not null)) + end if _n_type != null then v.enter_visit(_n_type.as(not null)) end @@ -2788,7 +3287,8 @@ redef class AParam init init_aparam ( n_id: nullable TId, n_type: nullable AType, - n_dotdotdot: nullable TDotdotdot + n_dotdotdot: nullable TDotdotdot, + n_annotations: nullable AAnnotations ) do empty_init @@ -2802,6 +3302,10 @@ redef class AParam if n_dotdotdot != null then n_dotdotdot.parent = self end + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -2836,6 +3340,16 @@ redef class AParam end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) @@ -2847,6 +3361,9 @@ redef class AParam if _n_dotdotdot != null then v.enter_visit(_n_dotdotdot.as(not null)) end + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AClosureDecl @@ -2950,7 +3467,8 @@ redef class AType init init_atype ( n_kwnullable: nullable TKwnullable, n_id: nullable TClassid, - n_types: Collection[Object] # Should be Collection[AType] + n_types: Collection[Object], # Should be Collection[AType] + n_annotations: nullable AAnnotations ) do empty_init @@ -2965,6 +3483,10 @@ redef class AType _n_types.add(n) n.parent = self end + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -3001,6 +3523,16 @@ redef class AType return end end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) @@ -3012,6 +3544,9 @@ redef class AType for n in _n_types do v.enter_visit(n) end + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class ALabel @@ -3063,7 +3598,8 @@ redef class ABlockExpr private init empty_init do end init init_ablockexpr ( - n_expr: Collection[Object] # Should be Collection[AExpr] + n_expr: Collection[Object], # Should be Collection[AExpr] + n_kwend: nullable TKwend ) do empty_init @@ -3072,6 +3608,10 @@ redef class ABlockExpr _n_expr.add(n) n.parent = self end + _n_kwend = n_kwend + if n_kwend != null then + n_kwend.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -3088,6 +3628,16 @@ redef class ABlockExpr return end end + if _n_kwend == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwend + _n_kwend = new_child + else + _n_kwend = null + end + return + end end redef fun visit_all(v: Visitor) @@ -3095,6 +3645,9 @@ redef class ABlockExpr for n in _n_expr do v.enter_visit(n) end + if _n_kwend != null then + v.enter_visit(_n_kwend.as(not null)) + end end end redef class AVardeclExpr @@ -3105,7 +3658,8 @@ redef class AVardeclExpr n_id: nullable TId, n_type: nullable AType, n_assign: nullable TAssign, - n_expr: nullable AExpr + n_expr: nullable AExpr, + n_annotations: nullable AAnnotations ) do empty_init @@ -3125,6 +3679,10 @@ redef class AVardeclExpr if n_expr != null then n_expr.parent = self end + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -3179,6 +3737,16 @@ redef class AVardeclExpr end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) @@ -3194,6 +3762,9 @@ redef class AVardeclExpr if _n_expr != null then v.enter_visit(_n_expr.as(not null)) end + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AReturnExpr @@ -5099,7 +5670,7 @@ redef class ANewExpr n_kwnew: nullable TKwnew, n_type: nullable AType, n_id: nullable TId, - n_args: Collection[Object] # Should be Collection[AExpr] + n_args: nullable AExprs ) do empty_init @@ -5111,11 +5682,8 @@ redef class ANewExpr if n_id != null then n_id.parent = self end - for n in n_args do - assert n isa AExpr - _n_args.add(n) - n.parent = self - end + _n_args = n_args.as(not null) + n_args.parent = self end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -5150,18 +5718,16 @@ redef class ANewExpr end return end - for i in [0.._n_args.length[ do - if _n_args[i] == old_child then - if new_child != null then - assert new_child isa AExpr - _n_args[i] = new_child - new_child.parent = self - else - _n_args.remove_at(i) - end - return + if _n_args == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExprs + _n_args = new_child + else + abort end - end + return + end end redef fun visit_all(v: Visitor) @@ -5171,9 +5737,7 @@ redef class ANewExpr if _n_id != null then v.enter_visit(_n_id.as(not null)) end - for n in _n_args do - v.enter_visit(n) - end + v.enter_visit(_n_args) end end redef class AAttrExpr @@ -5373,7 +5937,7 @@ redef class ACallExpr init init_acallexpr ( n_expr: nullable AExpr, n_id: nullable TId, - n_args: Collection[Object], # Should be Collection[AExpr] + n_args: nullable AExprs, n_closure_defs: Collection[Object] # Should be Collection[AClosureDef] ) do @@ -5382,11 +5946,8 @@ redef class ACallExpr n_expr.parent = self _n_id = n_id.as(not null) n_id.parent = self - for n in n_args do - assert n isa AExpr - _n_args.add(n) - n.parent = self - end + _n_args = n_args.as(not null) + n_args.parent = self for n in n_closure_defs do assert n isa AClosureDef _n_closure_defs.add(n) @@ -5416,18 +5977,16 @@ redef class ACallExpr end return end - for i in [0.._n_args.length[ do - if _n_args[i] == old_child then - if new_child != null then - assert new_child isa AExpr - _n_args[i] = new_child - new_child.parent = self - else - _n_args.remove_at(i) - end - return + if _n_args == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExprs + _n_args = new_child + else + abort end - end + return + end for i in [0.._n_closure_defs.length[ do if _n_closure_defs[i] == old_child then if new_child != null then @@ -5446,9 +6005,7 @@ redef class ACallExpr do v.enter_visit(_n_expr) v.enter_visit(_n_id) - for n in _n_args do - v.enter_visit(n) - end + v.enter_visit(_n_args) for n in _n_closure_defs do v.enter_visit(n) end @@ -5460,7 +6017,7 @@ redef class ACallAssignExpr init init_acallassignexpr ( n_expr: nullable AExpr, n_id: nullable TId, - n_args: Collection[Object], # Should be Collection[AExpr] + n_args: nullable AExprs, n_assign: nullable TAssign, n_value: nullable AExpr ) @@ -5470,11 +6027,8 @@ redef class ACallAssignExpr n_expr.parent = self _n_id = n_id.as(not null) n_id.parent = self - for n in n_args do - assert n isa AExpr - _n_args.add(n) - n.parent = self - end + _n_args = n_args.as(not null) + n_args.parent = self _n_assign = n_assign.as(not null) n_assign.parent = self _n_value = n_value.as(not null) @@ -5503,18 +6057,16 @@ redef class ACallAssignExpr end return end - for i in [0.._n_args.length[ do - if _n_args[i] == old_child then - if new_child != null then - assert new_child isa AExpr - _n_args[i] = new_child - new_child.parent = self - else - _n_args.remove_at(i) - end - return + if _n_args == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExprs + _n_args = new_child + else + abort end - end + return + end if _n_assign == old_child then if new_child != null then new_child.parent = self @@ -5541,9 +6093,7 @@ redef class ACallAssignExpr do v.enter_visit(_n_expr) v.enter_visit(_n_id) - for n in _n_args do - v.enter_visit(n) - end + v.enter_visit(_n_args) v.enter_visit(_n_assign) v.enter_visit(_n_value) end @@ -5554,7 +6104,7 @@ redef class ACallReassignExpr init init_acallreassignexpr ( n_expr: nullable AExpr, n_id: nullable TId, - n_args: Collection[Object], # Should be Collection[AExpr] + n_args: nullable AExprs, n_assign_op: nullable AAssignOp, n_value: nullable AExpr ) @@ -5564,11 +6114,8 @@ redef class ACallReassignExpr n_expr.parent = self _n_id = n_id.as(not null) n_id.parent = self - for n in n_args do - assert n isa AExpr - _n_args.add(n) - n.parent = self - end + _n_args = n_args.as(not null) + n_args.parent = self _n_assign_op = n_assign_op.as(not null) n_assign_op.parent = self _n_value = n_value.as(not null) @@ -5597,18 +6144,16 @@ redef class ACallReassignExpr end return end - for i in [0.._n_args.length[ do - if _n_args[i] == old_child then - if new_child != null then - assert new_child isa AExpr - _n_args[i] = new_child - new_child.parent = self - else - _n_args.remove_at(i) - end - return + if _n_args == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExprs + _n_args = new_child + else + abort end - end + return + end if _n_assign_op == old_child then if new_child != null then new_child.parent = self @@ -5635,9 +6180,7 @@ redef class ACallReassignExpr do v.enter_visit(_n_expr) v.enter_visit(_n_id) - for n in _n_args do - v.enter_visit(n) - end + v.enter_visit(_n_args) v.enter_visit(_n_assign_op) v.enter_visit(_n_value) end @@ -5648,7 +6191,7 @@ redef class ASuperExpr init init_asuperexpr ( n_qualified: nullable AQualified, n_kwsuper: nullable TKwsuper, - n_args: Collection[Object] # Should be Collection[AExpr] + n_args: nullable AExprs ) do empty_init @@ -5658,11 +6201,8 @@ redef class ASuperExpr end _n_kwsuper = n_kwsuper.as(not null) n_kwsuper.parent = self - for n in n_args do - assert n isa AExpr - _n_args.add(n) - n.parent = self - end + _n_args = n_args.as(not null) + n_args.parent = self end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -5687,18 +6227,16 @@ redef class ASuperExpr end return end - for i in [0.._n_args.length[ do - if _n_args[i] == old_child then - if new_child != null then - assert new_child isa AExpr - _n_args[i] = new_child - new_child.parent = self - else - _n_args.remove_at(i) - end - return + if _n_args == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExprs + _n_args = new_child + else + abort end - end + return + end end redef fun visit_all(v: Visitor) @@ -5707,9 +6245,7 @@ redef class ASuperExpr v.enter_visit(_n_qualified.as(not null)) end v.enter_visit(_n_kwsuper) - for n in _n_args do - v.enter_visit(n) - end + v.enter_visit(_n_args) end end redef class AInitExpr @@ -5718,7 +6254,7 @@ redef class AInitExpr init init_ainitexpr ( n_expr: nullable AExpr, n_kwinit: nullable TKwinit, - n_args: Collection[Object] # Should be Collection[AExpr] + n_args: nullable AExprs ) do empty_init @@ -5726,11 +6262,8 @@ redef class AInitExpr n_expr.parent = self _n_kwinit = n_kwinit.as(not null) n_kwinit.parent = self - for n in n_args do - assert n isa AExpr - _n_args.add(n) - n.parent = self - end + _n_args = n_args.as(not null) + n_args.parent = self end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -5755,27 +6288,23 @@ redef class AInitExpr end return end - for i in [0.._n_args.length[ do - if _n_args[i] == old_child then - if new_child != null then - assert new_child isa AExpr - _n_args[i] = new_child - new_child.parent = self - else - _n_args.remove_at(i) - end - return + if _n_args == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExprs + _n_args = new_child + else + abort end - end + return + end end redef fun visit_all(v: Visitor) do v.enter_visit(_n_expr) v.enter_visit(_n_kwinit) - for n in _n_args do - v.enter_visit(n) - end + v.enter_visit(_n_args) end end redef class ABraExpr @@ -5783,18 +6312,15 @@ redef class ABraExpr init init_abraexpr ( n_expr: nullable AExpr, - n_args: Collection[Object], # Should be Collection[AExpr] + n_args: nullable AExprs, n_closure_defs: Collection[Object] # Should be Collection[AClosureDef] ) do empty_init _n_expr = n_expr.as(not null) n_expr.parent = self - for n in n_args do - assert n isa AExpr - _n_args.add(n) - n.parent = self - end + _n_args = n_args.as(not null) + n_args.parent = self for n in n_closure_defs do assert n isa AClosureDef _n_closure_defs.add(n) @@ -5814,18 +6340,16 @@ redef class ABraExpr end return end - for i in [0.._n_args.length[ do - if _n_args[i] == old_child then - if new_child != null then - assert new_child isa AExpr - _n_args[i] = new_child - new_child.parent = self - else - _n_args.remove_at(i) - end - return + if _n_args == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExprs + _n_args = new_child + else + abort end - end + return + end for i in [0.._n_closure_defs.length[ do if _n_closure_defs[i] == old_child then if new_child != null then @@ -5843,9 +6367,7 @@ redef class ABraExpr redef fun visit_all(v: Visitor) do v.enter_visit(_n_expr) - for n in _n_args do - v.enter_visit(n) - end + v.enter_visit(_n_args) for n in _n_closure_defs do v.enter_visit(n) end @@ -5856,7 +6378,7 @@ redef class ABraAssignExpr init init_abraassignexpr ( n_expr: nullable AExpr, - n_args: Collection[Object], # Should be Collection[AExpr] + n_args: nullable AExprs, n_assign: nullable TAssign, n_value: nullable AExpr ) @@ -5864,11 +6386,8 @@ redef class ABraAssignExpr empty_init _n_expr = n_expr.as(not null) n_expr.parent = self - for n in n_args do - assert n isa AExpr - _n_args.add(n) - n.parent = self - end + _n_args = n_args.as(not null) + n_args.parent = self _n_assign = n_assign.as(not null) n_assign.parent = self _n_value = n_value.as(not null) @@ -5887,18 +6406,16 @@ redef class ABraAssignExpr end return end - for i in [0.._n_args.length[ do - if _n_args[i] == old_child then - if new_child != null then - assert new_child isa AExpr - _n_args[i] = new_child - new_child.parent = self - else - _n_args.remove_at(i) - end - return + if _n_args == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExprs + _n_args = new_child + else + abort end - end + return + end if _n_assign == old_child then if new_child != null then new_child.parent = self @@ -5924,9 +6441,7 @@ redef class ABraAssignExpr redef fun visit_all(v: Visitor) do v.enter_visit(_n_expr) - for n in _n_args do - v.enter_visit(n) - end + v.enter_visit(_n_args) v.enter_visit(_n_assign) v.enter_visit(_n_value) end @@ -5936,7 +6451,7 @@ redef class ABraReassignExpr init init_abrareassignexpr ( n_expr: nullable AExpr, - n_args: Collection[Object], # Should be Collection[AExpr] + n_args: nullable AExprs, n_assign_op: nullable AAssignOp, n_value: nullable AExpr ) @@ -5944,11 +6459,8 @@ redef class ABraReassignExpr empty_init _n_expr = n_expr.as(not null) n_expr.parent = self - for n in n_args do - assert n isa AExpr - _n_args.add(n) - n.parent = self - end + _n_args = n_args.as(not null) + n_args.parent = self _n_assign_op = n_assign_op.as(not null) n_assign_op.parent = self _n_value = n_value.as(not null) @@ -5967,18 +6479,16 @@ redef class ABraReassignExpr end return end - for i in [0.._n_args.length[ do - if _n_args[i] == old_child then - if new_child != null then - assert new_child isa AExpr - _n_args[i] = new_child - new_child.parent = self - else - _n_args.remove_at(i) - end - return + if _n_args == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExprs + _n_args = new_child + else + abort end - end + return + end if _n_assign_op == old_child then if new_child != null then new_child.parent = self @@ -6004,9 +6514,7 @@ redef class ABraReassignExpr redef fun visit_all(v: Visitor) do v.enter_visit(_n_expr) - for n in _n_args do - v.enter_visit(n) - end + v.enter_visit(_n_args) v.enter_visit(_n_assign_op) v.enter_visit(_n_value) end @@ -6016,18 +6524,15 @@ redef class AClosureCallExpr init init_aclosurecallexpr ( n_id: nullable TId, - n_args: Collection[Object], # Should be Collection[AExpr] + n_args: nullable AExprs, n_closure_defs: Collection[Object] # Should be Collection[AClosureDef] ) do empty_init _n_id = n_id.as(not null) n_id.parent = self - for n in n_args do - assert n isa AExpr - _n_args.add(n) - n.parent = self - end + _n_args = n_args.as(not null) + n_args.parent = self for n in n_closure_defs do assert n isa AClosureDef _n_closure_defs.add(n) @@ -6047,18 +6552,16 @@ redef class AClosureCallExpr end return end - for i in [0.._n_args.length[ do - if _n_args[i] == old_child then - if new_child != null then - assert new_child isa AExpr - _n_args[i] = new_child - new_child.parent = self - else - _n_args.remove_at(i) - end - return + if _n_args == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExprs + _n_args = new_child + else + abort end - end + return + end for i in [0.._n_closure_defs.length[ do if _n_closure_defs[i] == old_child then if new_child != null then @@ -6076,9 +6579,7 @@ redef class AClosureCallExpr redef fun visit_all(v: Visitor) do v.enter_visit(_n_id) - for n in _n_args do - v.enter_visit(n) - end + v.enter_visit(_n_args) for n in _n_closure_defs do v.enter_visit(n) end @@ -6238,7 +6739,8 @@ redef class ARangeExpr init init_arangeexpr ( n_expr: nullable AExpr, - n_expr2: nullable AExpr + n_expr2: nullable AExpr, + n_annotations: nullable AAnnotations ) do empty_init @@ -6246,6 +6748,10 @@ redef class ARangeExpr n_expr.parent = self _n_expr2 = n_expr2.as(not null) n_expr2.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -6270,31 +6776,65 @@ redef class ARangeExpr end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) do v.enter_visit(_n_expr) v.enter_visit(_n_expr2) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class ACrangeExpr private init empty_init do end init init_acrangeexpr ( + n_obra: nullable TObra, n_expr: nullable AExpr, - n_expr2: nullable AExpr + n_expr2: nullable AExpr, + n_cbra: nullable TCbra, + n_annotations: nullable AAnnotations ) do empty_init + _n_obra = n_obra.as(not null) + n_obra.parent = self _n_expr = n_expr.as(not null) n_expr.parent = self _n_expr2 = n_expr2.as(not null) n_expr2.parent = self + _n_cbra = n_cbra.as(not null) + n_cbra.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) do + if _n_obra == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TObra + _n_obra = new_child + else + abort + end + return + end if _n_expr == old_child then if new_child != null then new_child.parent = self @@ -6315,31 +6855,77 @@ redef class ACrangeExpr end return end + if _n_cbra == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TCbra + _n_cbra = new_child + else + abort + end + return + end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) do + v.enter_visit(_n_obra) v.enter_visit(_n_expr) v.enter_visit(_n_expr2) + v.enter_visit(_n_cbra) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AOrangeExpr private init empty_init do end init init_aorangeexpr ( + n_obra: nullable TObra, n_expr: nullable AExpr, - n_expr2: nullable AExpr + n_expr2: nullable AExpr, + n_cbra: nullable TObra, + n_annotations: nullable AAnnotations ) do empty_init + _n_obra = n_obra.as(not null) + n_obra.parent = self _n_expr = n_expr.as(not null) n_expr.parent = self _n_expr2 = n_expr2.as(not null) n_expr2.parent = self + _n_cbra = n_cbra.as(not null) + n_cbra.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) do + if _n_obra == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TObra + _n_obra = new_child + else + abort + end + return + end if _n_expr == old_child then if new_child != null then new_child.parent = self @@ -6360,62 +6946,103 @@ redef class AOrangeExpr end return end + if _n_cbra == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TObra + _n_cbra = new_child + else + abort + end + return + end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) do + v.enter_visit(_n_obra) v.enter_visit(_n_expr) v.enter_visit(_n_expr2) + v.enter_visit(_n_cbra) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AArrayExpr private init empty_init do end init init_aarrayexpr ( - n_exprs: Collection[Object] # Should be Collection[AExpr] + n_exprs: nullable AExprs, + n_annotations: nullable AAnnotations ) do empty_init - for n in n_exprs do - assert n isa AExpr - _n_exprs.add(n) - n.parent = self + _n_exprs = n_exprs.as(not null) + n_exprs.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) do - for i in [0.._n_exprs.length[ do - if _n_exprs[i] == old_child then - if new_child != null then - assert new_child isa AExpr - _n_exprs[i] = new_child - new_child.parent = self - else - _n_exprs.remove_at(i) - end - return + if _n_exprs == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExprs + _n_exprs = new_child + else + abort end - end + return + end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) do - for n in _n_exprs do - v.enter_visit(n) - end + v.enter_visit(_n_exprs) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class ASelfExpr private init empty_init do end init init_aselfexpr ( - n_kwself: nullable TKwself + n_kwself: nullable TKwself, + n_annotations: nullable AAnnotations ) do empty_init _n_kwself = n_kwself.as(not null) n_kwself.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -6430,11 +7057,24 @@ redef class ASelfExpr end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) do v.enter_visit(_n_kwself) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AImplicitSelfExpr @@ -6457,12 +7097,17 @@ redef class ATrueExpr private init empty_init do end init init_atrueexpr ( - n_kwtrue: nullable TKwtrue + n_kwtrue: nullable TKwtrue, + n_annotations: nullable AAnnotations ) do empty_init _n_kwtrue = n_kwtrue.as(not null) n_kwtrue.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -6477,23 +7122,41 @@ redef class ATrueExpr end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) do v.enter_visit(_n_kwtrue) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AFalseExpr private init empty_init do end init init_afalseexpr ( - n_kwfalse: nullable TKwfalse + n_kwfalse: nullable TKwfalse, + n_annotations: nullable AAnnotations ) do empty_init _n_kwfalse = n_kwfalse.as(not null) n_kwfalse.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -6508,23 +7171,41 @@ redef class AFalseExpr end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) do v.enter_visit(_n_kwfalse) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class ANullExpr private init empty_init do end init init_anullexpr ( - n_kwnull: nullable TKwnull + n_kwnull: nullable TKwnull, + n_annotations: nullable AAnnotations ) do empty_init _n_kwnull = n_kwnull.as(not null) n_kwnull.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -6539,23 +7220,41 @@ redef class ANullExpr end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) do v.enter_visit(_n_kwnull) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AIntExpr private init empty_init do end init init_aintexpr ( - n_number: nullable TNumber + n_number: nullable TNumber, + n_annotations: nullable AAnnotations ) do empty_init _n_number = n_number.as(not null) n_number.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -6570,23 +7269,41 @@ redef class AIntExpr end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) do v.enter_visit(_n_number) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AFloatExpr private init empty_init do end init init_afloatexpr ( - n_float: nullable TFloat + n_float: nullable TFloat, + n_annotations: nullable AAnnotations ) do empty_init _n_float = n_float.as(not null) n_float.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -6601,23 +7318,41 @@ 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) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class ACharExpr private init empty_init do end init init_acharexpr ( - n_char: nullable TChar + n_char: nullable TChar, + n_annotations: nullable AAnnotations ) do empty_init _n_char = n_char.as(not null) n_char.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -6632,23 +7367,41 @@ redef class ACharExpr end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) do v.enter_visit(_n_char) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AStringExpr private init empty_init do end init init_astringexpr ( - n_string: nullable TString + n_string: nullable TString, + n_annotations: nullable AAnnotations ) do empty_init _n_string = n_string.as(not null) n_string.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -6663,11 +7416,24 @@ redef class AStringExpr end return end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) do v.enter_visit(_n_string) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AStartStringExpr @@ -6767,7 +7533,8 @@ redef class ASuperstringExpr private init empty_init do end init init_asuperstringexpr ( - n_exprs: Collection[Object] # Should be Collection[AExpr] + n_exprs: Collection[Object], # Should be Collection[AExpr] + n_annotations: nullable AAnnotations ) do empty_init @@ -6776,6 +7543,10 @@ redef class ASuperstringExpr _n_exprs.add(n) n.parent = self end + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -6792,6 +7563,16 @@ redef class ASuperstringExpr return end end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) @@ -6799,22 +7580,46 @@ redef class ASuperstringExpr for n in _n_exprs do v.enter_visit(n) end + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AParExpr private init empty_init do end init init_aparexpr ( - n_expr: nullable AExpr + n_opar: nullable TOpar, + n_expr: nullable AExpr, + n_cpar: nullable TCpar, + n_annotations: nullable AAnnotations ) do empty_init + _n_opar = n_opar.as(not null) + n_opar.parent = self _n_expr = n_expr.as(not null) n_expr.parent = self + _n_cpar = n_cpar.as(not null) + n_cpar.parent = self + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) do + if _n_opar == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TOpar + _n_opar = new_child + else + abort + end + return + end if _n_expr == old_child then if new_child != null then new_child.parent = self @@ -6825,11 +7630,36 @@ redef class AParExpr end return end + if _n_cpar == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TCpar + _n_cpar = new_child + else + abort + end + return + end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end end redef fun visit_all(v: Visitor) do + v.enter_visit(_n_opar) v.enter_visit(_n_expr) + v.enter_visit(_n_cpar) + if _n_annotations != null then + v.enter_visit(_n_annotations.as(not null)) + end end end redef class AAsCastExpr @@ -6838,7 +7668,9 @@ redef class AAsCastExpr init init_aascastexpr ( n_expr: nullable AExpr, n_kwas: nullable TKwas, - n_type: nullable AType + n_opar: nullable TOpar, + n_type: nullable AType, + n_cpar: nullable TCpar ) do empty_init @@ -6846,8 +7678,12 @@ redef class AAsCastExpr n_expr.parent = self _n_kwas = n_kwas.as(not null) n_kwas.parent = self + _n_opar = n_opar.as(not null) + n_opar.parent = self _n_type = n_type.as(not null) n_type.parent = self + _n_cpar = n_cpar.as(not null) + n_cpar.parent = self end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -6872,6 +7708,16 @@ redef class AAsCastExpr end return end + if _n_opar == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TOpar + _n_opar = new_child + else + abort + end + return + end if _n_type == old_child then if new_child != null then new_child.parent = self @@ -6882,13 +7728,25 @@ redef class AAsCastExpr end return end + if _n_cpar == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TCpar + _n_cpar = new_child + else + abort + end + return + end end redef fun visit_all(v: Visitor) do v.enter_visit(_n_expr) v.enter_visit(_n_kwas) + v.enter_visit(_n_opar) v.enter_visit(_n_type) + v.enter_visit(_n_cpar) end end redef class AAsNotnullExpr @@ -6897,8 +7755,10 @@ redef class AAsNotnullExpr init init_aasnotnullexpr ( n_expr: nullable AExpr, n_kwas: nullable TKwas, + n_opar: nullable TOpar, n_kwnot: nullable TKwnot, - n_kwnull: nullable TKwnull + n_kwnull: nullable TKwnull, + n_cpar: nullable TCpar ) do empty_init @@ -6906,10 +7766,14 @@ redef class AAsNotnullExpr n_expr.parent = self _n_kwas = n_kwas.as(not null) n_kwas.parent = self + _n_opar = n_opar.as(not null) + n_opar.parent = self _n_kwnot = n_kwnot.as(not null) n_kwnot.parent = self _n_kwnull = n_kwnull.as(not null) n_kwnull.parent = self + _n_cpar = n_cpar.as(not null) + n_cpar.parent = self end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -6934,6 +7798,16 @@ redef class AAsNotnullExpr end return end + if _n_opar == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TOpar + _n_opar = new_child + else + abort + end + return + end if _n_kwnot == old_child then if new_child != null then new_child.parent = self @@ -6954,14 +7828,26 @@ redef class AAsNotnullExpr end return end + if _n_cpar == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TCpar + _n_cpar = new_child + else + abort + end + return + end end redef fun visit_all(v: Visitor) do v.enter_visit(_n_expr) v.enter_visit(_n_kwas) + v.enter_visit(_n_opar) v.enter_visit(_n_kwnot) v.enter_visit(_n_kwnull) + v.enter_visit(_n_cpar) end end redef class AIssetAttrExpr @@ -7023,35 +7909,278 @@ redef class AIssetAttrExpr v.enter_visit(_n_id) end end -redef class APlusAssignOp +redef class ADebugTypeExpr private init empty_init do end - init init_aplusassignop ( - n_pluseq: nullable TPluseq + init init_adebugtypeexpr ( + n_kwdebug: nullable TKwdebug, + n_kwtype: nullable TKwtype, + n_expr: nullable AExpr, + n_type: nullable AType ) do empty_init - _n_pluseq = n_pluseq.as(not null) - n_pluseq.parent = self + _n_kwdebug = n_kwdebug.as(not null) + n_kwdebug.parent = self + _n_kwtype = n_kwtype.as(not null) + n_kwtype.parent = self + _n_expr = n_expr.as(not null) + n_expr.parent = self + _n_type = n_type.as(not null) + n_type.parent = self end redef fun replace_child(old_child: ANode, new_child: nullable ANode) do - if _n_pluseq == old_child then + if _n_kwdebug == old_child then if new_child != null then new_child.parent = self - assert new_child isa TPluseq - _n_pluseq = new_child + assert new_child isa TKwdebug + _n_kwdebug = new_child else abort end return end - end - - redef fun visit_all(v: Visitor) - do - v.enter_visit(_n_pluseq) + 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 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 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 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 ( + n_pluseq: nullable TPluseq + ) + do + empty_init + _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 visit_all(v: Visitor) + do + v.enter_visit(_n_pluseq) end end redef class AMinusAssignOp @@ -7337,110 +8466,1088 @@ redef class AModuleName v.enter_visit(_n_id) end end -redef class AQualified +redef class AExternCalls private init empty_init do end - init init_aqualified ( - n_id: Collection[Object], # Should be Collection[TId] - n_classid: nullable TClassid + init init_aexterncalls ( + n_kwimport: nullable TKwimport, + n_extern_calls: Collection[Object] # Should be Collection[AExternCall] ) do empty_init - for n in n_id do - assert n isa TId - _n_id.add(n) + _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 - _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 _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 TId - _n_id[i] = new_child + assert new_child isa AExternCall + _n_extern_calls[i] = new_child new_child.parent = self else - _n_id.remove_at(i) + _n_extern_calls.remove_at(i) end return end end - if _n_classid == old_child then - if new_child != null then - new_child.parent = self - assert new_child isa TClassid - _n_classid = new_child - else - _n_classid = null - end - return - end end redef fun visit_all(v: Visitor) do - for n in _n_id do + v.enter_visit(_n_kwimport) + for n in _n_extern_calls do + v.enter_visit(n) + end + end +end +redef class AExternCall + private init empty_init do end + + init init_aexterncall + do + empty_init + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + end + + redef fun visit_all(v: Visitor) + do + end +end +redef class ASuperExternCall + private init empty_init do end + + init init_asuperexterncall ( + n_kwsuper: nullable TKwsuper + ) + do + empty_init + _n_kwsuper = n_kwsuper.as(not null) + n_kwsuper.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_kwsuper == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwsuper + _n_kwsuper = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_kwsuper) + end +end +redef class ALocalPropExternCall + private init empty_init do end + + init init_alocalpropexterncall ( + n_methid: nullable AMethid + ) + do + empty_init + _n_methid = n_methid.as(not null) + n_methid.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_methid == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AMethid + _n_methid = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_methid) + end +end +redef class AFullPropExternCall + private init empty_init do end + + init init_afullpropexterncall ( + n_classid: nullable TClassid, + n_quad: nullable TQuad, + n_methid: nullable AMethid + ) + do + empty_init + _n_classid = n_classid.as(not null) + n_classid.parent = self + _n_quad = n_quad + if n_quad != null then + n_quad.parent = self + end + _n_methid = n_methid.as(not null) + n_methid.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_classid == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TClassid + _n_classid = new_child + else + abort + end + return + end + if _n_quad == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TQuad + _n_quad = new_child + else + _n_quad = null + end + return + end + if _n_methid == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AMethid + _n_methid = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_classid) + if _n_quad != null then + v.enter_visit(_n_quad.as(not null)) + end + v.enter_visit(_n_methid) + end +end +redef class AInitPropExternCall + private init empty_init do end + + init init_ainitpropexterncall ( + n_classid: nullable TClassid + ) + do + empty_init + _n_classid = n_classid.as(not null) + n_classid.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_classid == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TClassid + _n_classid = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_classid) + end +end +redef class ACastAsExternCall + private init empty_init do end + + init init_acastasexterncall ( + n_from_type: nullable AType, + n_kwas: nullable TKwas, + n_to_type: nullable AType + ) + do + empty_init + _n_from_type = n_from_type.as(not null) + n_from_type.parent = self + _n_kwas = n_kwas.as(not null) + n_kwas.parent = self + _n_to_type = n_to_type.as(not null) + n_to_type.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_from_type == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AType + _n_from_type = new_child + else + abort + end + return + end + if _n_kwas == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwas + _n_kwas = new_child + else + abort + end + return + end + if _n_to_type == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AType + _n_to_type = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_from_type) + v.enter_visit(_n_kwas) + v.enter_visit(_n_to_type) + end +end +redef class AAsNullableExternCall + private init empty_init do end + + init init_aasnullableexterncall ( + n_type: nullable AType, + n_kwas: nullable TKwas, + n_kwnullable: nullable TKwnullable + ) + do + empty_init + _n_type = n_type.as(not null) + n_type.parent = self + _n_kwas = n_kwas.as(not null) + n_kwas.parent = self + _n_kwnullable = n_kwnullable.as(not null) + n_kwnullable.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_type == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AType + _n_type = new_child + else + abort + end + return + end + if _n_kwas == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwas + _n_kwas = new_child + else + abort + end + return + end + if _n_kwnullable == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwnullable + _n_kwnullable = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_type) + v.enter_visit(_n_kwas) + v.enter_visit(_n_kwnullable) + end +end +redef class AAsNotNullableExternCall + private init empty_init do end + + init init_aasnotnullableexterncall ( + n_type: nullable AType, + n_kwas: nullable TKwas, + n_kwnot: nullable TKwnot, + n_kwnullable: nullable TKwnullable + ) + do + empty_init + _n_type = n_type.as(not null) + n_type.parent = self + _n_kwas = n_kwas.as(not null) + n_kwas.parent = self + _n_kwnot = n_kwnot.as(not null) + n_kwnot.parent = self + _n_kwnullable = n_kwnullable.as(not null) + n_kwnullable.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_type == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AType + _n_type = new_child + else + abort + end + return + end + if _n_kwas == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwas + _n_kwas = new_child + else + abort + end + return + end + if _n_kwnot == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwnot + _n_kwnot = new_child + else + abort + end + return + end + if _n_kwnullable == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwnullable + _n_kwnullable = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_type) + v.enter_visit(_n_kwas) + v.enter_visit(_n_kwnot) + v.enter_visit(_n_kwnullable) + end +end +redef class AInLanguage + private init empty_init do end + + init init_ainlanguage ( + n_kwin: nullable TKwin, + n_string: nullable TString + ) + do + empty_init + _n_kwin = n_kwin.as(not null) + n_kwin.parent = self + _n_string = n_string.as(not null) + n_string.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_kwin == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwin + _n_kwin = new_child + else + abort + end + return + end + if _n_string == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TString + _n_string = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_kwin) + v.enter_visit(_n_string) + end +end +redef class AExternCodeBlock + private init empty_init do end + + init init_aexterncodeblock ( + n_in_language: nullable AInLanguage, + n_extern_code_segment: nullable TExternCodeSegment + ) + do + empty_init + _n_in_language = n_in_language + if n_in_language != null then + n_in_language.parent = self + end + _n_extern_code_segment = n_extern_code_segment.as(not null) + n_extern_code_segment.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_in_language == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AInLanguage + _n_in_language = new_child + else + _n_in_language = null + end + return + end + if _n_extern_code_segment == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TExternCodeSegment + _n_extern_code_segment = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + if _n_in_language != null then + v.enter_visit(_n_in_language.as(not null)) + end + v.enter_visit(_n_extern_code_segment) + end +end +redef class AQualified + private init empty_init do end + + init init_aqualified ( + n_id: Collection[Object], # Should be Collection[TId] + n_classid: nullable TClassid + ) + do + empty_init + for n in n_id do + assert n isa TId + _n_id.add(n) + n.parent = self + end + _n_classid = n_classid + if n_classid != null then + n_classid.parent = self + end + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + for i in [0.._n_id.length[ do + if _n_id[i] == old_child then + if new_child != null then + assert new_child isa TId + _n_id[i] = new_child + new_child.parent = self + else + _n_id.remove_at(i) + end + return + end + end + if _n_classid == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TClassid + _n_classid = new_child + else + _n_classid = null + end + return + end + end + + redef fun visit_all(v: Visitor) + do + for n in _n_id do + v.enter_visit(n) + end + if _n_classid != null then + v.enter_visit(_n_classid.as(not null)) + end + end +end +redef class ADoc + private init empty_init do end + + init init_adoc ( + n_comment: Collection[Object] # Should be Collection[TComment] + ) + do + empty_init + for n in n_comment do + assert n isa TComment + _n_comment.add(n) + n.parent = self + end + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + for i in [0.._n_comment.length[ do + if _n_comment[i] == old_child then + if new_child != null then + assert new_child isa TComment + _n_comment[i] = new_child + new_child.parent = self + else + _n_comment.remove_at(i) + end + return + end + end + end + + redef fun visit_all(v: Visitor) + do + for n in _n_comment do + v.enter_visit(n) + end + end +end +redef class AAnnotations + private init empty_init do end + + init init_aannotations ( + n_at: nullable TAt, + n_opar: nullable TOpar, + n_items: Collection[Object], # Should be Collection[AAnnotation] + n_cpar: nullable TCpar + ) + do + empty_init + _n_at = n_at + if n_at != null then + n_at.parent = self + end + _n_opar = n_opar + if n_opar != null then + n_opar.parent = self + end + for n in n_items do + assert n isa AAnnotation + _n_items.add(n) + n.parent = self + end + _n_cpar = n_cpar + if n_cpar != null then + n_cpar.parent = self + end + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_at == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TAt + _n_at = new_child + else + _n_at = null + end + return + end + if _n_opar == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TOpar + _n_opar = new_child + else + _n_opar = null + end + return + end + for i in [0.._n_items.length[ do + if _n_items[i] == old_child then + if new_child != null then + assert new_child isa AAnnotation + _n_items[i] = new_child + new_child.parent = self + else + _n_items.remove_at(i) + end + return + end + end + if _n_cpar == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TCpar + _n_cpar = new_child + else + _n_cpar = null + end + return + end + end + + redef fun visit_all(v: Visitor) + do + if _n_at != null then + v.enter_visit(_n_at.as(not null)) + end + if _n_opar != null then + v.enter_visit(_n_opar.as(not null)) + end + for n in _n_items do + v.enter_visit(n) + end + if _n_cpar != null then + v.enter_visit(_n_cpar.as(not null)) + end + end +end +redef class AAnnotation + private init empty_init do end + + init init_aannotation ( + n_atid: nullable AAtid, + n_opar: nullable TOpar, + n_args: Collection[Object], # Should be Collection[AAtArg] + n_cpar: nullable TCpar, + n_annotations: nullable AAnnotations + ) + do + empty_init + _n_atid = n_atid.as(not null) + n_atid.parent = self + _n_opar = n_opar + if n_opar != null then + n_opar.parent = self + end + for n in n_args do + assert n isa AAtArg + _n_args.add(n) + n.parent = self + end + _n_cpar = n_cpar + if n_cpar != null then + n_cpar.parent = self + end + _n_annotations = n_annotations + if n_annotations != null then + n_annotations.parent = self + end + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_atid == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAtid + _n_atid = new_child + else + abort + end + return + end + if _n_opar == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TOpar + _n_opar = new_child + else + _n_opar = null + end + return + end + for i in [0.._n_args.length[ do + if _n_args[i] == old_child then + if new_child != null then + assert new_child isa AAtArg + _n_args[i] = new_child + new_child.parent = self + else + _n_args.remove_at(i) + end + return + end + end + if _n_cpar == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TCpar + _n_cpar = new_child + else + _n_cpar = null + end + return + end + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + _n_annotations = null + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_atid) + if _n_opar != null then + v.enter_visit(_n_opar.as(not null)) + end + for n in _n_args do v.enter_visit(n) end - if _n_classid != null then - v.enter_visit(_n_classid.as(not null)) + 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 ADoc +redef class ATypeAtArg private init empty_init do end - init init_adoc ( - n_comment: Collection[Object] # Should be Collection[TComment] + init init_atypeatarg ( + n_type: nullable AType ) do empty_init - for n in n_comment do - assert n isa TComment - _n_comment.add(n) - n.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_type == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AType + _n_type = new_child + else + abort + end + return end end + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_type) + end +end +redef class AExprAtArg + private init empty_init do end + + init init_aexpratarg ( + n_expr: nullable AExpr + ) + do + empty_init + _n_expr = n_expr.as(not null) + n_expr.parent = self + end + redef fun replace_child(old_child: ANode, new_child: nullable ANode) do - 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_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 - end + return + end end redef fun visit_all(v: Visitor) do - for n in _n_comment do - v.enter_visit(n) - end + v.enter_visit(_n_expr) end end +redef class AAtAtArg + private init empty_init do end -redef class Start - init( - n_base: nullable AModule, - n_eof: EOF) + init init_aatatarg ( + n_annotations: nullable AAnnotations + ) + do + empty_init + _n_annotations = n_annotations.as(not null) + n_annotations.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_annotations == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AAnnotations + _n_annotations = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_annotations) + end +end +redef class AIdAtid + private init empty_init do end + + init init_aidatid ( + n_id: nullable TId + ) + do + empty_init + _n_id = n_id.as(not null) + n_id.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_id == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TId + _n_id = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_id) + end +end +redef class AKwexternAtid + private init empty_init do end + + init init_akwexternatid ( + n_id: nullable TKwextern + ) + do + empty_init + _n_id = n_id.as(not null) + n_id.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_id == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwextern + _n_id = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_id) + end +end +redef class AKwinternAtid + private init empty_init do end + + init init_akwinternatid ( + n_id: nullable TKwintern + ) + do + empty_init + _n_id = n_id.as(not null) + n_id.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_id == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwintern + _n_id = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_id) + end +end +redef class AKwreadableAtid + private init empty_init do end + + init init_akwreadableatid ( + n_id: nullable TKwreadable + ) + do + empty_init + _n_id = n_id.as(not null) + n_id.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_id == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwreadable + _n_id = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_id) + end +end +redef class AKwwritableAtid + private init empty_init do end + + init init_akwwritableatid ( + n_id: nullable TKwwritable + ) + do + empty_init + _n_id = n_id.as(not null) + n_id.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_id == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwwritable + _n_id = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_id) + end +end +redef class AKwimportAtid + private init empty_init do end + + init init_akwimportatid ( + n_id: nullable TKwimport + ) + do + empty_init + _n_id = n_id.as(not null) + n_id.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_id == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwimport + _n_id = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) do - _n_base = n_base - _n_eof = n_eof + v.enter_visit(_n_id) end +end +redef class Start redef fun replace_child(old_child: ANode, new_child: nullable ANode) do if _n_base == old_child then