syntax: add 'loop' construction
[nit.git] / src / parser / parser_nodes.nit
index 4493262..573c12a 100644 (file)
 # Was previously based on parser_abs.nit.
 package parser_nodes
 
-import mmloader
+import location
 
 # Root of the AST hierarchy
 abstract class ANode
-       readable var _location: nullable Location
+       var _location: nullable Location
+       # Location is set during AST building. Once built, location cannon be null
+       # However, manual instanciated nodes may need mode care
+       fun location: Location do return _location.as(not null)
 end
 
 # Ancestor of all tokens
@@ -34,7 +37,7 @@ end
 # Ancestor of all productions
 abstract class Prod
 special ANode
-       fun location=(loc: nullable Location) do _location = loc
+       fun location=(l: Location) do _location = l
 end
 class TEol
 special Token
@@ -72,9 +75,6 @@ end
 class TKwtype
 special Token
 end
-class TKwattr
-special Token
-end
 class TKwinit
 special Token
 end
@@ -123,6 +123,9 @@ end
 class TKwwhile
 special Token
 end
+class TKwloop
+special Token
+end
 class TKwfor
 special Token
 end
@@ -180,9 +183,6 @@ end
 class TKwas
 special Token
 end
-class TKwwith
-special Token
-end
 class TKwnullable
 special Token
 end
@@ -267,6 +267,9 @@ end
 class TStarship
 special Token
 end
+class TBang
+special Token
+end
 class TClassid
 special Token
 end
@@ -297,7 +300,7 @@ end
 class TEndString
 special Token
 end
-class EOF 
+class EOF
 special Token
 private init noinit do end
 end
@@ -395,15 +398,14 @@ special Prod
     readable writable var _n_kwspecial: TKwspecial
     readable writable var _n_type: AType
 end
-class APropdef special Prod 
+class APropdef special Prod
     readable writable var _n_doc: nullable ADoc = null
 end
 class AAttrPropdef
 special APropdef
     readable writable var _n_kwredef: nullable TKwredef = null
     readable writable var _n_visibility: AVisibility
-    readable writable var _n_kwattr: nullable TKwattr = null
-    readable writable var _n_kwvar: nullable TKwvar = null
+    readable writable var _n_kwvar: TKwvar
     readable writable var _n_id: TAttrid
     readable writable var _n_type: nullable AType = null
     readable writable var _n_readable: nullable AAble = null
@@ -544,8 +546,8 @@ special Prod
 end
 class AClosureDecl
 special Prod
-    readable writable var _n_kwwith: TKwwith
     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
@@ -576,7 +578,7 @@ special AExpr
 end
 class AReturnExpr
 special AExpr
-    readable writable var _n_kwreturn: TKwreturn
+    readable writable var _n_kwreturn: nullable TKwreturn = null
     readable writable var _n_expr: nullable AExpr = null
 end
 class ALabelable
@@ -596,7 +598,7 @@ end
 class AContinueExpr
 special AExpr
 special ALabelable
-    readable writable var _n_kwcontinue: TKwcontinue
+    readable writable var _n_kwcontinue: nullable TKwcontinue = null
     readable writable var _n_expr: nullable AExpr = null
 end
 class ADoExpr
@@ -629,6 +631,12 @@ special ALabelable
     readable writable var _n_kwdo: TKwdo
     readable writable var _n_block: nullable AExpr = null
 end
+class ALoopExpr
+special AExpr
+special ALabelable
+    readable writable var _n_kwloop: TKwloop
+    readable writable var _n_block: nullable AExpr = null
+end
 class AForExpr
 special AExpr
 special ALabelable
@@ -761,20 +769,20 @@ special ASendExpr
 end
 class AAttrReassignExpr
 special AExpr
-special AAttrFormExpr 
-special AReassignFormExpr 
+special AAttrFormExpr
+special AReassignFormExpr
 end
 class ACallExpr
 special ACallFormExpr
 end
 class ACallAssignExpr
 special ACallFormExpr
-special AAssignFormExpr 
+special AAssignFormExpr
 end
 class ACallReassignExpr
 special AExpr
 special ACallFormExpr
-special AReassignFormExpr 
+special AReassignFormExpr
 end
 class ASuperExpr
 special AExpr
@@ -796,7 +804,7 @@ special ABraFormExpr
 end
 class ABraAssignExpr
 special ABraFormExpr
-special AAssignFormExpr 
+special AAssignFormExpr
 end
 class AVarFormExpr
 special AExpr
@@ -804,7 +812,7 @@ special AExpr
 end
 class ABraReassignExpr
 special ABraFormExpr
-special AReassignFormExpr 
+special AReassignFormExpr
 end
 class AClosureCallExpr
 special AExpr
@@ -817,11 +825,11 @@ special AVarFormExpr
 end
 class AVarAssignExpr
 special AVarFormExpr
-special AAssignFormExpr 
+special AAssignFormExpr
 end
 class AVarReassignExpr
 special AVarFormExpr
-special AReassignFormExpr 
+special AReassignFormExpr
 end
 class ARangeExpr
 special AExpr
@@ -927,11 +935,23 @@ special AAssignOp
 end
 class AClosureDef
 special ALabelable
-    readable writable var _n_kwwith: TKwwith
-    readable writable var _n_id: List[TId] = new List[TId]
-    readable writable var _n_kwdo: TKwdo
+    readable writable var _n_bang: TBang
+    readable writable var _n_id: AClosureId
+    readable writable var _n_ids: List[TId] = new List[TId]
+    readable writable var _n_kwdo: nullable TKwdo = null
     readable writable var _n_expr: nullable AExpr = null
 end
+class AClosureId
+special Prod
+end
+class ASimpleClosureId
+special AClosureId
+    readable writable var _n_id: TId
+end
+class ABreakClosureId
+special AClosureId
+    readable writable var _n_kwbreak: TKwbreak
+end
 class AQualified
 special Prod
     readable writable var _n_id: List[TId] = new List[TId]