src: remove remaining references of subclasses on AMethPropdef
[nit.git] / src / parser / parser_nodes.nit
index 263169e..4a195df 100644 (file)
@@ -132,6 +132,40 @@ class ANodes[E: ANode]
                assert e.parent == parent
                e.parent = null
        end
+
+       # Used in parent contructor to fill elements
+       private fun unsafe_add_all(nodes: Collection[Object])
+       do
+               var parent = self.parent
+               for n in nodes do
+                       assert n isa E
+                       add n
+                       n.parent = parent
+               end
+       end
+
+       private fun replace_child(old_child: ANode, new_child: nullable ANode): Bool
+       do
+               var parent = self.parent
+               for i in [0..length[ do
+                       if self[i] == old_child then
+                               if new_child != null then
+                                       assert new_child isa E
+                                       self[i] = new_child
+                                       new_child.parent = parent
+                               else
+                                       self.remove_at(i)
+                               end
+                               return true
+                       end
+               end
+               return false
+       end
+
+       private fun visit_all(v: Visitor)
+       do
+               for n in self do v.enter_visit(n)
+       end
 end
 
 # Ancestor of all tokens
@@ -223,6 +257,9 @@ abstract class TokenKeyword
                return "keyword '{text}'"
        end
 end
+class TKwpackage
+       super TokenKeyword
+end
 class TKwmodule
        super TokenKeyword
 end
@@ -277,6 +314,9 @@ end
 class TKwextern
        super TokenKeyword
 end
+class TKwpublic
+       super TokenKeyword
+end
 class TKwprotected
        super TokenKeyword
 end
@@ -508,6 +548,9 @@ end
 class TNumber
        super TokenLiteral
 end
+class THexNumber
+       super TokenLiteral
+end
 class TFloat
        super TokenLiteral
 end
@@ -711,14 +754,14 @@ end
 abstract class APropdef
        super Prod
        readable writable var _n_doc: nullable ADoc = null
+       readable writable var _n_kwredef: nullable TKwredef = null
+       readable writable var _n_visibility: nullable AVisibility = null
 end
 
 # A definition of an attribute
 # For historical reason, old-syle and new-style attributes use the same `ANode` sub-class
 class AAttrPropdef
        super APropdef
-       readable writable var _n_kwredef: nullable TKwredef = null
-       readable writable var _n_visibility: AVisibility
        readable writable var _n_kwvar: TKwvar
 
        # The identifier for an old-style attribute (null if new-style)
@@ -742,14 +785,23 @@ end
 # A definition of all kind of method (including constructors)
 abstract class AMethPropdef
        super APropdef
-       readable writable var _n_kwredef: nullable TKwredef = null
-       readable writable var _n_visibility: nullable AVisibility
+       readable writable var _n_kwmeth: nullable TKwmeth
+       readable writable var _n_kwinit: nullable TKwinit
+       readable writable var _n_kwnew: nullable TKwnew
        readable writable var _n_methid: nullable AMethid = null
        readable writable var _n_signature: nullable ASignature
+       readable writable var _n_block: nullable AExpr = null
+       readable writable var _n_extern: nullable TString = null
+       readable writable var _n_extern_calls: nullable AExternCalls = null
+       readable writable var _n_extern_code_block: nullable AExternCodeBlock = null
        redef fun hot_location
        do
                if n_methid != null then
                        return n_methid.location
+               else if n_kwinit != null then
+                       return n_kwinit.location
+               else if n_kwnew != null then
+                       return n_kwnew.location
                else
                        return location
                end
@@ -760,34 +812,26 @@ end
 # *deferred* is a old synonynmous of *abstract* that comes from PRM, that comes from Eiffel.
 class ADeferredMethPropdef
        super AMethPropdef
-       readable writable var _n_kwmeth: TKwmeth
 end
 
 # A method marked intern
 class AInternMethPropdef
        super AMethPropdef
-       readable writable var _n_kwmeth: TKwmeth
 end
 
 # A method of a constructor marked extern
 abstract class AExternPropdef
        super AMethPropdef
-       readable writable var _n_extern: nullable TString = null
-       readable writable var _n_extern_calls: nullable AExternCalls = null
-       readable writable var _n_extern_code_block: nullable AExternCodeBlock = null
 end
 
 # A method marked extern
 class AExternMethPropdef
        super AExternPropdef
-       readable writable var _n_kwmeth: TKwmeth
 end
 
 # A method with a body
 class AConcreteMethPropdef
        super AMethPropdef
-       readable writable var _n_kwmeth: nullable TKwmeth
-       readable writable var _n_block: nullable AExpr = null
 end
 
 # A constructor
@@ -799,15 +843,12 @@ end
 class AConcreteInitPropdef
        super AConcreteMethPropdef
        super AInitPropdef
-       readable writable var _n_kwinit: TKwinit
-       redef fun hot_location do return n_kwinit.location
 end
 
 # A constructor marked extern (defined with the `new` keyword)
 class AExternInitPropdef
        super AExternPropdef
        super AInitPropdef
-       readable writable var _n_kwnew: TKwnew
 end
 
 # The implicit main method
@@ -833,13 +874,13 @@ class ALocalPropExternCall
 end
 class AFullPropExternCall
        super APropExternCall
-       readable writable var _n_classid: TClassid
-       readable writable var _n_quad: nullable TQuad = null
+       readable writable var _n_type: AType
+       readable writable var _n_dot: nullable TDot = null
        readable writable var _n_methid: AMethid
 end
 class AInitPropExternCall
        super APropExternCall
-       readable writable var _n_classid: TClassid
+       readable writable var _n_type: AType
 end
 class ASuperExternCall
        super AExternCall
@@ -851,6 +892,7 @@ end
 class ACastAsExternCall
        super ACastExternCall
        readable writable var _n_from_type: AType
+       readable writable var _n_dot: nullable TDot = null
        readable writable var _n_kwas: TKwas
        readable writable var _n_to_type: AType
 end
@@ -871,8 +913,6 @@ end
 # A definition of a virtual type
 class ATypePropdef
        super APropdef
-       readable writable var _n_kwredef: nullable TKwredef = null
-       readable writable var _n_visibility: AVisibility
        readable writable var _n_kwtype: TKwtype
        readable writable var _n_id: TClassid
        readable writable var _n_type: AType
@@ -986,7 +1026,6 @@ class ASignature
        readable var _n_params: ANodes[AParam] = new ANodes[AParam](self)
        readable writable var _n_cpar: nullable TCpar = null
        readable writable var _n_type: nullable AType = null
-       readable var _n_closure_decls: ANodes[AClosureDecl] = new ANodes[AClosureDecl](self)
 end
 
 # A parameter definition in a signature. eg `x:X`
@@ -997,15 +1036,6 @@ class AParam
        readable writable var _n_dotdotdot: nullable TDotdotdot = null
 end
 
-class AClosureDecl
-       super Prod
-       readable writable var _n_kwbreak: nullable TKwbreak = null
-       readable writable var _n_bang: TBang
-       readable writable var _n_id: TId
-       readable writable var _n_signature: ASignature
-       readable writable var _n_expr: nullable AExpr = null
-end
-
 # A static type. eg `nullable X[Y]`
 class AType
        super Prod
@@ -1178,7 +1208,6 @@ abstract class ASendExpr
        super AExpr
        # The receiver of the method invocation
        readable writable var _n_expr: AExpr
-       readable var _n_closure_defs: ANodes[AClosureDef] = new ANodes[AClosureDef](self)
 end
 
 # A binary operation on a method
@@ -1234,13 +1263,6 @@ class AEqExpr
        super ABinopExpr
 end
 
-# A `is` expression
-class AEeExpr
-       super ABoolExpr
-       readable writable var _n_expr: AExpr
-       readable writable var _n_expr2: AExpr
-end
-
 # A `!=` expression
 class ANeExpr
        super ABinopExpr
@@ -1443,13 +1465,6 @@ class ABraReassignExpr
        super ASendReassignFormExpr
 end
 
-class AClosureCallExpr
-       super AExpr
-       readable writable var _n_id: TId
-       readable writable var _n_args: AExprs
-       readable var _n_closure_defs: ANodes[AClosureDef] = new ANodes[AClosureDef](self)
-end
-
 # A local variable read access.
 # The parser cannot instantiate them, see `ACallExpr`.
 class AVarExpr
@@ -1526,8 +1541,17 @@ end
 # An integer literal
 class AIntExpr
        super AExpr
+end
+# An integer literal in decimal format
+class ADecIntExpr
+       super AIntExpr
        readable writable var _n_number: TNumber
 end
+# An integer literal in hexadecimal format
+class AHexIntExpr
+       super AIntExpr
+       readable writable var _n_hex_number: THexNumber
+end
 # A float literal
 class AFloatExpr
        super AExpr
@@ -1589,9 +1613,9 @@ class AAsCastExpr
        super AExpr
        readable writable var _n_expr: AExpr
        readable writable var _n_kwas: TKwas
-       readable writable var _n_opar: TOpar
+       readable writable var _n_opar: nullable TOpar = null
        readable writable var _n_type: AType
-       readable writable var _n_cpar: TCpar
+       readable writable var _n_cpar: nullable TCpar = null
 end
 
 # A as-not-null cast. eg `x.as(not null)`
@@ -1599,10 +1623,10 @@ class AAsNotnullExpr
        super AExpr
        readable writable var _n_expr: AExpr
        readable writable var _n_kwas: TKwas
-       readable writable var _n_opar: TOpar
+       readable writable var _n_opar: nullable TOpar = null
        readable writable var _n_kwnot: TKwnot
        readable writable var _n_kwnull: TKwnull
-       readable writable var _n_cpar: TCpar
+       readable writable var _n_cpar: nullable TCpar = null
 end
 
 # A is-set check of old-style attributes. eg `isset x._a`
@@ -1657,26 +1681,6 @@ class AMinusAssignOp
        readable writable var _n_minuseq: TMinuseq
 end
 
-class AClosureDef
-       super ALabelable
-       readable writable var _n_bang: TBang
-       readable writable var _n_id: AClosureId
-       readable var _n_ids: ANodes[TId] = new ANodes[TId](self)
-       readable writable var _n_kwdo: nullable TKwdo = null
-       readable writable var _n_expr: nullable AExpr = null
-       redef fun hot_location do return n_id.location
-end
-abstract class AClosureId
-       super Prod
-end
-class ASimpleClosureId
-       super AClosureId
-       readable writable var _n_id: TId
-end
-class ABreakClosureId
-       super AClosureId
-       readable writable var _n_kwbreak: TKwbreak
-end
 class AModuleName
        super Prod
        readable writable var _n_quad: nullable TQuad = null