X-Git-Url: http://nitlanguage.org diff --git a/src/parser/parser_nodes.nit b/src/parser/parser_nodes.nit index 7e3f7ff..261694a 100644 --- a/src/parser/parser_nodes.nit +++ b/src/parser/parser_nodes.nit @@ -203,6 +203,7 @@ class ANodes[E: ANode] private var parent: ANode private var items = new Array[E] redef fun iterator do return items.iterator + redef fun reverse_iterator do return items.reverse_iterator redef fun length do return items.length redef fun is_empty do return items.is_empty redef fun push(e) @@ -520,6 +521,11 @@ class TKwdo super TokenKeyword end +# The keyword `catch` +class TKwcatch + super TokenKeyword +end + # The keyword `var` class TKwvar super TokenKeyword @@ -695,6 +701,11 @@ class TKwwith super TokenKeyword end +# The keyword `yield` +class TKwyield + super TokenKeyword +end + # The special keyword `__DEBUG__` class TKwdebug super Token @@ -1125,7 +1136,7 @@ end class APublicVisibility super AVisibility # The `public` keyword, if any - var n_kwpublic: nullable TKwpublic is writable + var n_kwpublic: nullable TKwpublic = null is writable end # An explicit private visibility modifier class APrivateVisibility @@ -1164,7 +1175,7 @@ class AStdClassdef var n_classkind: AClasskind is writable, noinit # The name of the class - var n_id: nullable TClassid = null is writable + var n_qid: nullable AQclassid = null is writable # The `[` symbol var n_obra: nullable TObra = null is writable @@ -1185,7 +1196,7 @@ class AStdClassdef return [for d in n_propdefs do if d isa ASuperPropdef then d] end - redef fun hot_location do return n_id.location + redef fun hot_location do return n_qid.location end # The implicit class definition of the implicit main method @@ -1490,7 +1501,7 @@ class ATypePropdef var n_kwtype: TKwtype is writable, noinit # The name of the virtual type - var n_id: TClassid is writable, noinit + var n_qid: AQclassid is writable, noinit # The bound of the virtual type var n_type: AType is writable, noinit @@ -1658,6 +1669,16 @@ class AQid var n_id: TId is writable, noinit end +# A potentially qualified class identifier `foo::bar::Baz` +class AQclassid + super Prod + # The qualifier, if any + var n_qualified: nullable AQualified = null is writable + + # The final identifier + var n_id: TClassid is writable, noinit +end + # A signature in a method definition. eg `(x,y:X,z:Z):T` class ASignature super Prod @@ -1696,7 +1717,7 @@ class AType var n_kwnullable: nullable TKwnullable = null is writable # The name of the class or of the formal type - var n_id: TClassid is writable, noinit + var n_qid: AQclassid is writable, noinit # The opening bracket var n_obra: nullable TObra = null is writable @@ -1760,10 +1781,18 @@ end # A `return` statement. eg `return x` class AReturnExpr - super AExpr + super AEscapeExpr # The `return` keyword var n_kwreturn: nullable TKwreturn = null is writable +end + +# A `yield` statement. eg `yield x` +class AYieldExpr + super AExpr + + # The `yield` keyword + var n_kwyield: nullable TKwyield = null is writable # The return value, if any var n_expr: nullable AExpr = null is writable @@ -1820,6 +1849,12 @@ class ADoExpr # The list of statements of the `do`. var n_block: nullable AExpr = null is writable + + # The `catch` keyword + var n_kwcatch: nullable TKwcatch = null is writable + + # The do catch block + var n_catch: nullable AExpr = null is writable end # A `if` statement @@ -1906,6 +1941,23 @@ class AForExpr # The `for` keyword var n_kwfor: TKwfor is writable, noinit + # The list of groups to iterate + var n_groups = new ANodes[AForGroup](self) + + # The `do` keyword + var n_kwdo: TKwdo is writable, noinit + + # The body of the loop + var n_block: nullable AExpr = null is writable +end + +# A collection iterated by a for, its automatic variables and its implicit iterator. +# +# Standard `for` iterate on a single collection. +# Multiple `for` can iterate on more than one collection at once. +class AForGroup + super Prod + # The list of name of the automatic variables var n_ids = new ANodes[TId](self) @@ -1914,12 +1966,6 @@ class AForExpr # The expression used as the collection to iterate on var n_expr: AExpr is writable, noinit - - # The `do` keyword - var n_kwdo: TKwdo is writable, noinit - - # The body of the loop - var n_block: nullable AExpr = null is writable end # A `with` statement @@ -2199,7 +2245,7 @@ class AAmpExpr end # A unary operation on a method -class AUnaryopExpr +abstract class AUnaryopExpr super ASendExpr # The operator @@ -2810,7 +2856,7 @@ class AModuleName # The starting quad (`::`) var n_quad: nullable TQuad = null is writable - # The list of quad-separated project/group identifiers + # The list of quad-separated package/group identifiers var n_path = new ANodes[TId](self) # The final module identifier @@ -2846,7 +2892,7 @@ class AQualified # The starting quad (`::`) var n_quad: nullable TQuad = null is writable - # The list of quad-separated project/group/module identifiers + # The list of quad-separated package/group/module identifiers var n_id = new ANodes[TId](self) # A class identifier