X-Git-Url: http://nitlanguage.org?ds=sidebyside diff --git a/src/parser/parser_prod.nit b/src/parser/parser_prod.nit index 847a005..f962adb 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 @@ -150,7 +150,7 @@ redef class AModuledecl init init_amoduledecl ( n_doc: nullable ADoc, n_kwmodule: nullable TKwmodule, - n_id: nullable TId + n_name: nullable AModuleName ) do empty_init @@ -160,8 +160,8 @@ redef class AModuledecl end _n_kwmodule = n_kwmodule.as(not null) n_kwmodule.parent = self - _n_id = n_id.as(not null) - n_id.parent = self + _n_name = n_name.as(not null) + n_name.parent = self end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -186,11 +186,11 @@ redef class AModuledecl 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 @@ -204,7 +204,7 @@ redef class AModuledecl v.enter_visit(_n_doc.as(not null)) end v.enter_visit(_n_kwmodule) - v.enter_visit(_n_id) + v.enter_visit(_n_name) end end redef class AStdImport @@ -213,7 +213,7 @@ redef class AStdImport init init_astdimport ( n_visibility: nullable AVisibility, n_kwimport: nullable TKwimport, - n_id: nullable TId + n_name: nullable AModuleName ) do empty_init @@ -221,8 +221,8 @@ 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 end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -247,11 +247,11 @@ 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 @@ -263,7 +263,7 @@ redef class AStdImport do v.enter_visit(_n_visibility) v.enter_visit(_n_kwimport) - v.enter_visit(_n_id) + v.enter_visit(_n_name) end end redef class ANoImport @@ -445,7 +445,8 @@ redef class AStdClassdef n_id: nullable TClassid, n_formaldefs: Collection[Object], # Should be Collection[AFormaldef] 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 @@ -480,6 +481,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) @@ -570,6 +573,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) @@ -594,6 +607,7 @@ redef class AStdClassdef for n in _n_propdefs do v.enter_visit(n) end + v.enter_visit(_n_kwend) end end redef class ATopClassdef @@ -810,6 +824,37 @@ 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 + ) + do + empty_init + _n_kwextern = n_kwextern.as(not null) + n_kwextern.parent = self + 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 + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_kwextern) + end +end redef class AFormaldef private init empty_init do end @@ -1438,7 +1483,8 @@ 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 ) do empty_init @@ -1462,6 +1508,10 @@ 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 end redef fun replace_child(old_child: ANode, new_child: nullable ANode) @@ -1536,6 +1586,16 @@ 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 end redef fun visit_all(v: Visitor) @@ -1553,6 +1613,9 @@ 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 end end redef class AConcreteMethPropdef @@ -1813,6 +1876,155 @@ redef class AConcreteInitPropdef end end end +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 + ) + 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_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 + 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 + 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 + end +end redef class AMainMethPropdef private init empty_init do end @@ -2709,17 +2921,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 +2955,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 +2977,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 +3013,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 @@ -3063,7 +3311,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 +3321,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 +3341,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 +3358,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 @@ -3834,7 +4100,7 @@ redef class AForExpr init init_aforexpr ( n_kwfor: nullable TKwfor, - n_id: nullable TId, + n_ids: Collection[Object], # Should be Collection[TId] n_expr: nullable AExpr, n_kwdo: nullable TKwdo, n_block: nullable AExpr, @@ -3844,8 +4110,11 @@ redef class AForExpr empty_init _n_kwfor = n_kwfor.as(not null) n_kwfor.parent = self - _n_id = n_id.as(not null) - n_id.parent = self + for n in n_ids do + assert n isa TId + _n_ids.add(n) + n.parent = self + end _n_expr = n_expr.as(not null) n_expr.parent = self _n_kwdo = n_kwdo.as(not null) @@ -3872,16 +4141,18 @@ redef class AForExpr end return end - if _n_id == old_child then - if new_child != null then - new_child.parent = self - assert new_child isa TId - _n_id = new_child - else - abort + 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 - return - end + end if _n_expr == old_child then if new_child != null then new_child.parent = self @@ -3927,7 +4198,9 @@ redef class AForExpr redef fun visit_all(v: Visitor) do v.enter_visit(_n_kwfor) - v.enter_visit(_n_id) + for n in _n_ids do + v.enter_visit(n) + end v.enter_visit(_n_expr) v.enter_visit(_n_kwdo) if _n_block != null then @@ -5092,7 +5365,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 @@ -5104,11 +5377,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) @@ -5143,18 +5413,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) @@ -5164,9 +5432,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 @@ -5366,7 +5632,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 @@ -5375,11 +5641,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) @@ -5409,18 +5672,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 @@ -5439,9 +5700,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 @@ -5453,7 +5712,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 ) @@ -5463,11 +5722,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) @@ -5496,18 +5752,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 @@ -5534,9 +5788,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 @@ -5547,7 +5799,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 ) @@ -5557,11 +5809,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) @@ -5590,18 +5839,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 @@ -5628,9 +5875,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 @@ -5641,7 +5886,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 @@ -5651,11 +5896,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) @@ -5680,18 +5922,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) @@ -5700,9 +5940,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 @@ -5711,7 +5949,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 @@ -5719,11 +5957,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) @@ -5748,27 +5983,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 @@ -5776,18 +6007,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) @@ -5807,18 +6035,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 @@ -5836,9 +6062,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 @@ -5849,7 +6073,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 ) @@ -5857,11 +6081,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) @@ -5880,18 +6101,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 @@ -5917,9 +6136,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 @@ -5929,7 +6146,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 ) @@ -5937,11 +6154,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) @@ -5960,18 +6174,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 @@ -5997,9 +6209,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 @@ -6009,18 +6219,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) @@ -6040,18 +6247,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 @@ -6069,9 +6274,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 @@ -6275,19 +6478,35 @@ 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 ) 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 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 @@ -6308,31 +6527,59 @@ 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 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) 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 ) 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 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 @@ -6353,50 +6600,55 @@ 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 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) 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 ) do empty_init - for n in n_exprs do - assert n isa AExpr - _n_exprs.add(n) - n.parent = self - end + _n_exprs = n_exprs.as(not null) + n_exprs.parent = self 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 + 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 + 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) end end redef class ASelfExpr @@ -6798,16 +7050,32 @@ 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 ) 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 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 @@ -6818,11 +7086,23 @@ 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 end redef fun visit_all(v: Visitor) do + v.enter_visit(_n_opar) v.enter_visit(_n_expr) + v.enter_visit(_n_cpar) end end redef class AAsCastExpr @@ -6831,7 +7111,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 @@ -6839,8 +7121,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) @@ -6865,6 +7151,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 @@ -6875,13 +7171,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 @@ -6890,8 +7198,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 @@ -6899,10 +7209,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) @@ -6927,6 +7241,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 @@ -6947,14 +7271,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 @@ -7016,25 +7352,64 @@ redef class AIssetAttrExpr v.enter_visit(_n_id) end end -redef class APlusAssignOp +redef class ADebugTypeExpr private init empty_init do end - init init_aplusassignop ( - n_pluseq: nullable TPluseq + init init_adebugtypeexpr ( + n_kwdebug: nullable TKwdebug, + n_kwtype: nullable TKwtype, + n_expr: nullable AExpr, + n_type: nullable AType ) do empty_init - _n_pluseq = n_pluseq.as(not null) - n_pluseq.parent = self + _n_kwdebug = n_kwdebug.as(not null) + n_kwdebug.parent = self + _n_kwtype = n_kwtype.as(not null) + n_kwtype.parent = self + _n_expr = n_expr.as(not null) + n_expr.parent = self + _n_type = n_type.as(not null) + n_type.parent = self end redef fun replace_child(old_child: ANode, new_child: nullable ANode) do - if _n_pluseq == old_child then + if _n_kwdebug == old_child then if new_child != null then new_child.parent = self - assert new_child isa TPluseq - _n_pluseq = new_child + assert new_child isa TKwdebug + _n_kwdebug = new_child + else + abort + end + return + end + if _n_kwtype == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwtype + _n_kwtype = new_child + else + abort + end + return + end + if _n_expr == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AExpr + _n_expr = new_child + else + abort + end + return + end + if _n_type == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AType + _n_type = new_child else abort end @@ -7044,137 +7419,102 @@ redef class APlusAssignOp redef fun visit_all(v: Visitor) do - v.enter_visit(_n_pluseq) + v.enter_visit(_n_kwdebug) + v.enter_visit(_n_kwtype) + v.enter_visit(_n_expr) + v.enter_visit(_n_type) end end -redef class AMinusAssignOp +redef class AListExprs private init empty_init do end - init init_aminusassignop ( - n_minuseq: nullable TMinuseq + init init_alistexprs ( + n_exprs: Collection[Object] # Should be Collection[AExpr] ) do empty_init - _n_minuseq = n_minuseq.as(not null) - n_minuseq.parent = self + for n in n_exprs do + assert n isa AExpr + _n_exprs.add(n) + n.parent = self + end end redef fun replace_child(old_child: ANode, new_child: nullable ANode) do - if _n_minuseq == old_child then - if new_child != null then - new_child.parent = self - assert new_child isa TMinuseq - _n_minuseq = new_child - else - abort + for i in [0.._n_exprs.length[ do + if _n_exprs[i] == old_child then + if new_child != null then + assert new_child isa AExpr + _n_exprs[i] = new_child + new_child.parent = self + else + _n_exprs.remove_at(i) + end + return end - return - end + end end redef fun visit_all(v: Visitor) do - v.enter_visit(_n_minuseq) + for n in _n_exprs do + v.enter_visit(n) + end end end -redef class AClosureDef +redef class AParExprs private init empty_init do end - init init_aclosuredef ( - n_bang: nullable TBang, - n_id: nullable AClosureId, - n_ids: Collection[Object], # Should be Collection[TId] - n_kwdo: nullable TKwdo, - n_expr: nullable AExpr, - n_label: nullable ALabel + init init_aparexprs ( + n_opar: nullable TOpar, + n_exprs: Collection[Object], # Should be Collection[AExpr] + n_cpar: nullable TCpar ) do empty_init - _n_bang = n_bang.as(not null) - n_bang.parent = self - _n_id = n_id.as(not null) - n_id.parent = self - for n in n_ids do - assert n isa TId - _n_ids.add(n) + _n_opar = n_opar.as(not null) + n_opar.parent = self + for n in n_exprs do + assert n isa AExpr + _n_exprs.add(n) n.parent = self end - _n_kwdo = n_kwdo - if n_kwdo != null then - n_kwdo.parent = self - end - _n_expr = n_expr - if n_expr != null then - n_expr.parent = self - end - _n_label = n_label - if n_label != null then - n_label.parent = self - end + _n_cpar = n_cpar.as(not null) + n_cpar.parent = self end redef fun replace_child(old_child: ANode, new_child: nullable ANode) do - if _n_bang == old_child then - if new_child != null then - new_child.parent = self - assert new_child isa TBang - _n_bang = new_child - else - abort - end - return - end - if _n_id == old_child then + if _n_opar == old_child then if new_child != null then new_child.parent = self - assert new_child isa AClosureId - _n_id = new_child + assert new_child isa TOpar + _n_opar = new_child else abort end return end - for i in [0.._n_ids.length[ do - if _n_ids[i] == old_child then + for i in [0.._n_exprs.length[ do + if _n_exprs[i] == old_child then if new_child != null then - assert new_child isa TId - _n_ids[i] = new_child + assert new_child isa AExpr + _n_exprs[i] = new_child new_child.parent = self else - _n_ids.remove_at(i) + _n_exprs.remove_at(i) end return end end - if _n_kwdo == old_child then - if new_child != null then - new_child.parent = self - assert new_child isa TKwdo - _n_kwdo = new_child - else - _n_kwdo = null - end - return - end - if _n_expr == old_child then + if _n_cpar == old_child then if new_child != null then new_child.parent = self - assert new_child isa AExpr - _n_expr = new_child - else - _n_expr = null - end - return - end - if _n_label == old_child then - if new_child != null then - new_child.parent = self - assert new_child isa ALabel - _n_label = new_child + assert new_child isa TCpar + _n_cpar = new_child else - _n_label = null + abort end return end @@ -7182,42 +7522,512 @@ redef class AClosureDef redef fun visit_all(v: Visitor) do - v.enter_visit(_n_bang) - v.enter_visit(_n_id) - for n in _n_ids do + v.enter_visit(_n_opar) + for n in _n_exprs do v.enter_visit(n) end - if _n_kwdo != null then - v.enter_visit(_n_kwdo.as(not null)) - end - if _n_expr != null then - v.enter_visit(_n_expr.as(not null)) - end - if _n_label != null then - v.enter_visit(_n_label.as(not null)) - end + v.enter_visit(_n_cpar) end end -redef class ASimpleClosureId +redef class ABraExprs private init empty_init do end - init init_asimpleclosureid ( - n_id: nullable TId + init init_abraexprs ( + n_obra: nullable TObra, + n_exprs: Collection[Object], # Should be Collection[AExpr] + n_cbra: nullable TCbra ) do empty_init - _n_id = n_id.as(not null) - n_id.parent = self + _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_id == old_child then + if _n_obra == old_child then if new_child != null then new_child.parent = self - assert new_child isa TId - _n_id = new_child - else + 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 + 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 visit_all(v: Visitor) + do + v.enter_visit(_n_minuseq) + end +end +redef class AClosureDef + private init empty_init do end + + init init_aclosuredef ( + n_bang: nullable TBang, + n_id: nullable AClosureId, + n_ids: Collection[Object], # Should be Collection[TId] + n_kwdo: nullable TKwdo, + n_expr: nullable AExpr, + n_label: nullable ALabel + ) + do + empty_init + _n_bang = n_bang.as(not null) + n_bang.parent = self + _n_id = n_id.as(not null) + n_id.parent = self + for n in n_ids do + assert n isa TId + _n_ids.add(n) + n.parent = self + end + _n_kwdo = n_kwdo + if n_kwdo != null then + n_kwdo.parent = self + end + _n_expr = n_expr + if n_expr != null then + n_expr.parent = self + end + _n_label = n_label + if n_label != null then + n_label.parent = self + end + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_bang == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TBang + _n_bang = new_child + else + abort + end + return + end + if _n_id == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AClosureId + _n_id = new_child + else + abort + end + return + end + for i in [0.._n_ids.length[ do + if _n_ids[i] == old_child then + if new_child != null then + assert new_child isa TId + _n_ids[i] = new_child + new_child.parent = self + else + _n_ids.remove_at(i) + end + return + end + end + if _n_kwdo == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwdo + _n_kwdo = new_child + else + _n_kwdo = null + end + return + end + if _n_expr == old_child then + if 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_bang) + v.enter_visit(_n_id) + for n in _n_ids do + v.enter_visit(n) + end + if _n_kwdo != null then + v.enter_visit(_n_kwdo.as(not null)) + end + if _n_expr != null then + v.enter_visit(_n_expr.as(not null)) + end + if _n_label != null then + v.enter_visit(_n_label.as(not null)) + end + end +end +redef class ASimpleClosureId + private init empty_init do end + + init init_asimpleclosureid ( + 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 ABreakClosureId + private init empty_init do end + + init init_abreakclosureid ( + n_kwbreak: nullable TKwbreak + ) + do + empty_init + _n_kwbreak = n_kwbreak.as(not null) + n_kwbreak.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_kwbreak == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwbreak + _n_kwbreak = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_kwbreak) + end +end +redef class AModuleName + private init empty_init do end + + init init_amodulename ( + n_quad: nullable TQuad, + n_path: Collection[Object], # Should be Collection[TId] + n_id: nullable TId + ) + do + empty_init + _n_quad = n_quad + if n_quad != null then + n_quad.parent = self + end + for n in n_path do + assert n isa TId + _n_path.add(n) + n.parent = self + end + _n_id = n_id.as(not null) + n_id.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_quad == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TQuad + _n_quad = new_child + else + _n_quad = null + end + return + end + for i in [0.._n_path.length[ do + if _n_path[i] == old_child then + if new_child != null then + assert new_child isa TId + _n_path[i] = new_child + new_child.parent = self + else + _n_path.remove_at(i) + end + return + end + end + if _n_id == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TId + _n_id = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + if _n_quad != null then + v.enter_visit(_n_quad.as(not null)) + end + for n in _n_path do + v.enter_visit(n) + end + v.enter_visit(_n_id) + end +end +redef class AExternCalls + private init empty_init do end + + init init_aexterncalls ( + n_kwimport: nullable TKwimport, + n_extern_calls: Collection[Object] # Should be Collection[AExternCall] + ) + do + empty_init + _n_kwimport = n_kwimport.as(not null) + n_kwimport.parent = self + for n in n_extern_calls do + assert n isa AExternCall + _n_extern_calls.add(n) + n.parent = self + end + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_kwimport == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwimport + _n_kwimport = new_child + else + abort + end + return + end + for i in [0.._n_extern_calls.length[ do + if _n_extern_calls[i] == old_child then + if new_child != null then + assert new_child isa AExternCall + _n_extern_calls[i] = new_child + new_child.parent = self + else + _n_extern_calls.remove_at(i) + end + return + end + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_kwimport) + for n in _n_extern_calls do + v.enter_visit(n) + end + end +end +redef class AExternCall + private init empty_init do end + + init init_aexterncall + do + empty_init + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + end + + redef fun visit_all(v: Visitor) + do + end +end +redef class ASuperExternCall + private init empty_init do end + + init init_asuperexterncall ( + n_kwsuper: nullable TKwsuper + ) + do + empty_init + _n_kwsuper = n_kwsuper.as(not null) + n_kwsuper.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_kwsuper == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa TKwsuper + _n_kwsuper = new_child + else + abort + end + return + end + end + + redef fun visit_all(v: Visitor) + do + v.enter_visit(_n_kwsuper) + end +end +redef class ALocalPropExternCall + private init empty_init do end + + init init_alocalpropexterncall ( + n_methid: nullable AMethid + ) + do + empty_init + _n_methid = n_methid.as(not null) + n_methid.parent = self + end + + redef fun replace_child(old_child: ANode, new_child: nullable ANode) + do + if _n_methid == old_child then + if new_child != null then + new_child.parent = self + assert new_child isa AMethid + _n_methid = new_child + else abort end return @@ -7226,28 +8036,56 @@ redef class ASimpleClosureId redef fun visit_all(v: Visitor) do - v.enter_visit(_n_id) + v.enter_visit(_n_methid) end end -redef class ABreakClosureId +redef class AFullPropExternCall private init empty_init do end - init init_abreakclosureid ( - n_kwbreak: nullable TKwbreak + init init_afullpropexterncall ( + n_classid: nullable TClassid, + n_quad: nullable TQuad, + n_methid: nullable AMethid ) do empty_init - _n_kwbreak = n_kwbreak.as(not null) - n_kwbreak.parent = self + _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_kwbreak == old_child then + if _n_classid == old_child then if new_child != null then new_child.parent = self - assert new_child isa TKwbreak - _n_kwbreak = new_child + assert new_child isa 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 @@ -7257,7 +8095,233 @@ redef class ABreakClosureId redef fun visit_all(v: Visitor) do - v.enter_visit(_n_kwbreak) + 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 AQualified @@ -7356,14 +8420,6 @@ redef class ADoc 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