X-Git-Url: http://nitlanguage.org diff --git a/src/parser/parser_nodes.nit b/src/parser/parser_nodes.nit index 295aaf2..21c6dcd 100644 --- a/src/parser/parser_nodes.nit +++ b/src/parser/parser_nodes.nit @@ -32,13 +32,65 @@ abstract class ANode # Display a message for the colored location of the node fun debug(message: String) do - print "{hot_location} {self.class_name}: {message}\n{hot_location.colored_line("0;32")}" + sys.stderr.write "{hot_location} {self.class_name}: {message}\n{hot_location.colored_line("0;32")}\n" end # Parent of the node in the AST var parent: nullable ANode = null - # Protect form invalid instantiation of nodes + # The topmost ancestor of the element + # This just apply `parent` until the first one + fun root: ANode + do + var res = self + loop + var p = res.parent + if p == null then return res + res = p + end + end + + # The most specific common parent between `self` and `other` + # Return null if the two node are unrelated (distinct root) + fun common_parent(other: ANode): nullable ANode + do + # First, get the same depth + var s: nullable ANode = self + var o: nullable ANode = other + var d = s.depth - o.depth + while d > 0 do + s = s.parent + d -= 1 + end + while d < 0 do + o = o.parent + d += 1 + end + assert o.depth == s.depth + # Second, go up until same in found + while s != o do + s = s.parent + o = o.parent + end + return s + end + + # Number of nodes between `self` and the `root` of the AST + # ENSURE `self == self.root implies result == 0 ` + # ENSURE `self != self.root implies result == self.parent.depth + 1` + fun depth: Int + do + var n = self + var res = 0 + loop + var p = n.parent + if p == null then return res + n = p + res += 1 + end + end + + # Protect from invalid instantiation of nodes private init do end # Replace a child with an other node in the AST @@ -132,6 +184,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 @@ -145,11 +231,20 @@ abstract class Token # The previous token in the Lexer. # May have disapeared in the AST - var prev_token: nullable Token + var prev_token: nullable Token = null # The next token in the Lexer. # May have disapeared in the AST - var next_token: nullable Token + var next_token: nullable Token = null + + # The verbatim blank text between `prev_token` and `self` + fun blank_before: String + do + if prev_token == null then return "" + var from = prev_token.location.pend+1 + var to = location.pstart + return location.file.string.substring(from,to-from) + end redef fun to_s: String do return "'{text}'" @@ -159,6 +254,16 @@ abstract class Token redef fun replace_child(old_child: ANode, new_child: nullable ANode) do end end +redef class SourceFile + # The first token parser by the lexer + # May have disapeared in the final AST + var first_token: nullable Token = null + + # The first token parser by the lexer + # May have disapeared in the final AST + var last_token: nullable Token = null +end + # Ancestor of all productions # A production is a node without text but that usually has children. abstract class Prod @@ -280,6 +385,9 @@ end class TKwextern super TokenKeyword end +class TKwpublic + super TokenKeyword +end class TKwprotected super TokenKeyword end @@ -416,13 +524,13 @@ class TMinuseq super TokenOperator end class TDotdotdot - super TokenOperator + super Token end class TDotdot - super TokenOperator + super Token end class TDot - super TokenOperator + super Token end class TPlus super TokenOperator @@ -511,6 +619,9 @@ end class TNumber super TokenLiteral end +class THexNumber + super TokenLiteral +end class TFloat super TokenLiteral end @@ -580,6 +691,7 @@ class AModule readable var _n_imports: ANodes[AImport] = new ANodes[AImport](self) readable var _n_extern_code_blocks: ANodes[AExternCodeBlock] = new ANodes[AExternCodeBlock](self) readable var _n_classdefs: ANodes[AClassdef] = new ANodes[AClassdef](self) + init do end end # The declaration of the module with the documentation, name, and annotations @@ -588,6 +700,7 @@ class AModuledecl readable writable var _n_doc: nullable ADoc = null readable writable var _n_kwmodule: TKwmodule readable writable var _n_name: AModuleName + init do end end # A import clause of a module @@ -601,6 +714,7 @@ class AStdImport readable writable var _n_visibility: AVisibility readable writable var _n_kwimport: TKwimport readable writable var _n_name: AModuleName + init do end end # The special import clause of the kernel module. eg `import end` @@ -609,6 +723,7 @@ class ANoImport readable writable var _n_visibility: AVisibility readable writable var _n_kwimport: TKwimport readable writable var _n_kwend: TKwend + init do end end # A visibility modifier @@ -626,21 +741,26 @@ end class APrivateVisibility super AVisibility readable writable var _n_kwprivate: TKwprivate + init do end end class AProtectedVisibility super AVisibility readable writable var _n_kwprotected: TKwprotected + init do end end class AIntrudeVisibility super AVisibility readable writable var _n_kwintrude: TKwintrude + init do end end # A class definition # While most definition are `AStdClassdef` # There is tow special case of class definition -abstract class AClassdef super Prod +abstract class AClassdef + super Prod readable var _n_propdefs: ANodes[APropdef] = new ANodes[APropdef](self) + init do end end # A standard class definition with a name, superclasses and properties @@ -656,6 +776,7 @@ class AStdClassdef readable var _n_superclasses: ANodes[ASuperclass] = new ANodes[ASuperclass](self) readable writable var _n_kwend: TKwend redef fun hot_location do return n_id.location + init do end end # The implicit class definition of the implicit main method @@ -675,24 +796,29 @@ end class AConcreteClasskind super AClasskind readable writable var _n_kwclass: TKwclass + init do end end class AAbstractClasskind super AClasskind readable writable var _n_kwabstract: TKwabstract readable writable var _n_kwclass: TKwclass + init do end end class AInterfaceClasskind super AClasskind readable writable var _n_kwinterface: TKwinterface + init do end end class AEnumClasskind super AClasskind readable writable var _n_kwenum: TKwenum + init do end end class AExternClasskind super AClasskind readable writable var _n_kwextern: TKwextern readable writable var _n_kwclass: nullable TKwclass = null + init do end end # The definition of a formal generic parameter type. eg `X: Y` @@ -701,6 +827,7 @@ class AFormaldef readable writable var _n_id: TClassid # The bound of the parameter type readable writable var _n_type: nullable AType = null + init do end end # A super-class. eg `super X` @@ -708,20 +835,21 @@ class ASuperclass super Prod readable writable var _n_kwsuper: TKwsuper readable writable var _n_type: AType + init do end end # The definition of a property 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) @@ -740,19 +868,29 @@ class AAttrPropdef do if n_id != null then return n_id.location else return n_id2.location end + init do end 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 = null + readable writable var _n_kwinit: nullable TKwinit = null + readable writable var _n_kwnew: nullable TKwnew = null readable writable var _n_methid: nullable AMethid = null - readable writable var _n_signature: nullable ASignature + readable writable var _n_signature: nullable ASignature = null + 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 @@ -763,34 +901,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 @@ -802,15 +932,17 @@ end class AConcreteInitPropdef super AConcreteMethPropdef super AInitPropdef - readable writable var _n_kwinit: TKwinit - redef fun hot_location do return n_kwinit.location +end + +class AInternNewPropdef + super AInternMethPropdef + super AInitPropdef 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 @@ -823,6 +955,7 @@ class AExternCalls super Prod readable writable var _n_kwimport: TKwimport readable var _n_extern_calls: ANodes[AExternCall] = new ANodes[AExternCall](self) + init do end end abstract class AExternCall super Prod @@ -833,20 +966,24 @@ end class ALocalPropExternCall super APropExternCall readable writable var _n_methid: AMethid + init do end end class AFullPropExternCall super APropExternCall readable writable var _n_type: AType readable writable var _n_dot: nullable TDot = null readable writable var _n_methid: AMethid + init do end end class AInitPropExternCall super APropExternCall readable writable var _n_type: AType + init do end end class ASuperExternCall super AExternCall readable writable var _n_kwsuper: TKwsuper + init do end end abstract class ACastExternCall super AExternCall @@ -857,12 +994,14 @@ class ACastAsExternCall readable writable var _n_dot: nullable TDot = null readable writable var _n_kwas: TKwas readable writable var _n_to_type: AType + init do end end class AAsNullableExternCall super ACastExternCall readable writable var _n_type: AType readable writable var _n_kwas: TKwas readable writable var _n_kwnullable: TKwnullable + init do end end class AAsNotNullableExternCall super ACastExternCall @@ -870,16 +1009,16 @@ class AAsNotNullableExternCall readable writable var _n_kwas: TKwas readable writable var _n_kwnot: TKwnot readable writable var _n_kwnullable: TKwnullable + init do end 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 + init do end end # A `writable` or `readable` modifier @@ -887,18 +1026,21 @@ abstract class AAble super Prod readable writable var _n_visibility: nullable AVisibility = null readable writable var _n_kwredef: nullable TKwredef = null + init do end end # A `readable` modifier class AReadAble super AAble readable writable var _n_kwreadable: TKwreadable + init do end end # A `writable` modifier class AWriteAble super AAble readable writable var _n_kwwritable: TKwwritable + init do end end # The identifier of a method in a method declaration. @@ -909,78 +1051,96 @@ end class AIdMethid super AMethid readable writable var _n_id: TId + init do end end class APlusMethid super AMethid readable writable var _n_plus: TPlus + init do end end class AMinusMethid super AMethid readable writable var _n_minus: TMinus + init do end end class AStarMethid super AMethid readable writable var _n_star: TStar + init do end end class ASlashMethid super AMethid readable writable var _n_slash: TSlash + init do end end class APercentMethid super AMethid readable writable var _n_percent: TPercent + init do end end class AEqMethid super AMethid readable writable var _n_eq: TEq + init do end end class ANeMethid super AMethid readable writable var _n_ne: TNe + init do end end class ALeMethid super AMethid readable writable var _n_le: TLe + init do end end class AGeMethid super AMethid readable writable var _n_ge: TGe + init do end end class ALtMethid super AMethid readable writable var _n_lt: TLt + init do end end class AGtMethid super AMethid readable writable var _n_gt: TGt + init do end end class ALlMethid super AMethid readable writable var _n_ll: TLl + init do end end class AGgMethid super AMethid readable writable var _n_gg: TGg + init do end end class ABraMethid super AMethid readable writable var _n_obra: TObra readable writable var _n_cbra: TCbra + init do end end class AStarshipMethid super AMethid readable writable var _n_starship: TStarship + init do end end class AAssignMethid super AMethid readable writable var _n_id: TId readable writable var _n_assign: TAssign + init do end end class ABraassignMethid super AMethid readable writable var _n_obra: TObra readable writable var _n_cbra: TCbra readable writable var _n_assign: TAssign + init do end end # A signature in a method definition. eg `(x,y:X,z:Z):T` @@ -990,6 +1150,7 @@ 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 + init do end end # A parameter definition in a signature. eg `x:X` @@ -998,6 +1159,7 @@ class AParam readable writable var _n_id: TId readable writable var _n_type: nullable AType = null readable writable var _n_dotdotdot: nullable TDotdotdot = null + init do end end # A static type. eg `nullable X[Y]` @@ -1010,6 +1172,7 @@ class AType # Type arguments for a generic type readable var _n_types: ANodes[AType] = new ANodes[AType](self) + init do end end # A label at the end of a block or in a break/continue statement. eg `label x` @@ -1017,6 +1180,7 @@ class ALabel super Prod readable writable var _n_kwlabel: TKwlabel readable writable var _n_id: TId + init do end end # Expression and statements @@ -1031,6 +1195,7 @@ class ABlockExpr super AExpr readable var _n_expr: ANodes[AExpr] = new ANodes[AExpr](self) readable writable var _n_kwend: nullable TKwend = null + init do end end # A declaration of a local variable. eg `var x: X = y` @@ -1043,6 +1208,7 @@ class AVardeclExpr # The initial value, if any readable writable var _n_expr: nullable AExpr = null + init do end end # A `return` statement. eg `return x` @@ -1050,12 +1216,14 @@ class AReturnExpr super AExpr readable writable var _n_kwreturn: nullable TKwreturn = null readable writable var _n_expr: nullable AExpr = null + init do end end # Something that has a label. abstract class ALabelable super Prod readable writable var _n_label: nullable ALabel = null + init do end end # A `break` statement. @@ -1064,12 +1232,14 @@ class ABreakExpr super ALabelable readable writable var _n_kwbreak: TKwbreak readable writable var _n_expr: nullable AExpr = null + init do end end # An `abort` statement class AAbortExpr super AExpr readable writable var _n_kwabort: TKwabort + init do end end # A `continue` statement @@ -1078,6 +1248,7 @@ class AContinueExpr super ALabelable readable writable var _n_kwcontinue: nullable TKwcontinue = null readable writable var _n_expr: nullable AExpr = null + init do end end # A `do` statement @@ -1086,6 +1257,7 @@ class ADoExpr super ALabelable readable writable var _n_kwdo: TKwdo readable writable var _n_block: nullable AExpr = null + init do end end # A `if` statement @@ -1095,6 +1267,7 @@ class AIfExpr readable writable var _n_expr: AExpr readable writable var _n_then: nullable AExpr = null readable writable var _n_else: nullable AExpr = null + init do end end # A `if` expression @@ -1106,6 +1279,7 @@ class AIfexprExpr readable writable var _n_then: AExpr readable writable var _n_kwelse: TKwelse readable writable var _n_else: AExpr + init do end end # A `while` statement @@ -1116,6 +1290,7 @@ class AWhileExpr readable writable var _n_expr: AExpr readable writable var _n_kwdo: TKwdo readable writable var _n_block: nullable AExpr = null + init do end end # A `loop` statement @@ -1124,6 +1299,7 @@ class ALoopExpr super ALabelable readable writable var _n_kwloop: TKwloop readable writable var _n_block: nullable AExpr = null + init do end end # A `for` statement @@ -1135,6 +1311,7 @@ class AForExpr readable writable var _n_expr: AExpr readable writable var _n_kwdo: TKwdo readable writable var _n_block: nullable AExpr = null + init do end end # An `assert` statement @@ -1144,6 +1321,7 @@ class AAssertExpr readable writable var _n_id: nullable TId = null readable writable var _n_expr: AExpr readable writable var _n_else: nullable AExpr = null + init do end end # Whatever is a simple assignment. eg `= something` @@ -1151,6 +1329,7 @@ abstract class AAssignFormExpr super AExpr readable writable var _n_assign: TAssign readable writable var _n_value: AExpr + init do end end # Whatever is a combined assignment. eg `+= something` @@ -1158,12 +1337,14 @@ abstract class AReassignFormExpr super AExpr readable writable var _n_assign_op: AAssignOp readable writable var _n_value: AExpr + init do end end # A `once` expression. eg `once x` class AOnceExpr super AProxyExpr readable writable var _n_kwonce: TKwonce + init do end end # A polymorphic invocation of a method @@ -1172,6 +1353,7 @@ abstract class ASendExpr super AExpr # The receiver of the method invocation readable writable var _n_expr: AExpr + init do end end # A binary operation on a method @@ -1180,6 +1362,7 @@ abstract class ABinopExpr # The second operand of the operation # Note: the receiver (`n_expr`) is the first operand readable writable var _n_expr2: AExpr + init do end end # Something that is boolean expression @@ -1192,6 +1375,7 @@ class AOrExpr super ABoolExpr readable writable var _n_expr: AExpr readable writable var _n_expr2: AExpr + init do end end # A `and` expression @@ -1199,6 +1383,7 @@ class AAndExpr super ABoolExpr readable writable var _n_expr: AExpr readable writable var _n_expr2: AExpr + init do end end # A `or else` expression @@ -1206,6 +1391,7 @@ class AOrElseExpr super ABoolExpr readable writable var _n_expr: AExpr readable writable var _n_expr2: AExpr + init do end end # A `implies` expression @@ -1213,6 +1399,7 @@ class AImpliesExpr super ABoolExpr readable writable var _n_expr: AExpr readable writable var _n_expr2: AExpr + init do end end # A `not` expression @@ -1220,6 +1407,7 @@ class ANotExpr super ABoolExpr readable writable var _n_kwnot: TKwnot readable writable var _n_expr: AExpr + init do end end # A `==` expression @@ -1267,6 +1455,7 @@ class AIsaExpr super ABoolExpr readable writable var _n_expr: AExpr readable writable var _n_type: AType + init do end end # A `+` expression @@ -1303,6 +1492,7 @@ end class AUminusExpr super ASendExpr readable writable var _n_minus: TMinus + init do end end # An explicit instantiation. eg `new T` @@ -1314,6 +1504,7 @@ class ANewExpr # The name of the named-constructor, if any readable writable var _n_id: nullable TId = null readable writable var _n_args: AExprs + init do end end # Whatever is a old-style attribute access @@ -1325,6 +1516,8 @@ abstract class AAttrFormExpr # The name of the attribute readable writable var _n_id: TAttrid + + init do end end # The read of an attribute. eg `x._a` @@ -1347,6 +1540,7 @@ abstract class ACallFormExpr # The arguments of the call readable writable var _n_args: AExprs + init do end end # A complex setter call (standard or brackets) @@ -1390,6 +1584,7 @@ class ASuperExpr readable writable var _n_qualified: nullable AQualified = null readable writable var _n_kwsuper: TKwsuper readable writable var _n_args: AExprs + init do end end # A call to the `init` constructor. @@ -1398,12 +1593,14 @@ class AInitExpr super ASendExpr readable writable var _n_kwinit: TKwinit readable writable var _n_args: AExprs + init do end end # Whatever looks-like a call of the brackets `[]` operator. abstract class ABraFormExpr super ASendExpr readable writable var _n_args: AExprs + init do end end # A call of the brackets operator. eg `x[y,z]` @@ -1421,6 +1618,7 @@ end abstract class AVarFormExpr super AExpr readable writable var _n_id: TId + init do end end # A complex setter call of the bracket operator. eg `x[y,z]+=t` @@ -1454,6 +1652,7 @@ abstract class ARangeExpr super AExpr readable writable var _n_expr: AExpr readable writable var _n_expr2: AExpr + init do end end # A closed literal range. eg `[x..y]` @@ -1461,6 +1660,7 @@ class ACrangeExpr super ARangeExpr readable writable var _n_obra: TObra readable writable var _n_cbra: TCbra + init do end end # An open literal range. eg `[x..y[` @@ -1468,18 +1668,21 @@ class AOrangeExpr super ARangeExpr readable writable var _n_obra: TObra readable writable var _n_cbra: TObra + init do end end # A literal array. eg. `[x,y,z]` class AArrayExpr super AExpr readable writable var _n_exprs: AExprs + init do end end # A read of `self` class ASelfExpr super AExpr readable writable var _n_kwself: nullable TKwself + init do end end # When there is no explicit receiver, `self` is implicit @@ -1491,36 +1694,53 @@ end class ATrueExpr super ABoolExpr readable writable var _n_kwtrue: TKwtrue + init do end end # A `false` boolean literal constant class AFalseExpr super ABoolExpr readable writable var _n_kwfalse: TKwfalse + init do end end # A `null` literal constant class ANullExpr super AExpr readable writable var _n_kwnull: TKwnull + init do end 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 + init do end +end +# An integer literal in hexadecimal format +class AHexIntExpr + super AIntExpr + readable writable var _n_hex_number: THexNumber + init do end end # A float literal class AFloatExpr super AExpr readable writable var _n_float: TFloat + init do end end # A character literal class ACharExpr super AExpr readable writable var _n_char: TChar + init do end end # A string literal abstract class AStringFormExpr super AExpr readable writable var _n_string: Token + init do end end # A simple string. eg. `"abc"` @@ -1548,6 +1768,7 @@ end class ASuperstringExpr super AExpr readable var _n_exprs: ANodes[AExpr] = new ANodes[AExpr](self) + init do end end # A simple parenthesis. eg `(x)` @@ -1555,12 +1776,14 @@ class AParExpr super AProxyExpr readable writable var _n_opar: TOpar readable writable var _n_cpar: TCpar + init do end end # Whatevej just contains (and mimic) an other expression abstract class AProxyExpr super AExpr readable writable var _n_expr: AExpr + init do end end # A type cast. eg `x.as(T)` @@ -1568,9 +1791,10 @@ 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 + init do end end # A as-not-null cast. eg `x.as(not null)` @@ -1578,22 +1802,25 @@ 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 + init do end end # A is-set check of old-style attributes. eg `isset x._a` class AIssetAttrExpr super AAttrFormExpr readable writable var _n_kwisset: TKwisset + init do end end # A list of expression separated with commas (arguments for instance) abstract class AExprs super Prod readable var _n_exprs: ANodes[AExpr] = new ANodes[AExpr](self) + init do end end class ADebugTypeExpr @@ -1602,6 +1829,7 @@ class ADebugTypeExpr readable writable var _n_kwtype: TKwtype readable writable var _n_expr: AExpr readable writable var _n_type: AType + init do end end # A simple list of expressions @@ -1614,6 +1842,7 @@ class AParExprs super AExprs readable writable var _n_opar: TOpar readable writable var _n_cpar: TCpar + init do end end # A list of expressions enclosed in brackets @@ -1621,6 +1850,7 @@ class ABraExprs super AExprs readable writable var _n_obra: TObra readable writable var _n_cbra: TCbra + init do end end # A complex assignment operator. eg `+=` @@ -1630,10 +1860,12 @@ end class APlusAssignOp super AAssignOp readable writable var _n_pluseq: TPluseq + init do end end class AMinusAssignOp super AAssignOp readable writable var _n_minuseq: TMinuseq + init do end end class AModuleName @@ -1641,22 +1873,26 @@ class AModuleName readable writable var _n_quad: nullable TQuad = null readable var _n_path: ANodes[TId] = new ANodes[TId](self) readable writable var _n_id: TId + init do end end class AInLanguage super Prod readable writable var _n_kwin: TKwin readable writable var _n_string: TString + init do end end class AExternCodeBlock super Prod readable writable var _n_in_language: nullable AInLanguage = null readable writable var _n_extern_code_segment: TExternCodeSegment + init do end end class AQualified super Prod readable writable var _n_quad: nullable TQuad = null readable var _n_id: ANodes[TId] = new ANodes[TId](self) readable writable var _n_classid: nullable TClassid = null + init do end end # A documentation of a definition @@ -1664,6 +1900,7 @@ end class ADoc super Prod readable var _n_comment: ANodes[TComment] = new ANodes[TComment](self) + init do end end class AAnnotations @@ -1672,6 +1909,7 @@ class AAnnotations readable writable var _n_opar: nullable TOpar = null readable var _n_items: ANodes[AAnnotation] = new ANodes[AAnnotation](self) readable writable var _n_cpar: nullable TCpar = null + init do end end class AAnnotation super Prod @@ -1679,6 +1917,7 @@ class AAnnotation readable writable var _n_opar: nullable TOpar = null readable var _n_args: ANodes[AAtArg] = new ANodes[AAtArg](self) readable writable var _n_cpar: nullable TCpar = null + init do end end abstract class AAtArg super Prod @@ -1686,10 +1925,12 @@ end class ATypeAtArg super AAtArg readable writable var _n_type: AType + init do end end class AExprAtArg super AAtArg readable writable var _n_expr: AExpr + init do end end class AAtAtArg super AAtArg @@ -1697,6 +1938,7 @@ end abstract class AAtid super Prod readable writable var _n_id: Token + init do end end class AIdAtid super AAtid