1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 # AST nodes of the Nit language
16 # Was previously based on parser_abs.nit.
17 module parser_nodes
is old_style_init
21 # Root of the AST class-hierarchy
23 # Location is set during AST building. Once built, location cannon be null.
24 # However, manual instantiated nodes may need more care.
25 var location
: Location is writable, noinit
27 # The location of the important part of the node (identifier or whatever)
28 fun hot_location
: Location do return location
30 # Display a message for the colored location of the node
31 fun debug
(message
: String)
33 sys
.stderr
.write
"{hot_location} {self.class_name}: {message}\n{hot_location.colored_line("0;32")}\n"
36 # Parent of the node in the AST
37 var parent
: nullable ANode = null
39 # The topmost ancestor of the element
40 # This just apply `parent` until the first one
46 if p
== null then return res
51 # The most specific common parent between `self` and `other`
52 # Return null if the two node are unrelated (distinct root)
53 fun common_parent
(other
: ANode): nullable ANode
55 # First, get the same depth
56 var s
: nullable ANode = self
57 var o
: nullable ANode = other
58 var d
= s
.depth
- o
.depth
67 assert o
.depth
== s
.depth
68 # Second, go up until same in found
76 # Number of nodes between `self` and the `root` of the AST
77 # ENSURE `self == self.root implies result == 0 `
78 # ENSURE `self != self.root implies result == self.parent.depth + 1`
85 if p
== null then return res
91 # Protect from invalid instantiation of nodes
94 # Replace a child with an other node in the AST
95 private fun replace_child
(old_child
: ANode, new_child
: nullable ANode) is abstract
97 # Detach a node from its parent
98 # Aborts if the node is not detashable. use `replace_with` instead
99 # REQUIRE: parent != null
100 # REQUIRE: is_detachable
101 # ENDURE: parent == null
104 assert parent
!= null
105 parent
.replace_child
(self, null)
109 # Replace itself with an other node in the AST
110 # REQUIRE: parent != null
111 # ENSURE: node.parent == old(parent)
112 # ENSURE: parent == null
113 fun replace_with
(node
: ANode)
115 assert parent
!= null
116 parent
.replace_child
(self, node
)
120 # Visit all nodes in order.
121 # Thus, call `v.enter_visit(e)` for each child `e`
122 fun visit_all
(v
: Visitor) is abstract
125 # A sequence of nodes
126 # There is a specifc class (instead of a using Array) to track the parent/child relation when nodes are added or removed
127 class ANodes[E
: ANode]
129 private var parent
: ANode
130 private var items
= new Array[E
]
131 redef fun iterator
do return items
.iterator
132 redef fun length
do return items
.length
133 redef fun is_empty
do return items
.is_empty
152 var res
= items
.shift
164 redef fun []=(index
, e
)
166 hook_remove
(self[index
])
170 redef fun remove_at
(index
)
172 hook_remove
(items
[index
])
173 items
.remove_at
(index
)
175 private fun hook_add
(e
: E
)
177 #assert e.parent == null
180 private fun hook_remove
(e
: E
)
182 assert e
.parent
== parent
186 # Used in parent contructor to fill elements
187 private fun unsafe_add_all
(nodes
: Collection[Object])
189 var parent
= self.parent
197 private fun replace_child
(old_child
: ANode, new_child
: nullable ANode): Bool
199 var parent
= self.parent
200 for i
in [0..length
[ do
201 if self[i
] == old_child
then
202 if new_child
!= null then
203 assert new_child
isa E
205 new_child
.parent
= parent
215 private fun visit_all
(v
: Visitor)
217 for n
in self do v
.enter_visit
(n
)
221 # Ancestor of all tokens
222 # A token is a node that has a `text` but no children.
226 # The raw content on the token
227 fun text
: String is abstract
228 fun text
=(text
: String) is abstract
230 # The previous token in the Lexer.
231 # May have disapeared in the AST
232 var prev_token
: nullable Token = null
234 # The next token in the Lexer.
235 # May have disapeared in the AST
236 var next_token
: nullable Token = null
238 # The verbatim blank text between `prev_token` and `self`
239 fun blank_before
: String
241 if prev_token
== null then return ""
242 var from
= prev_token
.location
.pend
+1
243 var to
= location
.pstart
244 return location
.file
.string
.substring
(from
,to-from
)
247 redef fun to_s
: String do
251 redef fun visit_all
(v
: Visitor) do end
252 redef fun replace_child
(old_child
: ANode, new_child
: nullable ANode) do end
255 redef class SourceFile
256 # The first token parser by the lexer
257 # May have disapeared in the final AST
258 var first_token
: nullable Token = null
260 # The first token parser by the lexer
261 # May have disapeared in the final AST
262 var last_token
: nullable Token = null
265 # Ancestor of all productions
266 # A production is a node without text but that usually has children.
270 # All the annotations attached directly to the node
271 var n_annotations
: nullable AAnnotations = null is writable
273 redef fun replace_with
(n
: ANode)
277 if not isset n
._location
and isset _location
then n
._location
= _location
281 # Abstract standard visitor on the AST
282 abstract class Visitor
283 # What the visitor do when a node is visited
284 # Concrete visitors should implement this method.
286 protected fun visit
(e
: ANode) is abstract
288 # Ask the visitor to visit a given node.
289 # Usually automatically called by visit_all* methods.
290 # This method should not be redefined
291 fun enter_visit
(e
: nullable ANode)
293 if e
== null then return
294 var old
= _current_node
300 # The current visited node
301 var current_node
: nullable ANode = null is writable
304 # Token of end of line (basically `\n`)
313 # Token of a line of comments
314 # Starts with the `#` and contains the final end-of-line (if any)
319 # A token associated with a keyword
320 abstract class TokenKeyword
324 return "keyword '{text}'"
508 # A token associated with an operator (and other lookalike symbols)
509 abstract class TokenOperator
513 return "operator '{text}'"
580 # A class (or formal type) identifier. They start with an uppercase.
585 do return "type identifier '{text}'"
589 # A standard identifier (variable, method...). They start with a lowercase.
594 do return "identifier '{text}'"
598 # An attribute identifier. They start with an underscore.
603 do return "attribute '{text}'"
607 # A token of a literal value (string, integer, etc).
608 abstract class TokenLiteral
612 do return "literal value '{text}'"
645 do return "malformed string {text}"
654 do return "malformed character {text}"
658 class TExternCodeSegment
682 # The main node of a Nit source-file
686 var _n_moduledecl
: nullable AModuledecl = null
687 fun n_moduledecl
: nullable AModuledecl do return _n_moduledecl
688 fun n_moduledecl
=(n_moduledecl
: nullable AModuledecl) do _n_moduledecl
= n_moduledecl
689 var n_imports
: ANodes[AImport] = new ANodes[AImport](self)
690 var n_extern_code_blocks
: ANodes[AExternCodeBlock] = new ANodes[AExternCodeBlock](self)
691 var n_classdefs
: ANodes[AClassdef] = new ANodes[AClassdef](self)
695 # The declaration of the module with the documentation, name, and annotations
698 var _n_doc
: nullable ADoc = null
699 fun n_doc
: nullable ADoc do return _n_doc
700 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
701 var _n_kwredef
: nullable TKwredef = null
702 fun n_kwredef
: nullable TKwredef do return _n_kwredef
703 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
704 var _n_visibility
: AVisibility
705 fun n_visibility
: AVisibility do return _n_visibility
706 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
707 var _n_kwmodule
: TKwmodule
708 fun n_kwmodule
: TKwmodule do return _n_kwmodule
709 fun n_kwmodule
=(n_kwmodule
: TKwmodule) do _n_kwmodule
= n_kwmodule
710 var _n_name
: AModuleName
711 fun n_name
: AModuleName do return _n_name
712 fun n_name
=(n_name
: AModuleName) do _n_name
= n_name
716 # A import clause of a module
717 abstract class AImport
721 # A standard import clause. eg `import x`
724 var _n_visibility
: AVisibility
725 fun n_visibility
: AVisibility do return _n_visibility
726 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
727 var _n_kwimport
: TKwimport
728 fun n_kwimport
: TKwimport do return _n_kwimport
729 fun n_kwimport
=(n_kwimport
: TKwimport) do _n_kwimport
= n_kwimport
730 var _n_name
: AModuleName
731 fun n_name
: AModuleName do return _n_name
732 fun n_name
=(n_name
: AModuleName) do _n_name
= n_name
736 # The special import clause of the kernel module. eg `import end`
739 var _n_visibility
: AVisibility
740 fun n_visibility
: AVisibility do return _n_visibility
741 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
742 var _n_kwimport
: TKwimport
743 fun n_kwimport
: TKwimport do return _n_kwimport
744 fun n_kwimport
=(n_kwimport
: TKwimport) do _n_kwimport
= n_kwimport
746 fun n_kwend
: TKwend do return _n_kwend
747 fun n_kwend
=(n_kwend
: TKwend) do _n_kwend
= n_kwend
751 # A visibility modifier
753 # The public visibility is an empty production (no keyword).
755 # Note: even if some visibilities are only valid on some placse (for instance, no `protected` class or no `intrude` method)
756 # the parser has no such a restriction, therefore the semantic phases has to check that the visibilities make sense.
757 abstract class AVisibility
760 class APublicVisibility
762 var _n_kwpublic
: nullable TKwpublic
763 fun n_kwpublic
: nullable TKwpublic do return _n_kwpublic
764 fun n_kwpublic
=(n_kwpublic
: nullable TKwpublic) do _n_kwpublic
= n_kwpublic
767 class APrivateVisibility
769 var _n_kwprivate
: TKwprivate
770 fun n_kwprivate
: TKwprivate do return _n_kwprivate
771 fun n_kwprivate
=(n_kwprivate
: TKwprivate) do _n_kwprivate
= n_kwprivate
774 class AProtectedVisibility
776 var _n_kwprotected
: TKwprotected
777 fun n_kwprotected
: TKwprotected do return _n_kwprotected
778 fun n_kwprotected
=(n_kwprotected
: TKwprotected) do _n_kwprotected
= n_kwprotected
781 class AIntrudeVisibility
783 var _n_kwintrude
: TKwintrude
784 fun n_kwintrude
: TKwintrude do return _n_kwintrude
785 fun n_kwintrude
=(n_kwintrude
: TKwintrude) do _n_kwintrude
= n_kwintrude
790 # While most definition are `AStdClassdef`
791 # There is tow special case of class definition
792 abstract class AClassdef
794 var n_propdefs
: ANodes[APropdef] = new ANodes[APropdef](self)
798 # A standard class definition with a name, superclasses and properties
801 var _n_doc
: nullable ADoc = null
802 fun n_doc
: nullable ADoc do return _n_doc
803 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
804 var _n_kwredef
: nullable TKwredef = null
805 fun n_kwredef
: nullable TKwredef do return _n_kwredef
806 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
807 var _n_visibility
: AVisibility
808 fun n_visibility
: AVisibility do return _n_visibility
809 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
810 var _n_classkind
: AClasskind
811 fun n_classkind
: AClasskind do return _n_classkind
812 fun n_classkind
=(n_classkind
: AClasskind) do _n_classkind
= n_classkind
813 var _n_id
: nullable TClassid = null
814 fun n_id
: nullable TClassid do return _n_id
815 fun n_id
=(n_id
: nullable TClassid) do _n_id
= n_id
816 var n_formaldefs
: ANodes[AFormaldef] = new ANodes[AFormaldef](self)
817 var _n_extern_code_block
: nullable AExternCodeBlock = null
818 fun n_extern_code_block
: nullable AExternCodeBlock do return _n_extern_code_block
819 fun n_extern_code_block
=(n_extern_code_block
: nullable AExternCodeBlock) do _n_extern_code_block
= n_extern_code_block
820 var n_superclasses
: ANodes[ASuperclass] = new ANodes[ASuperclass](self)
822 fun n_kwend
: TKwend do return _n_kwend
823 fun n_kwend
=(n_kwend
: TKwend) do _n_kwend
= n_kwend
824 redef fun hot_location
do return n_id
.location
828 # The implicit class definition of the implicit main method
833 # The implicit class definition of the top-level methods
838 # The modifier for the kind of class (abstract, interface, etc.)
839 abstract class AClasskind
842 class AConcreteClasskind
844 var _n_kwclass
: TKwclass
845 fun n_kwclass
: TKwclass do return _n_kwclass
846 fun n_kwclass
=(n_kwclass
: TKwclass) do _n_kwclass
= n_kwclass
849 class AAbstractClasskind
851 var _n_kwabstract
: TKwabstract
852 fun n_kwabstract
: TKwabstract do return _n_kwabstract
853 fun n_kwabstract
=(n_kwabstract
: TKwabstract) do _n_kwabstract
= n_kwabstract
854 var _n_kwclass
: TKwclass
855 fun n_kwclass
: TKwclass do return _n_kwclass
856 fun n_kwclass
=(n_kwclass
: TKwclass) do _n_kwclass
= n_kwclass
859 class AInterfaceClasskind
861 var _n_kwinterface
: TKwinterface
862 fun n_kwinterface
: TKwinterface do return _n_kwinterface
863 fun n_kwinterface
=(n_kwinterface
: TKwinterface) do _n_kwinterface
= n_kwinterface
868 var _n_kwenum
: TKwenum
869 fun n_kwenum
: TKwenum do return _n_kwenum
870 fun n_kwenum
=(n_kwenum
: TKwenum) do _n_kwenum
= n_kwenum
873 class AExternClasskind
875 var _n_kwextern
: TKwextern
876 fun n_kwextern
: TKwextern do return _n_kwextern
877 fun n_kwextern
=(n_kwextern
: TKwextern) do _n_kwextern
= n_kwextern
878 var _n_kwclass
: nullable TKwclass = null
879 fun n_kwclass
: nullable TKwclass do return _n_kwclass
880 fun n_kwclass
=(n_kwclass
: nullable TKwclass) do _n_kwclass
= n_kwclass
884 # The definition of a formal generic parameter type. eg `X: Y`
888 fun n_id
: TClassid do return _n_id
889 fun n_id
=(n_id
: TClassid) do _n_id
= n_id
890 # The bound of the parameter type
891 var _n_type
: nullable AType = null
892 fun n_type
: nullable AType do return _n_type
893 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
897 # A super-class. eg `super X`
900 var _n_kwsuper
: TKwsuper
901 fun n_kwsuper
: TKwsuper do return _n_kwsuper
902 fun n_kwsuper
=(n_kwsuper
: TKwsuper) do _n_kwsuper
= n_kwsuper
904 fun n_type
: AType do return _n_type
905 fun n_type
=(n_type
: AType) do _n_type
= n_type
909 # The definition of a property
910 abstract class APropdef
912 var _n_doc
: nullable ADoc = null
913 fun n_doc
: nullable ADoc do return _n_doc
914 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
915 var _n_kwredef
: nullable TKwredef = null
916 fun n_kwredef
: nullable TKwredef do return _n_kwredef
917 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
918 var _n_visibility
: nullable AVisibility = null
919 fun n_visibility
: nullable AVisibility do return _n_visibility
920 fun n_visibility
=(n_visibility
: nullable AVisibility) do _n_visibility
= n_visibility
923 # A definition of an attribute
924 # For historical reason, old-syle and new-style attributes use the same `ANode` sub-class
928 fun n_kwvar
: TKwvar do return _n_kwvar
929 fun n_kwvar
=(n_kwvar
: TKwvar) do _n_kwvar
= n_kwvar
931 # The identifier for an old-style attribute (null if new-style)
932 var _n_id
: nullable TAttrid
933 fun n_id
: nullable TAttrid do return _n_id
934 fun n_id
=(n_id
: nullable TAttrid) do _n_id
= n_id
936 # The identifier for a new-style attribute (null if old-style)
937 var _n_id2
: nullable TId
938 fun n_id2
: nullable TId do return _n_id2
939 fun n_id2
=(n_id2
: nullable TId) do _n_id2
= n_id2
941 var _n_type
: nullable AType = null
942 fun n_type
: nullable AType do return _n_type
943 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
944 var _n_readable
: nullable AAble = null
945 fun n_readable
: nullable AAble do return _n_readable
946 fun n_readable
=(n_readable
: nullable AAble) do _n_readable
= n_readable
947 var _n_writable
: nullable AAble = null
948 fun n_writable
: nullable AAble do return _n_writable
949 fun n_writable
=(n_writable
: nullable AAble) do _n_writable
= n_writable
951 # The initial value, if any
952 var _n_expr
: nullable AExpr = null
953 fun n_expr
: nullable AExpr do return _n_expr
954 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
955 redef fun hot_location
957 if n_id
!= null then return n_id
.location
else return n_id2
.location
962 # A definition of all kind of method (including constructors)
963 abstract class AMethPropdef
965 var _n_kwmeth
: nullable TKwmeth = null
966 fun n_kwmeth
: nullable TKwmeth do return _n_kwmeth
967 fun n_kwmeth
=(n_kwmeth
: nullable TKwmeth) do _n_kwmeth
= n_kwmeth
968 var _n_kwinit
: nullable TKwinit = null
969 fun n_kwinit
: nullable TKwinit do return _n_kwinit
970 fun n_kwinit
=(n_kwinit
: nullable TKwinit) do _n_kwinit
= n_kwinit
971 var _n_kwnew
: nullable TKwnew = null
972 fun n_kwnew
: nullable TKwnew do return _n_kwnew
973 fun n_kwnew
=(n_kwnew
: nullable TKwnew) do _n_kwnew
= n_kwnew
974 var _n_methid
: nullable AMethid = null
975 fun n_methid
: nullable AMethid do return _n_methid
976 fun n_methid
=(n_methid
: nullable AMethid) do _n_methid
= n_methid
977 var _n_signature
: nullable ASignature = null
978 fun n_signature
: nullable ASignature do return _n_signature
979 fun n_signature
=(n_signature
: nullable ASignature) do _n_signature
= n_signature
980 var _n_block
: nullable AExpr = null
981 fun n_block
: nullable AExpr do return _n_block
982 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
983 var _n_extern
: nullable TString = null
984 fun n_extern
: nullable TString do return _n_extern
985 fun n_extern
=(n_extern
: nullable TString) do _n_extern
= n_extern
986 var _n_extern_calls
: nullable AExternCalls = null
987 fun n_extern_calls
: nullable AExternCalls do return _n_extern_calls
988 fun n_extern_calls
=(n_extern_calls
: nullable AExternCalls) do _n_extern_calls
= n_extern_calls
989 var _n_extern_code_block
: nullable AExternCodeBlock = null
990 fun n_extern_code_block
: nullable AExternCodeBlock do return _n_extern_code_block
991 fun n_extern_code_block
=(n_extern_code_block
: nullable AExternCodeBlock) do _n_extern_code_block
= n_extern_code_block
992 redef fun hot_location
994 if n_methid
!= null then
995 return n_methid
.location
996 else if n_kwinit
!= null then
997 return n_kwinit
.location
998 else if n_kwnew
!= null then
999 return n_kwnew
.location
1006 # A method marked abstract
1007 # *deferred* is a old synonynmous of *abstract* that comes from PRM, that comes from Eiffel.
1008 class ADeferredMethPropdef
1012 # A method marked intern
1013 class AInternMethPropdef
1017 # A method of a constructor marked extern
1018 abstract class AExternPropdef
1022 # A method marked extern
1023 class AExternMethPropdef
1024 super AExternPropdef
1027 # A method with a body
1028 class AConcreteMethPropdef
1033 abstract class AInitPropdef
1037 # A constructor with a body
1038 class AConcreteInitPropdef
1039 super AConcreteMethPropdef
1043 class AInternNewPropdef
1044 super AInternMethPropdef
1048 # A constructor marked extern (defined with the `new` keyword)
1049 class AExternInitPropdef
1050 super AExternPropdef
1054 # The implicit main method
1055 class AMainMethPropdef
1056 super AConcreteMethPropdef
1059 # Declaration of callbacks for extern methods
1062 var _n_kwimport
: TKwimport
1063 fun n_kwimport
: TKwimport do return _n_kwimport
1064 fun n_kwimport
=(n_kwimport
: TKwimport) do _n_kwimport
= n_kwimport
1065 var n_extern_calls
: ANodes[AExternCall] = new ANodes[AExternCall](self)
1068 abstract class AExternCall
1071 abstract class APropExternCall
1074 class ALocalPropExternCall
1075 super APropExternCall
1076 var _n_methid
: AMethid
1077 fun n_methid
: AMethid do return _n_methid
1078 fun n_methid
=(n_methid
: AMethid) do _n_methid
= n_methid
1081 class AFullPropExternCall
1082 super APropExternCall
1084 fun n_type
: AType do return _n_type
1085 fun n_type
=(n_type
: AType) do _n_type
= n_type
1086 var _n_dot
: nullable TDot = null
1087 fun n_dot
: nullable TDot do return _n_dot
1088 fun n_dot
=(n_dot
: nullable TDot) do _n_dot
= n_dot
1089 var _n_methid
: AMethid
1090 fun n_methid
: AMethid do return _n_methid
1091 fun n_methid
=(n_methid
: AMethid) do _n_methid
= n_methid
1094 class AInitPropExternCall
1095 super APropExternCall
1097 fun n_type
: AType do return _n_type
1098 fun n_type
=(n_type
: AType) do _n_type
= n_type
1101 class ASuperExternCall
1103 var _n_kwsuper
: TKwsuper
1104 fun n_kwsuper
: TKwsuper do return _n_kwsuper
1105 fun n_kwsuper
=(n_kwsuper
: TKwsuper) do _n_kwsuper
= n_kwsuper
1108 abstract class ACastExternCall
1111 class ACastAsExternCall
1112 super ACastExternCall
1113 var _n_from_type
: AType
1114 fun n_from_type
: AType do return _n_from_type
1115 fun n_from_type
=(n_from_type
: AType) do _n_from_type
= n_from_type
1116 var _n_dot
: nullable TDot = null
1117 fun n_dot
: nullable TDot do return _n_dot
1118 fun n_dot
=(n_dot
: nullable TDot) do _n_dot
= n_dot
1120 fun n_kwas
: TKwas do return _n_kwas
1121 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
1122 var _n_to_type
: AType
1123 fun n_to_type
: AType do return _n_to_type
1124 fun n_to_type
=(n_to_type
: AType) do _n_to_type
= n_to_type
1127 class AAsNullableExternCall
1128 super ACastExternCall
1130 fun n_type
: AType do return _n_type
1131 fun n_type
=(n_type
: AType) do _n_type
= n_type
1133 fun n_kwas
: TKwas do return _n_kwas
1134 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
1135 var _n_kwnullable
: TKwnullable
1136 fun n_kwnullable
: TKwnullable do return _n_kwnullable
1137 fun n_kwnullable
=(n_kwnullable
: TKwnullable) do _n_kwnullable
= n_kwnullable
1140 class AAsNotNullableExternCall
1141 super ACastExternCall
1143 fun n_type
: AType do return _n_type
1144 fun n_type
=(n_type
: AType) do _n_type
= n_type
1146 fun n_kwas
: TKwas do return _n_kwas
1147 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
1148 var _n_kwnot
: TKwnot
1149 fun n_kwnot
: TKwnot do return _n_kwnot
1150 fun n_kwnot
=(n_kwnot
: TKwnot) do _n_kwnot
= n_kwnot
1151 var _n_kwnullable
: TKwnullable
1152 fun n_kwnullable
: TKwnullable do return _n_kwnullable
1153 fun n_kwnullable
=(n_kwnullable
: TKwnullable) do _n_kwnullable
= n_kwnullable
1157 # A definition of a virtual type
1160 var _n_kwtype
: TKwtype
1161 fun n_kwtype
: TKwtype do return _n_kwtype
1162 fun n_kwtype
=(n_kwtype
: TKwtype) do _n_kwtype
= n_kwtype
1164 fun n_id
: TClassid do return _n_id
1165 fun n_id
=(n_id
: TClassid) do _n_id
= n_id
1167 fun n_type
: AType do return _n_type
1168 fun n_type
=(n_type
: AType) do _n_type
= n_type
1172 # A `writable` or `readable` modifier
1173 abstract class AAble
1175 var _n_visibility
: nullable AVisibility = null
1176 fun n_visibility
: nullable AVisibility do return _n_visibility
1177 fun n_visibility
=(n_visibility
: nullable AVisibility) do _n_visibility
= n_visibility
1178 var _n_kwredef
: nullable TKwredef = null
1179 fun n_kwredef
: nullable TKwredef do return _n_kwredef
1180 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
1184 # A `readable` modifier
1187 var _n_kwreadable
: TKwreadable
1188 fun n_kwreadable
: TKwreadable do return _n_kwreadable
1189 fun n_kwreadable
=(n_kwreadable
: TKwreadable) do _n_kwreadable
= n_kwreadable
1193 # A `writable` modifier
1196 var _n_kwwritable
: TKwwritable
1197 fun n_kwwritable
: TKwwritable do return _n_kwwritable
1198 fun n_kwwritable
=(n_kwwritable
: TKwwritable) do _n_kwwritable
= n_kwwritable
1202 # The identifier of a method in a method declaration.
1203 # There is a specific class because of operator and setters.
1204 abstract class AMethid
1210 fun n_id
: TId do return _n_id
1211 fun n_id
=(n_id
: TId) do _n_id
= n_id
1217 fun n_plus
: TPlus do return _n_plus
1218 fun n_plus
=(n_plus
: TPlus) do _n_plus
= n_plus
1223 var _n_minus
: TMinus
1224 fun n_minus
: TMinus do return _n_minus
1225 fun n_minus
=(n_minus
: TMinus) do _n_minus
= n_minus
1231 fun n_star
: TStar do return _n_star
1232 fun n_star
=(n_star
: TStar) do _n_star
= n_star
1237 var _n_slash
: TSlash
1238 fun n_slash
: TSlash do return _n_slash
1239 fun n_slash
=(n_slash
: TSlash) do _n_slash
= n_slash
1242 class APercentMethid
1244 var _n_percent
: TPercent
1245 fun n_percent
: TPercent do return _n_percent
1246 fun n_percent
=(n_percent
: TPercent) do _n_percent
= n_percent
1252 fun n_eq
: TEq do return _n_eq
1253 fun n_eq
=(n_eq
: TEq) do _n_eq
= n_eq
1259 fun n_ne
: TNe do return _n_ne
1260 fun n_ne
=(n_ne
: TNe) do _n_ne
= n_ne
1266 fun n_le
: TLe do return _n_le
1267 fun n_le
=(n_le
: TLe) do _n_le
= n_le
1273 fun n_ge
: TGe do return _n_ge
1274 fun n_ge
=(n_ge
: TGe) do _n_ge
= n_ge
1280 fun n_lt
: TLt do return _n_lt
1281 fun n_lt
=(n_lt
: TLt) do _n_lt
= n_lt
1287 fun n_gt
: TGt do return _n_gt
1288 fun n_gt
=(n_gt
: TGt) do _n_gt
= n_gt
1294 fun n_ll
: TLl do return _n_ll
1295 fun n_ll
=(n_ll
: TLl) do _n_ll
= n_ll
1301 fun n_gg
: TGg do return _n_gg
1302 fun n_gg
=(n_gg
: TGg) do _n_gg
= n_gg
1308 fun n_obra
: TObra do return _n_obra
1309 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
1311 fun n_cbra
: TCbra do return _n_cbra
1312 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
1315 class AStarshipMethid
1317 var _n_starship
: TStarship
1318 fun n_starship
: TStarship do return _n_starship
1319 fun n_starship
=(n_starship
: TStarship) do _n_starship
= n_starship
1325 fun n_id
: TId do return _n_id
1326 fun n_id
=(n_id
: TId) do _n_id
= n_id
1327 var _n_assign
: TAssign
1328 fun n_assign
: TAssign do return _n_assign
1329 fun n_assign
=(n_assign
: TAssign) do _n_assign
= n_assign
1332 class ABraassignMethid
1335 fun n_obra
: TObra do return _n_obra
1336 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
1338 fun n_cbra
: TCbra do return _n_cbra
1339 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
1340 var _n_assign
: TAssign
1341 fun n_assign
: TAssign do return _n_assign
1342 fun n_assign
=(n_assign
: TAssign) do _n_assign
= n_assign
1346 # A signature in a method definition. eg `(x,y:X,z:Z):T`
1349 var _n_opar
: nullable TOpar = null
1350 fun n_opar
: nullable TOpar do return _n_opar
1351 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
1352 var n_params
: ANodes[AParam] = new ANodes[AParam](self)
1353 var _n_cpar
: nullable TCpar = null
1354 fun n_cpar
: nullable TCpar do return _n_cpar
1355 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
1356 var _n_type
: nullable AType = null
1357 fun n_type
: nullable AType do return _n_type
1358 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
1362 # A parameter definition in a signature. eg `x:X`
1366 fun n_id
: TId do return _n_id
1367 fun n_id
=(n_id
: TId) do _n_id
= n_id
1368 var _n_type
: nullable AType = null
1369 fun n_type
: nullable AType do return _n_type
1370 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
1371 var _n_dotdotdot
: nullable TDotdotdot = null
1372 fun n_dotdotdot
: nullable TDotdotdot do return _n_dotdotdot
1373 fun n_dotdotdot
=(n_dotdotdot
: nullable TDotdotdot) do _n_dotdotdot
= n_dotdotdot
1377 # A static type. eg `nullable X[Y]`
1380 var _n_kwnullable
: nullable TKwnullable = null
1381 fun n_kwnullable
: nullable TKwnullable do return _n_kwnullable
1382 fun n_kwnullable
=(n_kwnullable
: nullable TKwnullable) do _n_kwnullable
= n_kwnullable
1384 # The name of the class or of the formal type
1386 fun n_id
: TClassid do return _n_id
1387 fun n_id
=(n_id
: TClassid) do _n_id
= n_id
1389 # Type arguments for a generic type
1390 var n_types
: ANodes[AType] = new ANodes[AType](self)
1394 # A label at the end of a block or in a break/continue statement. eg `label x`
1397 var _n_kwlabel
: TKwlabel
1398 fun n_kwlabel
: TKwlabel do return _n_kwlabel
1399 fun n_kwlabel
=(n_kwlabel
: TKwlabel) do _n_kwlabel
= n_kwlabel
1400 var _n_id
: nullable TId
1401 fun n_id
: nullable TId do return _n_id
1402 fun n_id
=(n_id
: nullable TId) do _n_id
= n_id
1406 # Expression and statements
1407 # From a AST point of view there is no distinction between statement and expressions (even if the parser has to distinguish them)
1408 abstract class AExpr
1412 # A sequence of AExpr (usually statements)
1413 # The last AExpr gives the value of the whole block
1416 var n_expr
: ANodes[AExpr] = new ANodes[AExpr](self)
1417 var _n_kwend
: nullable TKwend = null
1418 fun n_kwend
: nullable TKwend do return _n_kwend
1419 fun n_kwend
=(n_kwend
: nullable TKwend) do _n_kwend
= n_kwend
1423 # A declaration of a local variable. eg `var x: X = y`
1426 var _n_kwvar
: TKwvar
1427 fun n_kwvar
: TKwvar do return _n_kwvar
1428 fun n_kwvar
=(n_kwvar
: TKwvar) do _n_kwvar
= n_kwvar
1430 fun n_id
: TId do return _n_id
1431 fun n_id
=(n_id
: TId) do _n_id
= n_id
1432 var _n_type
: nullable AType = null
1433 fun n_type
: nullable AType do return _n_type
1434 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
1435 var _n_assign
: nullable TAssign = null
1436 fun n_assign
: nullable TAssign do return _n_assign
1437 fun n_assign
=(n_assign
: nullable TAssign) do _n_assign
= n_assign
1439 # The initial value, if any
1440 var _n_expr
: nullable AExpr = null
1441 fun n_expr
: nullable AExpr do return _n_expr
1442 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1446 # A `return` statement. eg `return x`
1449 var _n_kwreturn
: nullable TKwreturn = null
1450 fun n_kwreturn
: nullable TKwreturn do return _n_kwreturn
1451 fun n_kwreturn
=(n_kwreturn
: nullable TKwreturn) do _n_kwreturn
= n_kwreturn
1452 var _n_expr
: nullable AExpr = null
1453 fun n_expr
: nullable AExpr do return _n_expr
1454 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1458 # Something that has a label.
1459 abstract class ALabelable
1461 var _n_label
: nullable ALabel = null
1462 fun n_label
: nullable ALabel do return _n_label
1463 fun n_label
=(n_label
: nullable ALabel) do _n_label
= n_label
1467 # A `break` statement.
1471 var _n_kwbreak
: TKwbreak
1472 fun n_kwbreak
: TKwbreak do return _n_kwbreak
1473 fun n_kwbreak
=(n_kwbreak
: TKwbreak) do _n_kwbreak
= n_kwbreak
1474 var _n_expr
: nullable AExpr = null
1475 fun n_expr
: nullable AExpr do return _n_expr
1476 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1480 # An `abort` statement
1483 var _n_kwabort
: TKwabort
1484 fun n_kwabort
: TKwabort do return _n_kwabort
1485 fun n_kwabort
=(n_kwabort
: TKwabort) do _n_kwabort
= n_kwabort
1489 # A `continue` statement
1493 var _n_kwcontinue
: nullable TKwcontinue = null
1494 fun n_kwcontinue
: nullable TKwcontinue do return _n_kwcontinue
1495 fun n_kwcontinue
=(n_kwcontinue
: nullable TKwcontinue) do _n_kwcontinue
= n_kwcontinue
1496 var _n_expr
: nullable AExpr = null
1497 fun n_expr
: nullable AExpr do return _n_expr
1498 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1507 fun n_kwdo
: TKwdo do return _n_kwdo
1508 fun n_kwdo
=(n_kwdo
: TKwdo) do _n_kwdo
= n_kwdo
1509 var _n_block
: nullable AExpr = null
1510 fun n_block
: nullable AExpr do return _n_block
1511 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1519 fun n_kwif
: TKwif do return _n_kwif
1520 fun n_kwif
=(n_kwif
: TKwif) do _n_kwif
= n_kwif
1522 fun n_expr
: AExpr do return _n_expr
1523 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1524 var _n_then
: nullable AExpr = null
1525 fun n_then
: nullable AExpr do return _n_then
1526 fun n_then
=(n_then
: nullable AExpr) do _n_then
= n_then
1527 var _n_else
: nullable AExpr = null
1528 fun n_else
: nullable AExpr do return _n_else
1529 fun n_else
=(n_else
: nullable AExpr) do _n_else
= n_else
1537 fun n_kwif
: TKwif do return _n_kwif
1538 fun n_kwif
=(n_kwif
: TKwif) do _n_kwif
= n_kwif
1540 fun n_expr
: AExpr do return _n_expr
1541 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1542 var _n_kwthen
: TKwthen
1543 fun n_kwthen
: TKwthen do return _n_kwthen
1544 fun n_kwthen
=(n_kwthen
: TKwthen) do _n_kwthen
= n_kwthen
1546 fun n_then
: AExpr do return _n_then
1547 fun n_then
=(n_then
: AExpr) do _n_then
= n_then
1548 var _n_kwelse
: TKwelse
1549 fun n_kwelse
: TKwelse do return _n_kwelse
1550 fun n_kwelse
=(n_kwelse
: TKwelse) do _n_kwelse
= n_kwelse
1552 fun n_else
: AExpr do return _n_else
1553 fun n_else
=(n_else
: AExpr) do _n_else
= n_else
1557 # A `while` statement
1561 var _n_kwwhile
: TKwwhile
1562 fun n_kwwhile
: TKwwhile do return _n_kwwhile
1563 fun n_kwwhile
=(n_kwwhile
: TKwwhile) do _n_kwwhile
= n_kwwhile
1565 fun n_expr
: AExpr do return _n_expr
1566 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1568 fun n_kwdo
: TKwdo do return _n_kwdo
1569 fun n_kwdo
=(n_kwdo
: TKwdo) do _n_kwdo
= n_kwdo
1570 var _n_block
: nullable AExpr = null
1571 fun n_block
: nullable AExpr do return _n_block
1572 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1576 # A `loop` statement
1580 var _n_kwloop
: TKwloop
1581 fun n_kwloop
: TKwloop do return _n_kwloop
1582 fun n_kwloop
=(n_kwloop
: TKwloop) do _n_kwloop
= n_kwloop
1583 var _n_block
: nullable AExpr = null
1584 fun n_block
: nullable AExpr do return _n_block
1585 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1593 var _n_kwfor
: TKwfor
1594 fun n_kwfor
: TKwfor do return _n_kwfor
1595 fun n_kwfor
=(n_kwfor
: TKwfor) do _n_kwfor
= n_kwfor
1596 var n_ids
: ANodes[TId] = new ANodes[TId](self)
1598 fun n_expr
: AExpr do return _n_expr
1599 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1601 fun n_kwdo
: TKwdo do return _n_kwdo
1602 fun n_kwdo
=(n_kwdo
: TKwdo) do _n_kwdo
= n_kwdo
1603 var _n_block
: nullable AExpr = null
1604 fun n_block
: nullable AExpr do return _n_block
1605 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1609 # An `assert` statement
1612 var _n_kwassert
: TKwassert
1613 fun n_kwassert
: TKwassert do return _n_kwassert
1614 fun n_kwassert
=(n_kwassert
: TKwassert) do _n_kwassert
= n_kwassert
1615 var _n_id
: nullable TId = null
1616 fun n_id
: nullable TId do return _n_id
1617 fun n_id
=(n_id
: nullable TId) do _n_id
= n_id
1619 fun n_expr
: AExpr do return _n_expr
1620 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1621 var _n_else
: nullable AExpr = null
1622 fun n_else
: nullable AExpr do return _n_else
1623 fun n_else
=(n_else
: nullable AExpr) do _n_else
= n_else
1627 # Whatever is a simple assignment. eg `= something`
1628 abstract class AAssignFormExpr
1630 var _n_assign
: TAssign
1631 fun n_assign
: TAssign do return _n_assign
1632 fun n_assign
=(n_assign
: TAssign) do _n_assign
= n_assign
1634 fun n_value
: AExpr do return _n_value
1635 fun n_value
=(n_value
: AExpr) do _n_value
= n_value
1639 # Whatever is a combined assignment. eg `+= something`
1640 abstract class AReassignFormExpr
1642 var _n_assign_op
: AAssignOp
1643 fun n_assign_op
: AAssignOp do return _n_assign_op
1644 fun n_assign_op
=(n_assign_op
: AAssignOp) do _n_assign_op
= n_assign_op
1646 fun n_value
: AExpr do return _n_value
1647 fun n_value
=(n_value
: AExpr) do _n_value
= n_value
1651 # A `once` expression. eg `once x`
1654 var _n_kwonce
: TKwonce
1655 fun n_kwonce
: TKwonce do return _n_kwonce
1656 fun n_kwonce
=(n_kwonce
: TKwonce) do _n_kwonce
= n_kwonce
1660 # A polymorphic invocation of a method
1661 # The form of the invocation (name, arguments, etc) are specific
1662 abstract class ASendExpr
1664 # The receiver of the method invocation
1666 fun n_expr
: AExpr do return _n_expr
1667 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1671 # A binary operation on a method
1672 abstract class ABinopExpr
1674 # The second operand of the operation
1675 # Note: the receiver (`n_expr`) is the first operand
1677 fun n_expr2
: AExpr do return _n_expr2
1678 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1682 # Something that is boolean expression
1683 abstract class ABoolExpr
1691 fun n_expr
: AExpr do return _n_expr
1692 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1694 fun n_expr2
: AExpr do return _n_expr2
1695 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1699 # A `and` expression
1703 fun n_expr
: AExpr do return _n_expr
1704 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1706 fun n_expr2
: AExpr do return _n_expr2
1707 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1711 # A `or else` expression
1715 fun n_expr
: AExpr do return _n_expr
1716 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1718 fun n_expr2
: AExpr do return _n_expr2
1719 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1723 # A `implies` expression
1727 fun n_expr
: AExpr do return _n_expr
1728 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1730 fun n_expr2
: AExpr do return _n_expr2
1731 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1735 # A `not` expression
1738 var _n_kwnot
: TKwnot
1739 fun n_kwnot
: TKwnot do return _n_kwnot
1740 fun n_kwnot
=(n_kwnot
: TKwnot) do _n_kwnot
= n_kwnot
1742 fun n_expr
: AExpr do return _n_expr
1743 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1787 # A type-ckeck expression. eg `x isa T`
1791 fun n_expr
: AExpr do return _n_expr
1792 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1794 fun n_type
: AType do return _n_type
1795 fun n_type
=(n_type
: AType) do _n_type
= n_type
1809 # A `<=>` expression
1829 # A unary minus expression. eg `-x`
1832 var _n_minus
: TMinus
1833 fun n_minus
: TMinus do return _n_minus
1834 fun n_minus
=(n_minus
: TMinus) do _n_minus
= n_minus
1838 # An explicit instantiation. eg `new T`
1841 var _n_kwnew
: TKwnew
1842 fun n_kwnew
: TKwnew do return _n_kwnew
1843 fun n_kwnew
=(n_kwnew
: TKwnew) do _n_kwnew
= n_kwnew
1845 fun n_type
: AType do return _n_type
1846 fun n_type
=(n_type
: AType) do _n_type
= n_type
1848 # The name of the named-constructor, if any
1849 var _n_id
: nullable TId = null
1850 fun n_id
: nullable TId do return _n_id
1851 fun n_id
=(n_id
: nullable TId) do _n_id
= n_id
1853 fun n_args
: AExprs do return _n_args
1854 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1858 # Whatever is a old-style attribute access
1859 abstract class AAttrFormExpr
1862 # The receiver of the attribute
1864 fun n_expr
: AExpr do return _n_expr
1865 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1867 # The name of the attribute
1869 fun n_id
: TAttrid do return _n_id
1870 fun n_id
=(n_id
: TAttrid) do _n_id
= n_id
1875 # The read of an attribute. eg `x._a`
1880 # The assignment of an attribute. eg `x._a=y`
1881 class AAttrAssignExpr
1883 super AAssignFormExpr
1886 # Whatever looks-like a call with a standard method and any number of arguments.
1887 abstract class ACallFormExpr
1890 # The name of the method
1892 fun n_id
: TId do return _n_id
1893 fun n_id
=(n_id
: TId) do _n_id
= n_id
1895 # The arguments of the call
1897 fun n_args
: AExprs do return _n_args
1898 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1902 # A complex setter call (standard or brackets)
1903 abstract class ASendReassignFormExpr
1905 super AReassignFormExpr
1908 # A complex attribute assignment. eg `x._a+=y`
1909 class AAttrReassignExpr
1911 super AReassignFormExpr
1914 # A call with a standard method-name and any number of arguments. eg `x.m(y)`. OR just a simple id
1915 # Note: because the parser cannot distinguish a variable read with a method call with an implicit receiver and no arguments, it always returns a `ACallExpr`.
1916 # Semantic analysis have to transform them to instance of `AVarExpr`.
1921 # A setter call with a standard method-name and any number of arguments. eg `x.m(y)=z`. OR just a simple assignment.
1922 # Note: because the parser cannot distinguish a variable write with a setter call with an implicit receiver and no arguments, it always returns a `ACallAssignExpr`.
1923 # Semantic analysis have to transform them to instance of `AVarAssignExpr`.
1924 class ACallAssignExpr
1926 super AAssignFormExpr
1929 # A complex setter call with a standard method-name and any number of arguments. eg `x.m(y)+=z`. OR just a simple complex assignment.
1930 # Note: because the parser cannot distinguish a variable write with a compex setter call with an implicit receiver and no arguments, it always returns a `ACallReassignExpr`.
1931 # Semantic analysis have to transform them to instance of `AVarReassignExpr`.
1932 class ACallReassignExpr
1934 super ASendReassignFormExpr
1937 # A call to `super`. OR a call of a super-constructor
1940 var _n_qualified
: nullable AQualified = null
1941 fun n_qualified
: nullable AQualified do return _n_qualified
1942 fun n_qualified
=(n_qualified
: nullable AQualified) do _n_qualified
= n_qualified
1943 var _n_kwsuper
: TKwsuper
1944 fun n_kwsuper
: TKwsuper do return _n_kwsuper
1945 fun n_kwsuper
=(n_kwsuper
: TKwsuper) do _n_kwsuper
= n_kwsuper
1947 fun n_args
: AExprs do return _n_args
1948 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1952 # A call to the `init` constructor.
1953 # Note: because `init` is a keyword and not a `TId`, the explicit call to init cannot be a ACallFormExpr.
1956 var _n_kwinit
: TKwinit
1957 fun n_kwinit
: TKwinit do return _n_kwinit
1958 fun n_kwinit
=(n_kwinit
: TKwinit) do _n_kwinit
= n_kwinit
1960 fun n_args
: AExprs do return _n_args
1961 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1965 # Whatever looks-like a call of the brackets `[]` operator.
1966 abstract class ABraFormExpr
1969 fun n_args
: AExprs do return _n_args
1970 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1974 # A call of the brackets operator. eg `x[y,z]`
1979 # A setter call of the bracket operator. eg `x[y,z]=t`
1980 class ABraAssignExpr
1982 super AAssignFormExpr
1985 # Whatever is an access to a local variable
1986 abstract class AVarFormExpr
1989 fun n_id
: TId do return _n_id
1990 fun n_id
=(n_id
: TId) do _n_id
= n_id
1994 # A complex setter call of the bracket operator. eg `x[y,z]+=t`
1995 class ABraReassignExpr
1997 super ASendReassignFormExpr
2000 # A local variable read access.
2001 # The parser cannot instantiate them, see `ACallExpr`.
2006 # A local variable simple assigment access
2007 # The parser cannot instantiate them, see `ACallAssignExpr`.
2008 class AVarAssignExpr
2010 super AAssignFormExpr
2013 # A local variable complex assignment access
2014 # The parser cannot instantiate them, see `ACallReassignExpr`.
2015 class AVarReassignExpr
2017 super AReassignFormExpr
2020 # A literal range, open or closed
2021 abstract class ARangeExpr
2024 fun n_expr
: AExpr do return _n_expr
2025 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2027 fun n_expr2
: AExpr do return _n_expr2
2028 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
2032 # A closed literal range. eg `[x..y]`
2036 fun n_obra
: TObra do return _n_obra
2037 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
2039 fun n_cbra
: TCbra do return _n_cbra
2040 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
2044 # An open literal range. eg `[x..y[`
2048 fun n_obra
: TObra do return _n_obra
2049 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
2051 fun n_cbra
: TObra do return _n_cbra
2052 fun n_cbra
=(n_cbra
: TObra) do _n_cbra
= n_cbra
2056 # A literal array. eg. `[x,y,z]`
2059 var _n_exprs
: AExprs
2060 fun n_exprs
: AExprs do return _n_exprs
2061 fun n_exprs
=(n_exprs
: AExprs) do _n_exprs
= n_exprs
2068 var _n_kwself
: nullable TKwself
2069 fun n_kwself
: nullable TKwself do return _n_kwself
2070 fun n_kwself
=(n_kwself
: nullable TKwself) do _n_kwself
= n_kwself
2074 # When there is no explicit receiver, `self` is implicit
2075 class AImplicitSelfExpr
2079 # A `true` boolean literal constant
2082 var _n_kwtrue
: TKwtrue
2083 fun n_kwtrue
: TKwtrue do return _n_kwtrue
2084 fun n_kwtrue
=(n_kwtrue
: TKwtrue) do _n_kwtrue
= n_kwtrue
2087 # A `false` boolean literal constant
2090 var _n_kwfalse
: TKwfalse
2091 fun n_kwfalse
: TKwfalse do return _n_kwfalse
2092 fun n_kwfalse
=(n_kwfalse
: TKwfalse) do _n_kwfalse
= n_kwfalse
2095 # A `null` literal constant
2098 var _n_kwnull
: TKwnull
2099 fun n_kwnull
: TKwnull do return _n_kwnull
2100 fun n_kwnull
=(n_kwnull
: TKwnull) do _n_kwnull
= n_kwnull
2103 # An integer literal
2107 # An integer literal in decimal format
2110 var _n_number
: TNumber
2111 fun n_number
: TNumber do return _n_number
2112 fun n_number
=(n_number
: TNumber) do _n_number
= n_number
2115 # An integer literal in hexadecimal format
2118 var _n_hex_number
: THexNumber
2119 fun n_hex_number
: THexNumber do return _n_hex_number
2120 fun n_hex_number
=(n_hex_number
: THexNumber) do _n_hex_number
= n_hex_number
2126 var _n_float
: TFloat
2127 fun n_float
: TFloat do return _n_float
2128 fun n_float
=(n_float
: TFloat) do _n_float
= n_float
2131 # A character literal
2135 fun n_char
: TChar do return _n_char
2136 fun n_char
=(n_char
: TChar) do _n_char
= n_char
2140 abstract class AStringFormExpr
2142 var _n_string
: Token
2143 fun n_string
: Token do return _n_string
2144 fun n_string
=(n_string
: Token) do _n_string
= n_string
2148 # A simple string. eg. `"abc"`
2150 super AStringFormExpr
2153 # The start of a superstring. eg `"abc{`
2154 class AStartStringExpr
2155 super AStringFormExpr
2158 # The middle of a superstring. eg `}abc{`
2159 class AMidStringExpr
2160 super AStringFormExpr
2163 # The end of a superstrng. eg `}abc"`
2164 class AEndStringExpr
2165 super AStringFormExpr
2168 # A superstring literal. eg `"a{x}b{y}c"`
2169 # Each part is modelized a sequence of expression. eg. `["a{, x, }b{, y, }c"]`
2170 class ASuperstringExpr
2172 var n_exprs
: ANodes[AExpr] = new ANodes[AExpr](self)
2176 # A simple parenthesis. eg `(x)`
2180 fun n_opar
: TOpar do return _n_opar
2181 fun n_opar
=(n_opar
: TOpar) do _n_opar
= n_opar
2183 fun n_cpar
: TCpar do return _n_cpar
2184 fun n_cpar
=(n_cpar
: TCpar) do _n_cpar
= n_cpar
2188 # Whatevej just contains (and mimic) an other expression
2189 abstract class AProxyExpr
2192 fun n_expr
: AExpr do return _n_expr
2193 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2197 # A type cast. eg `x.as(T)`
2201 fun n_expr
: AExpr do return _n_expr
2202 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2204 fun n_kwas
: TKwas do return _n_kwas
2205 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
2206 var _n_opar
: nullable TOpar = null
2207 fun n_opar
: nullable TOpar do return _n_opar
2208 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2210 fun n_type
: AType do return _n_type
2211 fun n_type
=(n_type
: AType) do _n_type
= n_type
2212 var _n_cpar
: nullable TCpar = null
2213 fun n_cpar
: nullable TCpar do return _n_cpar
2214 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2218 # A as-not-null cast. eg `x.as(not null)`
2219 class AAsNotnullExpr
2222 fun n_expr
: AExpr do return _n_expr
2223 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2225 fun n_kwas
: TKwas do return _n_kwas
2226 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
2227 var _n_opar
: nullable TOpar = null
2228 fun n_opar
: nullable TOpar do return _n_opar
2229 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2230 var _n_kwnot
: TKwnot
2231 fun n_kwnot
: TKwnot do return _n_kwnot
2232 fun n_kwnot
=(n_kwnot
: TKwnot) do _n_kwnot
= n_kwnot
2233 var _n_kwnull
: TKwnull
2234 fun n_kwnull
: TKwnull do return _n_kwnull
2235 fun n_kwnull
=(n_kwnull
: TKwnull) do _n_kwnull
= n_kwnull
2236 var _n_cpar
: nullable TCpar = null
2237 fun n_cpar
: nullable TCpar do return _n_cpar
2238 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2242 # A is-set check of old-style attributes. eg `isset x._a`
2243 class AIssetAttrExpr
2245 var _n_kwisset
: TKwisset
2246 fun n_kwisset
: TKwisset do return _n_kwisset
2247 fun n_kwisset
=(n_kwisset
: TKwisset) do _n_kwisset
= n_kwisset
2251 # A elyspis notation used to pass an expression as it in a vararg parameter
2255 fun n_expr
: AExpr do return _n_expr
2256 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2257 var _n_dotdotdot
: TDotdotdot
2258 fun n_dotdotdot
: TDotdotdot do return _n_dotdotdot
2259 fun n_dotdotdot
=(n_dotdotdot
: TDotdotdot) do _n_dotdotdot
= n_dotdotdot
2263 # A list of expression separated with commas (arguments for instance)
2264 abstract class AExprs
2266 var n_exprs
: ANodes[AExpr] = new ANodes[AExpr](self)
2271 class ADebugTypeExpr
2273 var _n_kwdebug
: TKwdebug
2274 fun n_kwdebug
: TKwdebug do return _n_kwdebug
2275 fun n_kwdebug
=(n_kwdebug
: TKwdebug) do _n_kwdebug
= n_kwdebug
2276 var _n_kwtype
: TKwtype
2277 fun n_kwtype
: TKwtype do return _n_kwtype
2278 fun n_kwtype
=(n_kwtype
: TKwtype) do _n_kwtype
= n_kwtype
2280 fun n_expr
: AExpr do return _n_expr
2281 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2283 fun n_type
: AType do return _n_type
2284 fun n_type
=(n_type
: AType) do _n_type
= n_type
2288 # A simple list of expressions
2293 # A list of expressions enclosed in parentheses
2297 fun n_opar
: TOpar do return _n_opar
2298 fun n_opar
=(n_opar
: TOpar) do _n_opar
= n_opar
2300 fun n_cpar
: TCpar do return _n_cpar
2301 fun n_cpar
=(n_cpar
: TCpar) do _n_cpar
= n_cpar
2305 # A list of expressions enclosed in brackets
2309 fun n_obra
: TObra do return _n_obra
2310 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
2312 fun n_cbra
: TCbra do return _n_cbra
2313 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
2317 # A complex assignment operator. eg `+=`
2318 abstract class AAssignOp
2323 var _n_pluseq
: TPluseq
2324 fun n_pluseq
: TPluseq do return _n_pluseq
2325 fun n_pluseq
=(n_pluseq
: TPluseq) do _n_pluseq
= n_pluseq
2328 class AMinusAssignOp
2330 var _n_minuseq
: TMinuseq
2331 fun n_minuseq
: TMinuseq do return _n_minuseq
2332 fun n_minuseq
=(n_minuseq
: TMinuseq) do _n_minuseq
= n_minuseq
2338 var _n_quad
: nullable TQuad = null
2339 fun n_quad
: nullable TQuad do return _n_quad
2340 fun n_quad
=(n_quad
: nullable TQuad) do _n_quad
= n_quad
2341 var n_path
: ANodes[TId] = new ANodes[TId](self)
2343 fun n_id
: TId do return _n_id
2344 fun n_id
=(n_id
: TId) do _n_id
= n_id
2350 fun n_kwin
: TKwin do return _n_kwin
2351 fun n_kwin
=(n_kwin
: TKwin) do _n_kwin
= n_kwin
2352 var _n_string
: TString
2353 fun n_string
: TString do return _n_string
2354 fun n_string
=(n_string
: TString) do _n_string
= n_string
2357 class AExternCodeBlock
2359 var _n_in_language
: nullable AInLanguage = null
2360 fun n_in_language
: nullable AInLanguage do return _n_in_language
2361 fun n_in_language
=(n_in_language
: nullable AInLanguage) do _n_in_language
= n_in_language
2362 var _n_extern_code_segment
: TExternCodeSegment
2363 fun n_extern_code_segment
: TExternCodeSegment do return _n_extern_code_segment
2364 fun n_extern_code_segment
=(n_extern_code_segment
: TExternCodeSegment) do _n_extern_code_segment
= n_extern_code_segment
2369 var _n_quad
: nullable TQuad = null
2370 fun n_quad
: nullable TQuad do return _n_quad
2371 fun n_quad
=(n_quad
: nullable TQuad) do _n_quad
= n_quad
2372 var n_id
: ANodes[TId] = new ANodes[TId](self)
2373 var _n_classid
: nullable TClassid = null
2374 fun n_classid
: nullable TClassid do return _n_classid
2375 fun n_classid
=(n_classid
: nullable TClassid) do _n_classid
= n_classid
2379 # A documentation of a definition
2380 # It contains the block of comments just above the declaration
2383 var n_comment
: ANodes[TComment] = new ANodes[TComment](self)
2389 var _n_at
: nullable TAt = null
2390 fun n_at
: nullable TAt do return _n_at
2391 fun n_at
=(n_at
: nullable TAt) do _n_at
= n_at
2392 var _n_opar
: nullable TOpar = null
2393 fun n_opar
: nullable TOpar do return _n_opar
2394 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2395 var n_items
: ANodes[AAnnotation] = new ANodes[AAnnotation](self)
2396 var _n_cpar
: nullable TCpar = null
2397 fun n_cpar
: nullable TCpar do return _n_cpar
2398 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2403 var _n_doc
: nullable ADoc = null
2404 fun n_doc
: nullable ADoc do return _n_doc
2405 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
2406 var _n_kwredef
: nullable TKwredef = null
2407 fun n_kwredef
: nullable TKwredef do return _n_kwredef
2408 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
2409 var _n_visibility
: nullable AVisibility
2410 fun n_visibility
: nullable AVisibility do return _n_visibility
2411 fun n_visibility
=(n_visibility
: nullable AVisibility) do _n_visibility
= n_visibility
2413 fun n_atid
: AAtid do return _n_atid
2414 fun n_atid
=(n_atid
: AAtid) do _n_atid
= n_atid
2415 var _n_opar
: nullable TOpar = null
2416 fun n_opar
: nullable TOpar do return _n_opar
2417 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2418 var n_args
: ANodes[AAtArg] = new ANodes[AAtArg](self)
2419 var _n_cpar
: nullable TCpar = null
2420 fun n_cpar
: nullable TCpar do return _n_cpar
2421 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2424 abstract class AAtArg
2430 fun n_type
: AType do return _n_type
2431 fun n_type
=(n_type
: AType) do _n_type
= n_type
2437 fun n_expr
: AExpr do return _n_expr
2438 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2444 abstract class AAtid
2447 fun n_id
: Token do return _n_id
2448 fun n_id
=(n_id
: Token) do _n_id
= n_id
2460 class AKwreadableAtid
2463 class AKwwritableAtid
2470 # The root of the AST
2473 var _n_base
: nullable AModule
2474 fun n_base
: nullable AModule do return _n_base
2475 fun n_base
=(n_base
: nullable AModule) do _n_base
= n_base
2477 fun n_eof
: EOF do return _n_eof
2478 fun n_eof
=(n_eof
: EOF) do _n_eof
= n_eof
2479 init(n_base
: nullable AModule, n_eof
: EOF)
2481 self._n_base
= n_base