X-Git-Url: http://nitlanguage.org diff --git a/src/parser/parser_nodes.nit b/src/parser/parser_nodes.nit index 263169e..4a195df 100644 --- a/src/parser/parser_nodes.nit +++ b/src/parser/parser_nodes.nit @@ -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