Merge: Introducing the do ... catch ... end structure
[nit.git] / src / parser / parser_nodes.nit
index 06a18a2..261694a 100644 (file)
@@ -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
@@ -1648,6 +1659,26 @@ class ABraassignMethid
        var n_assign: TAssign is writable, noinit
 end
 
+# A potentially qualified simple identifier `foo::bar::baz`
+class AQid
+       super Prod
+       # The qualifier, if any
+       var n_qualified: nullable AQualified = null is writable
+
+       # The final identifier
+       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
@@ -1686,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
@@ -1750,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
@@ -1810,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
@@ -1896,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)
 
@@ -1904,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
@@ -2189,7 +2245,7 @@ class AAmpExpr
 end
 
 # A unary operation on a method
-class AUnaryopExpr
+abstract class AUnaryopExpr
        super ASendExpr
 
        # The operator
@@ -2228,7 +2284,7 @@ class ANewExpr
        var n_type: AType is writable, noinit
 
        # The name of the named-constructor, if any
-       var n_id: nullable TId = null is writable
+       var n_qid: nullable AQid = null is writable
 
        # The arguments of the `new`
        var n_args: AExprs is writable, noinit
@@ -2262,7 +2318,7 @@ abstract class ACallFormExpr
        super ASendExpr
 
        # The name of the method
-       var n_id: TId is writable, noinit
+       var n_qid: AQid is writable, noinit
 
        # The arguments of the call
        var n_args: AExprs is writable, noinit
@@ -2800,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
@@ -2836,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