99fb9c6a6ed9f6ab435bec1f35a66d567cbe908f
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.
21 # Root of the AST class-hierarchy
23 var _location
: nullable Location = null
25 # Location is set during AST building. Once built, location cannon be null.
26 # However, manual instantiated nodes may need more care.
27 fun location
: Location do return _location
.as(not null)
29 # The location of the important part of the node (identifier or whatever)
30 fun hot_location
: Location do return location
32 # Display a message for the colored location of the node
33 fun debug
(message
: String)
35 sys
.stderr
.write
"{hot_location} {self.class_name}: {message}\n{hot_location.colored_line("0;32")}\n"
38 # Parent of the node in the AST
39 var parent
: nullable ANode = null
41 # The topmost ancestor of the element
42 # This just apply `parent` until the first one
48 if p
== null then return res
53 # The most specific common parent between `self` and `other`
54 # Return null if the two node are unrelated (distinct root)
55 fun common_parent
(other
: ANode): nullable ANode
57 # First, get the same depth
58 var s
: nullable ANode = self
59 var o
: nullable ANode = other
60 var d
= s
.depth
- o
.depth
69 assert o
.depth
== s
.depth
70 # Second, go up until same in found
78 # Number of nodes between `self` and the `root` of the AST
79 # ENSURE `self == self.root implies result == 0 `
80 # ENSURE `self != self.root implies result == self.parent.depth + 1`
87 if p
== null then return res
93 # Protect from invalid instantiation of nodes
96 # Replace a child with an other node in the AST
97 private fun replace_child
(old_child
: ANode, new_child
: nullable ANode) is abstract
99 # Detach a node from its parent
100 # Aborts if the node is not detashable. use `replace_with` instead
101 # REQUIRE: parent != null
102 # REQUIRE: is_detachable
103 # ENDURE: parent == null
106 assert parent
!= null
107 parent
.replace_child
(self, null)
111 # Replace itself with an other node in the AST
112 # REQUIRE: parent != null
113 # ENSURE: node.parent == old(parent)
114 # ENSURE: parent == null
115 fun replace_with
(node
: ANode)
117 assert parent
!= null
118 parent
.replace_child
(self, node
)
122 # Visit all nodes in order.
123 # Thus, call `v.enter_visit(e)` for each child `e`
124 fun visit_all
(v
: Visitor) is abstract
127 # A sequence of nodes
128 # There is a specifc class (instead of a using Array) to track the parent/child relation when nodes are added or removed
129 class ANodes[E
: ANode]
131 private var parent
: ANode
132 private var items
= new Array[E
]
133 redef fun iterator
do return items
.iterator
134 redef fun length
do return items
.length
135 redef fun is_empty
do return items
.is_empty
154 var res
= items
.shift
166 redef fun []=(index
, e
)
168 hook_remove
(self[index
])
172 redef fun remove_at
(index
)
174 hook_remove
(items
[index
])
175 items
.remove_at
(index
)
177 private fun hook_add
(e
: E
)
179 #assert e.parent == null
182 private fun hook_remove
(e
: E
)
184 assert e
.parent
== parent
188 # Used in parent contructor to fill elements
189 private fun unsafe_add_all
(nodes
: Collection[Object])
191 var parent
= self.parent
199 private fun replace_child
(old_child
: ANode, new_child
: nullable ANode): Bool
201 var parent
= self.parent
202 for i
in [0..length
[ do
203 if self[i
] == old_child
then
204 if new_child
!= null then
205 assert new_child
isa E
207 new_child
.parent
= parent
217 private fun visit_all
(v
: Visitor)
219 for n
in self do v
.enter_visit
(n
)
223 # Ancestor of all tokens
224 # A token is a node that has a `text` but no children.
228 # The raw content on the token
229 fun text
: String is abstract
230 fun text
=(text
: String) is abstract
232 # The previous token in the Lexer.
233 # May have disapeared in the AST
234 var prev_token
: nullable Token = null
236 # The next token in the Lexer.
237 # May have disapeared in the AST
238 var next_token
: nullable Token = null
240 # The verbatim blank text between `prev_token` and `self`
241 fun blank_before
: String
243 if prev_token
== null then return ""
244 var from
= prev_token
.location
.pend
+1
245 var to
= location
.pstart
246 return location
.file
.string
.substring
(from
,to-from
)
249 redef fun to_s
: String do
253 redef fun visit_all
(v
: Visitor) do end
254 redef fun replace_child
(old_child
: ANode, new_child
: nullable ANode) do end
257 redef class SourceFile
258 # The first token parser by the lexer
259 # May have disapeared in the final AST
260 var first_token
: nullable Token = null
262 # The first token parser by the lexer
263 # May have disapeared in the final AST
264 var last_token
: nullable Token = null
267 # Ancestor of all productions
268 # A production is a node without text but that usually has children.
272 fun location
=(l
: Location) do _location
= l
274 # All the annotations attached directly to the node
275 var _n_annotations
: nullable AAnnotations = null
276 fun n_annotations
: nullable AAnnotations do return _n_annotations
277 fun n_annotations
=(n_annotations
: nullable AAnnotations) do _n_annotations
= n_annotations
279 redef fun replace_with
(n
: ANode)
283 if n
._location
== null then n
._location
= _location
287 # Abstract standard visitor on the AST
288 abstract class Visitor
289 # What the visitor do when a node is visited
290 # Concrete visitors should implement this method.
292 protected fun visit
(e
: ANode) is abstract
294 # Ask the visitor to visit a given node.
295 # Usually automatically called by visit_all* methods.
296 # This method should not be redefined
297 fun enter_visit
(e
: nullable ANode)
299 if e
== null then return
300 var old
= _current_node
306 # The current visited node
307 var _current_node
: nullable ANode = null
308 fun current_node
: nullable ANode do return _current_node
309 fun current_node
=(current_node
: nullable ANode) do _current_node
= current_node
312 # Token of end of line (basically `\n`)
321 # Token of a line of comments
322 # Starts with the `#` and contains the final end-of-line (if any)
327 # A token associated with a keyword
328 abstract class TokenKeyword
332 return "keyword '{text}'"
516 # A token associated with an operator (and other lookalike symbols)
517 abstract class TokenOperator
521 return "operator '{text}'"
588 # A class (or formal type) identifier. They start with an uppercase.
593 do return "type identifier '{text}'"
597 # A standard identifier (variable, method...). They start with a lowercase.
602 do return "identifier '{text}'"
606 # An attribute identifier. They start with an underscore.
611 do return "attribute '{text}'"
615 # A token of a literal value (string, integer, etc).
616 abstract class TokenLiteral
620 do return "literal value '{text}'"
653 do return "malformed string {text}"
662 do return "malformed character {text}"
666 class TExternCodeSegment
690 # The main node of a Nit source-file
694 var _n_moduledecl
: nullable AModuledecl = null
695 fun n_moduledecl
: nullable AModuledecl do return _n_moduledecl
696 fun n_moduledecl
=(n_moduledecl
: nullable AModuledecl) do _n_moduledecl
= n_moduledecl
697 var n_imports
: ANodes[AImport] = new ANodes[AImport](self)
698 var n_extern_code_blocks
: ANodes[AExternCodeBlock] = new ANodes[AExternCodeBlock](self)
699 var n_classdefs
: ANodes[AClassdef] = new ANodes[AClassdef](self)
703 # The declaration of the module with the documentation, name, and annotations
706 var _n_doc
: nullable ADoc = null
707 fun n_doc
: nullable ADoc do return _n_doc
708 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
709 var _n_kwmodule
: TKwmodule
710 fun n_kwmodule
: TKwmodule do return _n_kwmodule
711 fun n_kwmodule
=(n_kwmodule
: TKwmodule) do _n_kwmodule
= n_kwmodule
712 var _n_name
: AModuleName
713 fun n_name
: AModuleName do return _n_name
714 fun n_name
=(n_name
: AModuleName) do _n_name
= n_name
718 # A import clause of a module
719 abstract class AImport
723 # A standard import clause. eg `import x`
726 var _n_visibility
: AVisibility
727 fun n_visibility
: AVisibility do return _n_visibility
728 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
729 var _n_kwimport
: TKwimport
730 fun n_kwimport
: TKwimport do return _n_kwimport
731 fun n_kwimport
=(n_kwimport
: TKwimport) do _n_kwimport
= n_kwimport
732 var _n_name
: AModuleName
733 fun n_name
: AModuleName do return _n_name
734 fun n_name
=(n_name
: AModuleName) do _n_name
= n_name
738 # The special import clause of the kernel module. eg `import end`
741 var _n_visibility
: AVisibility
742 fun n_visibility
: AVisibility do return _n_visibility
743 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
744 var _n_kwimport
: TKwimport
745 fun n_kwimport
: TKwimport do return _n_kwimport
746 fun n_kwimport
=(n_kwimport
: TKwimport) do _n_kwimport
= n_kwimport
748 fun n_kwend
: TKwend do return _n_kwend
749 fun n_kwend
=(n_kwend
: TKwend) do _n_kwend
= n_kwend
753 # A visibility modifier
755 # The public visibility is an empty production (no keyword).
757 # Note: even if some visibilities are only valid on some placse (for instance, no `protected` class or no `intrude` method)
758 # the parser has no such a restriction, therefore the semantic phases has to check that the visibilities make sense.
759 abstract class AVisibility
762 class APublicVisibility
764 var _n_kwpublic
: nullable TKwpublic
765 fun n_kwpublic
: nullable TKwpublic do return _n_kwpublic
766 fun n_kwpublic
=(n_kwpublic
: nullable TKwpublic) do _n_kwpublic
= n_kwpublic
769 class APrivateVisibility
771 var _n_kwprivate
: TKwprivate
772 fun n_kwprivate
: TKwprivate do return _n_kwprivate
773 fun n_kwprivate
=(n_kwprivate
: TKwprivate) do _n_kwprivate
= n_kwprivate
776 class AProtectedVisibility
778 var _n_kwprotected
: TKwprotected
779 fun n_kwprotected
: TKwprotected do return _n_kwprotected
780 fun n_kwprotected
=(n_kwprotected
: TKwprotected) do _n_kwprotected
= n_kwprotected
783 class AIntrudeVisibility
785 var _n_kwintrude
: TKwintrude
786 fun n_kwintrude
: TKwintrude do return _n_kwintrude
787 fun n_kwintrude
=(n_kwintrude
: TKwintrude) do _n_kwintrude
= n_kwintrude
792 # While most definition are `AStdClassdef`
793 # There is tow special case of class definition
794 abstract class AClassdef
796 var n_propdefs
: ANodes[APropdef] = new ANodes[APropdef](self)
800 # A standard class definition with a name, superclasses and properties
803 var _n_doc
: nullable ADoc = null
804 fun n_doc
: nullable ADoc do return _n_doc
805 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
806 var _n_kwredef
: nullable TKwredef = null
807 fun n_kwredef
: nullable TKwredef do return _n_kwredef
808 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
809 var _n_visibility
: AVisibility
810 fun n_visibility
: AVisibility do return _n_visibility
811 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
812 var _n_classkind
: AClasskind
813 fun n_classkind
: AClasskind do return _n_classkind
814 fun n_classkind
=(n_classkind
: AClasskind) do _n_classkind
= n_classkind
815 var _n_id
: nullable TClassid = null
816 fun n_id
: nullable TClassid do return _n_id
817 fun n_id
=(n_id
: nullable TClassid) do _n_id
= n_id
818 var n_formaldefs
: ANodes[AFormaldef] = new ANodes[AFormaldef](self)
819 var _n_extern_code_block
: nullable AExternCodeBlock = null
820 fun n_extern_code_block
: nullable AExternCodeBlock do return _n_extern_code_block
821 fun n_extern_code_block
=(n_extern_code_block
: nullable AExternCodeBlock) do _n_extern_code_block
= n_extern_code_block
822 var n_superclasses
: ANodes[ASuperclass] = new ANodes[ASuperclass](self)
824 fun n_kwend
: TKwend do return _n_kwend
825 fun n_kwend
=(n_kwend
: TKwend) do _n_kwend
= n_kwend
826 redef fun hot_location
do return n_id
.location
830 # The implicit class definition of the implicit main method
835 # The implicit class definition of the top-level methods
840 # The modifier for the kind of class (abstract, interface, etc.)
841 abstract class AClasskind
844 class AConcreteClasskind
846 var _n_kwclass
: TKwclass
847 fun n_kwclass
: TKwclass do return _n_kwclass
848 fun n_kwclass
=(n_kwclass
: TKwclass) do _n_kwclass
= n_kwclass
851 class AAbstractClasskind
853 var _n_kwabstract
: TKwabstract
854 fun n_kwabstract
: TKwabstract do return _n_kwabstract
855 fun n_kwabstract
=(n_kwabstract
: TKwabstract) do _n_kwabstract
= n_kwabstract
856 var _n_kwclass
: TKwclass
857 fun n_kwclass
: TKwclass do return _n_kwclass
858 fun n_kwclass
=(n_kwclass
: TKwclass) do _n_kwclass
= n_kwclass
861 class AInterfaceClasskind
863 var _n_kwinterface
: TKwinterface
864 fun n_kwinterface
: TKwinterface do return _n_kwinterface
865 fun n_kwinterface
=(n_kwinterface
: TKwinterface) do _n_kwinterface
= n_kwinterface
870 var _n_kwenum
: TKwenum
871 fun n_kwenum
: TKwenum do return _n_kwenum
872 fun n_kwenum
=(n_kwenum
: TKwenum) do _n_kwenum
= n_kwenum
875 class AExternClasskind
877 var _n_kwextern
: TKwextern
878 fun n_kwextern
: TKwextern do return _n_kwextern
879 fun n_kwextern
=(n_kwextern
: TKwextern) do _n_kwextern
= n_kwextern
880 var _n_kwclass
: nullable TKwclass = null
881 fun n_kwclass
: nullable TKwclass do return _n_kwclass
882 fun n_kwclass
=(n_kwclass
: nullable TKwclass) do _n_kwclass
= n_kwclass
886 # The definition of a formal generic parameter type. eg `X: Y`
890 fun n_id
: TClassid do return _n_id
891 fun n_id
=(n_id
: TClassid) do _n_id
= n_id
892 # The bound of the parameter type
893 var _n_type
: nullable AType = null
894 fun n_type
: nullable AType do return _n_type
895 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
899 # A super-class. eg `super X`
902 var _n_kwsuper
: TKwsuper
903 fun n_kwsuper
: TKwsuper do return _n_kwsuper
904 fun n_kwsuper
=(n_kwsuper
: TKwsuper) do _n_kwsuper
= n_kwsuper
906 fun n_type
: AType do return _n_type
907 fun n_type
=(n_type
: AType) do _n_type
= n_type
911 # The definition of a property
912 abstract class APropdef
914 var _n_doc
: nullable ADoc = null
915 fun n_doc
: nullable ADoc do return _n_doc
916 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
917 var _n_kwredef
: nullable TKwredef = null
918 fun n_kwredef
: nullable TKwredef do return _n_kwredef
919 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
920 var _n_visibility
: nullable AVisibility = null
921 fun n_visibility
: nullable AVisibility do return _n_visibility
922 fun n_visibility
=(n_visibility
: nullable AVisibility) do _n_visibility
= n_visibility
925 # A definition of an attribute
926 # For historical reason, old-syle and new-style attributes use the same `ANode` sub-class
930 fun n_kwvar
: TKwvar do return _n_kwvar
931 fun n_kwvar
=(n_kwvar
: TKwvar) do _n_kwvar
= n_kwvar
933 # The identifier for an old-style attribute (null if new-style)
934 var _n_id
: nullable TAttrid
935 fun n_id
: nullable TAttrid do return _n_id
936 fun n_id
=(n_id
: nullable TAttrid) do _n_id
= n_id
938 # The identifier for a new-style attribute (null if old-style)
939 var _n_id2
: nullable TId
940 fun n_id2
: nullable TId do return _n_id2
941 fun n_id2
=(n_id2
: nullable TId) do _n_id2
= n_id2
943 var _n_type
: nullable AType = null
944 fun n_type
: nullable AType do return _n_type
945 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
946 var _n_readable
: nullable AAble = null
947 fun n_readable
: nullable AAble do return _n_readable
948 fun n_readable
=(n_readable
: nullable AAble) do _n_readable
= n_readable
949 var _n_writable
: nullable AAble = null
950 fun n_writable
: nullable AAble do return _n_writable
951 fun n_writable
=(n_writable
: nullable AAble) do _n_writable
= n_writable
953 # The initial value, if any
954 var _n_expr
: nullable AExpr = null
955 fun n_expr
: nullable AExpr do return _n_expr
956 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
957 redef fun hot_location
959 if n_id
!= null then return n_id
.location
else return n_id2
.location
964 # A definition of all kind of method (including constructors)
965 abstract class AMethPropdef
967 var _n_kwmeth
: nullable TKwmeth = null
968 fun n_kwmeth
: nullable TKwmeth do return _n_kwmeth
969 fun n_kwmeth
=(n_kwmeth
: nullable TKwmeth) do _n_kwmeth
= n_kwmeth
970 var _n_kwinit
: nullable TKwinit = null
971 fun n_kwinit
: nullable TKwinit do return _n_kwinit
972 fun n_kwinit
=(n_kwinit
: nullable TKwinit) do _n_kwinit
= n_kwinit
973 var _n_kwnew
: nullable TKwnew = null
974 fun n_kwnew
: nullable TKwnew do return _n_kwnew
975 fun n_kwnew
=(n_kwnew
: nullable TKwnew) do _n_kwnew
= n_kwnew
976 var _n_methid
: nullable AMethid = null
977 fun n_methid
: nullable AMethid do return _n_methid
978 fun n_methid
=(n_methid
: nullable AMethid) do _n_methid
= n_methid
979 var _n_signature
: nullable ASignature = null
980 fun n_signature
: nullable ASignature do return _n_signature
981 fun n_signature
=(n_signature
: nullable ASignature) do _n_signature
= n_signature
982 var _n_block
: nullable AExpr = null
983 fun n_block
: nullable AExpr do return _n_block
984 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
985 var _n_extern
: nullable TString = null
986 fun n_extern
: nullable TString do return _n_extern
987 fun n_extern
=(n_extern
: nullable TString) do _n_extern
= n_extern
988 var _n_extern_calls
: nullable AExternCalls = null
989 fun n_extern_calls
: nullable AExternCalls do return _n_extern_calls
990 fun n_extern_calls
=(n_extern_calls
: nullable AExternCalls) do _n_extern_calls
= n_extern_calls
991 var _n_extern_code_block
: nullable AExternCodeBlock = null
992 fun n_extern_code_block
: nullable AExternCodeBlock do return _n_extern_code_block
993 fun n_extern_code_block
=(n_extern_code_block
: nullable AExternCodeBlock) do _n_extern_code_block
= n_extern_code_block
994 redef fun hot_location
996 if n_methid
!= null then
997 return n_methid
.location
998 else if n_kwinit
!= null then
999 return n_kwinit
.location
1000 else if n_kwnew
!= null then
1001 return n_kwnew
.location
1008 # A method marked abstract
1009 # *deferred* is a old synonynmous of *abstract* that comes from PRM, that comes from Eiffel.
1010 class ADeferredMethPropdef
1014 # A method marked intern
1015 class AInternMethPropdef
1019 # A method of a constructor marked extern
1020 abstract class AExternPropdef
1024 # A method marked extern
1025 class AExternMethPropdef
1026 super AExternPropdef
1029 # A method with a body
1030 class AConcreteMethPropdef
1035 abstract class AInitPropdef
1039 # A constructor with a body
1040 class AConcreteInitPropdef
1041 super AConcreteMethPropdef
1045 class AInternNewPropdef
1046 super AInternMethPropdef
1050 # A constructor marked extern (defined with the `new` keyword)
1051 class AExternInitPropdef
1052 super AExternPropdef
1056 # The implicit main method
1057 class AMainMethPropdef
1058 super AConcreteMethPropdef
1061 # Declaration of callbacks for extern methods
1064 var _n_kwimport
: TKwimport
1065 fun n_kwimport
: TKwimport do return _n_kwimport
1066 fun n_kwimport
=(n_kwimport
: TKwimport) do _n_kwimport
= n_kwimport
1067 var n_extern_calls
: ANodes[AExternCall] = new ANodes[AExternCall](self)
1070 abstract class AExternCall
1073 abstract class APropExternCall
1076 class ALocalPropExternCall
1077 super APropExternCall
1078 var _n_methid
: AMethid
1079 fun n_methid
: AMethid do return _n_methid
1080 fun n_methid
=(n_methid
: AMethid) do _n_methid
= n_methid
1083 class AFullPropExternCall
1084 super APropExternCall
1086 fun n_type
: AType do return _n_type
1087 fun n_type
=(n_type
: AType) do _n_type
= n_type
1088 var _n_dot
: nullable TDot = null
1089 fun n_dot
: nullable TDot do return _n_dot
1090 fun n_dot
=(n_dot
: nullable TDot) do _n_dot
= n_dot
1091 var _n_methid
: AMethid
1092 fun n_methid
: AMethid do return _n_methid
1093 fun n_methid
=(n_methid
: AMethid) do _n_methid
= n_methid
1096 class AInitPropExternCall
1097 super APropExternCall
1099 fun n_type
: AType do return _n_type
1100 fun n_type
=(n_type
: AType) do _n_type
= n_type
1103 class ASuperExternCall
1105 var _n_kwsuper
: TKwsuper
1106 fun n_kwsuper
: TKwsuper do return _n_kwsuper
1107 fun n_kwsuper
=(n_kwsuper
: TKwsuper) do _n_kwsuper
= n_kwsuper
1110 abstract class ACastExternCall
1113 class ACastAsExternCall
1114 super ACastExternCall
1115 var _n_from_type
: AType
1116 fun n_from_type
: AType do return _n_from_type
1117 fun n_from_type
=(n_from_type
: AType) do _n_from_type
= n_from_type
1118 var _n_dot
: nullable TDot = null
1119 fun n_dot
: nullable TDot do return _n_dot
1120 fun n_dot
=(n_dot
: nullable TDot) do _n_dot
= n_dot
1122 fun n_kwas
: TKwas do return _n_kwas
1123 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
1124 var _n_to_type
: AType
1125 fun n_to_type
: AType do return _n_to_type
1126 fun n_to_type
=(n_to_type
: AType) do _n_to_type
= n_to_type
1129 class AAsNullableExternCall
1130 super ACastExternCall
1132 fun n_type
: AType do return _n_type
1133 fun n_type
=(n_type
: AType) do _n_type
= n_type
1135 fun n_kwas
: TKwas do return _n_kwas
1136 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
1137 var _n_kwnullable
: TKwnullable
1138 fun n_kwnullable
: TKwnullable do return _n_kwnullable
1139 fun n_kwnullable
=(n_kwnullable
: TKwnullable) do _n_kwnullable
= n_kwnullable
1142 class AAsNotNullableExternCall
1143 super ACastExternCall
1145 fun n_type
: AType do return _n_type
1146 fun n_type
=(n_type
: AType) do _n_type
= n_type
1148 fun n_kwas
: TKwas do return _n_kwas
1149 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
1150 var _n_kwnot
: TKwnot
1151 fun n_kwnot
: TKwnot do return _n_kwnot
1152 fun n_kwnot
=(n_kwnot
: TKwnot) do _n_kwnot
= n_kwnot
1153 var _n_kwnullable
: TKwnullable
1154 fun n_kwnullable
: TKwnullable do return _n_kwnullable
1155 fun n_kwnullable
=(n_kwnullable
: TKwnullable) do _n_kwnullable
= n_kwnullable
1159 # A definition of a virtual type
1162 var _n_kwtype
: TKwtype
1163 fun n_kwtype
: TKwtype do return _n_kwtype
1164 fun n_kwtype
=(n_kwtype
: TKwtype) do _n_kwtype
= n_kwtype
1166 fun n_id
: TClassid do return _n_id
1167 fun n_id
=(n_id
: TClassid) do _n_id
= n_id
1169 fun n_type
: AType do return _n_type
1170 fun n_type
=(n_type
: AType) do _n_type
= n_type
1174 # A `writable` or `readable` modifier
1175 abstract class AAble
1177 var _n_visibility
: nullable AVisibility = null
1178 fun n_visibility
: nullable AVisibility do return _n_visibility
1179 fun n_visibility
=(n_visibility
: nullable AVisibility) do _n_visibility
= n_visibility
1180 var _n_kwredef
: nullable TKwredef = null
1181 fun n_kwredef
: nullable TKwredef do return _n_kwredef
1182 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
1186 # A `readable` modifier
1189 var _n_kwreadable
: TKwreadable
1190 fun n_kwreadable
: TKwreadable do return _n_kwreadable
1191 fun n_kwreadable
=(n_kwreadable
: TKwreadable) do _n_kwreadable
= n_kwreadable
1195 # A `writable` modifier
1198 var _n_kwwritable
: TKwwritable
1199 fun n_kwwritable
: TKwwritable do return _n_kwwritable
1200 fun n_kwwritable
=(n_kwwritable
: TKwwritable) do _n_kwwritable
= n_kwwritable
1204 # The identifier of a method in a method declaration.
1205 # There is a specific class because of operator and setters.
1206 abstract class AMethid
1212 fun n_id
: TId do return _n_id
1213 fun n_id
=(n_id
: TId) do _n_id
= n_id
1219 fun n_plus
: TPlus do return _n_plus
1220 fun n_plus
=(n_plus
: TPlus) do _n_plus
= n_plus
1225 var _n_minus
: TMinus
1226 fun n_minus
: TMinus do return _n_minus
1227 fun n_minus
=(n_minus
: TMinus) do _n_minus
= n_minus
1233 fun n_star
: TStar do return _n_star
1234 fun n_star
=(n_star
: TStar) do _n_star
= n_star
1239 var _n_slash
: TSlash
1240 fun n_slash
: TSlash do return _n_slash
1241 fun n_slash
=(n_slash
: TSlash) do _n_slash
= n_slash
1244 class APercentMethid
1246 var _n_percent
: TPercent
1247 fun n_percent
: TPercent do return _n_percent
1248 fun n_percent
=(n_percent
: TPercent) do _n_percent
= n_percent
1254 fun n_eq
: TEq do return _n_eq
1255 fun n_eq
=(n_eq
: TEq) do _n_eq
= n_eq
1261 fun n_ne
: TNe do return _n_ne
1262 fun n_ne
=(n_ne
: TNe) do _n_ne
= n_ne
1268 fun n_le
: TLe do return _n_le
1269 fun n_le
=(n_le
: TLe) do _n_le
= n_le
1275 fun n_ge
: TGe do return _n_ge
1276 fun n_ge
=(n_ge
: TGe) do _n_ge
= n_ge
1282 fun n_lt
: TLt do return _n_lt
1283 fun n_lt
=(n_lt
: TLt) do _n_lt
= n_lt
1289 fun n_gt
: TGt do return _n_gt
1290 fun n_gt
=(n_gt
: TGt) do _n_gt
= n_gt
1296 fun n_ll
: TLl do return _n_ll
1297 fun n_ll
=(n_ll
: TLl) do _n_ll
= n_ll
1303 fun n_gg
: TGg do return _n_gg
1304 fun n_gg
=(n_gg
: TGg) do _n_gg
= n_gg
1310 fun n_obra
: TObra do return _n_obra
1311 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
1313 fun n_cbra
: TCbra do return _n_cbra
1314 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
1317 class AStarshipMethid
1319 var _n_starship
: TStarship
1320 fun n_starship
: TStarship do return _n_starship
1321 fun n_starship
=(n_starship
: TStarship) do _n_starship
= n_starship
1327 fun n_id
: TId do return _n_id
1328 fun n_id
=(n_id
: TId) do _n_id
= n_id
1329 var _n_assign
: TAssign
1330 fun n_assign
: TAssign do return _n_assign
1331 fun n_assign
=(n_assign
: TAssign) do _n_assign
= n_assign
1334 class ABraassignMethid
1337 fun n_obra
: TObra do return _n_obra
1338 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
1340 fun n_cbra
: TCbra do return _n_cbra
1341 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
1342 var _n_assign
: TAssign
1343 fun n_assign
: TAssign do return _n_assign
1344 fun n_assign
=(n_assign
: TAssign) do _n_assign
= n_assign
1348 # A signature in a method definition. eg `(x,y:X,z:Z):T`
1351 var _n_opar
: nullable TOpar = null
1352 fun n_opar
: nullable TOpar do return _n_opar
1353 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
1354 var n_params
: ANodes[AParam] = new ANodes[AParam](self)
1355 var _n_cpar
: nullable TCpar = null
1356 fun n_cpar
: nullable TCpar do return _n_cpar
1357 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
1358 var _n_type
: nullable AType = null
1359 fun n_type
: nullable AType do return _n_type
1360 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
1364 # A parameter definition in a signature. eg `x:X`
1368 fun n_id
: TId do return _n_id
1369 fun n_id
=(n_id
: TId) do _n_id
= n_id
1370 var _n_type
: nullable AType = null
1371 fun n_type
: nullable AType do return _n_type
1372 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
1373 var _n_dotdotdot
: nullable TDotdotdot = null
1374 fun n_dotdotdot
: nullable TDotdotdot do return _n_dotdotdot
1375 fun n_dotdotdot
=(n_dotdotdot
: nullable TDotdotdot) do _n_dotdotdot
= n_dotdotdot
1379 # A static type. eg `nullable X[Y]`
1382 var _n_kwnullable
: nullable TKwnullable = null
1383 fun n_kwnullable
: nullable TKwnullable do return _n_kwnullable
1384 fun n_kwnullable
=(n_kwnullable
: nullable TKwnullable) do _n_kwnullable
= n_kwnullable
1386 # The name of the class or of the formal type
1388 fun n_id
: TClassid do return _n_id
1389 fun n_id
=(n_id
: TClassid) do _n_id
= n_id
1391 # Type arguments for a generic type
1392 var n_types
: ANodes[AType] = new ANodes[AType](self)
1396 # A label at the end of a block or in a break/continue statement. eg `label x`
1399 var _n_kwlabel
: TKwlabel
1400 fun n_kwlabel
: TKwlabel do return _n_kwlabel
1401 fun n_kwlabel
=(n_kwlabel
: TKwlabel) do _n_kwlabel
= n_kwlabel
1402 var _n_id
: nullable TId
1403 fun n_id
: nullable TId do return _n_id
1404 fun n_id
=(n_id
: nullable TId) do _n_id
= n_id
1408 # Expression and statements
1409 # From a AST point of view there is no distinction between statement and expressions (even if the parser has to distinguish them)
1410 abstract class AExpr
1414 # A sequence of AExpr (usually statements)
1415 # The last AExpr gives the value of the whole block
1418 var n_expr
: ANodes[AExpr] = new ANodes[AExpr](self)
1419 var _n_kwend
: nullable TKwend = null
1420 fun n_kwend
: nullable TKwend do return _n_kwend
1421 fun n_kwend
=(n_kwend
: nullable TKwend) do _n_kwend
= n_kwend
1425 # A declaration of a local variable. eg `var x: X = y`
1428 var _n_kwvar
: TKwvar
1429 fun n_kwvar
: TKwvar do return _n_kwvar
1430 fun n_kwvar
=(n_kwvar
: TKwvar) do _n_kwvar
= n_kwvar
1432 fun n_id
: TId do return _n_id
1433 fun n_id
=(n_id
: TId) do _n_id
= n_id
1434 var _n_type
: nullable AType = null
1435 fun n_type
: nullable AType do return _n_type
1436 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
1437 var _n_assign
: nullable TAssign = null
1438 fun n_assign
: nullable TAssign do return _n_assign
1439 fun n_assign
=(n_assign
: nullable TAssign) do _n_assign
= n_assign
1441 # The initial value, if any
1442 var _n_expr
: nullable AExpr = null
1443 fun n_expr
: nullable AExpr do return _n_expr
1444 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1448 # A `return` statement. eg `return x`
1451 var _n_kwreturn
: nullable TKwreturn = null
1452 fun n_kwreturn
: nullable TKwreturn do return _n_kwreturn
1453 fun n_kwreturn
=(n_kwreturn
: nullable TKwreturn) do _n_kwreturn
= n_kwreturn
1454 var _n_expr
: nullable AExpr = null
1455 fun n_expr
: nullable AExpr do return _n_expr
1456 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1460 # Something that has a label.
1461 abstract class ALabelable
1463 var _n_label
: nullable ALabel = null
1464 fun n_label
: nullable ALabel do return _n_label
1465 fun n_label
=(n_label
: nullable ALabel) do _n_label
= n_label
1469 # A `break` statement.
1473 var _n_kwbreak
: TKwbreak
1474 fun n_kwbreak
: TKwbreak do return _n_kwbreak
1475 fun n_kwbreak
=(n_kwbreak
: TKwbreak) do _n_kwbreak
= n_kwbreak
1476 var _n_expr
: nullable AExpr = null
1477 fun n_expr
: nullable AExpr do return _n_expr
1478 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1482 # An `abort` statement
1485 var _n_kwabort
: TKwabort
1486 fun n_kwabort
: TKwabort do return _n_kwabort
1487 fun n_kwabort
=(n_kwabort
: TKwabort) do _n_kwabort
= n_kwabort
1491 # A `continue` statement
1495 var _n_kwcontinue
: nullable TKwcontinue = null
1496 fun n_kwcontinue
: nullable TKwcontinue do return _n_kwcontinue
1497 fun n_kwcontinue
=(n_kwcontinue
: nullable TKwcontinue) do _n_kwcontinue
= n_kwcontinue
1498 var _n_expr
: nullable AExpr = null
1499 fun n_expr
: nullable AExpr do return _n_expr
1500 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1509 fun n_kwdo
: TKwdo do return _n_kwdo
1510 fun n_kwdo
=(n_kwdo
: TKwdo) do _n_kwdo
= n_kwdo
1511 var _n_block
: nullable AExpr = null
1512 fun n_block
: nullable AExpr do return _n_block
1513 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1521 fun n_kwif
: TKwif do return _n_kwif
1522 fun n_kwif
=(n_kwif
: TKwif) do _n_kwif
= n_kwif
1524 fun n_expr
: AExpr do return _n_expr
1525 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1526 var _n_then
: nullable AExpr = null
1527 fun n_then
: nullable AExpr do return _n_then
1528 fun n_then
=(n_then
: nullable AExpr) do _n_then
= n_then
1529 var _n_else
: nullable AExpr = null
1530 fun n_else
: nullable AExpr do return _n_else
1531 fun n_else
=(n_else
: nullable AExpr) do _n_else
= n_else
1539 fun n_kwif
: TKwif do return _n_kwif
1540 fun n_kwif
=(n_kwif
: TKwif) do _n_kwif
= n_kwif
1542 fun n_expr
: AExpr do return _n_expr
1543 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1544 var _n_kwthen
: TKwthen
1545 fun n_kwthen
: TKwthen do return _n_kwthen
1546 fun n_kwthen
=(n_kwthen
: TKwthen) do _n_kwthen
= n_kwthen
1548 fun n_then
: AExpr do return _n_then
1549 fun n_then
=(n_then
: AExpr) do _n_then
= n_then
1550 var _n_kwelse
: TKwelse
1551 fun n_kwelse
: TKwelse do return _n_kwelse
1552 fun n_kwelse
=(n_kwelse
: TKwelse) do _n_kwelse
= n_kwelse
1554 fun n_else
: AExpr do return _n_else
1555 fun n_else
=(n_else
: AExpr) do _n_else
= n_else
1559 # A `while` statement
1563 var _n_kwwhile
: TKwwhile
1564 fun n_kwwhile
: TKwwhile do return _n_kwwhile
1565 fun n_kwwhile
=(n_kwwhile
: TKwwhile) do _n_kwwhile
= n_kwwhile
1567 fun n_expr
: AExpr do return _n_expr
1568 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1570 fun n_kwdo
: TKwdo do return _n_kwdo
1571 fun n_kwdo
=(n_kwdo
: TKwdo) do _n_kwdo
= n_kwdo
1572 var _n_block
: nullable AExpr = null
1573 fun n_block
: nullable AExpr do return _n_block
1574 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1578 # A `loop` statement
1582 var _n_kwloop
: TKwloop
1583 fun n_kwloop
: TKwloop do return _n_kwloop
1584 fun n_kwloop
=(n_kwloop
: TKwloop) do _n_kwloop
= n_kwloop
1585 var _n_block
: nullable AExpr = null
1586 fun n_block
: nullable AExpr do return _n_block
1587 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1595 var _n_kwfor
: TKwfor
1596 fun n_kwfor
: TKwfor do return _n_kwfor
1597 fun n_kwfor
=(n_kwfor
: TKwfor) do _n_kwfor
= n_kwfor
1598 var n_ids
: ANodes[TId] = new ANodes[TId](self)
1600 fun n_expr
: AExpr do return _n_expr
1601 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1603 fun n_kwdo
: TKwdo do return _n_kwdo
1604 fun n_kwdo
=(n_kwdo
: TKwdo) do _n_kwdo
= n_kwdo
1605 var _n_block
: nullable AExpr = null
1606 fun n_block
: nullable AExpr do return _n_block
1607 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1611 # An `assert` statement
1614 var _n_kwassert
: TKwassert
1615 fun n_kwassert
: TKwassert do return _n_kwassert
1616 fun n_kwassert
=(n_kwassert
: TKwassert) do _n_kwassert
= n_kwassert
1617 var _n_id
: nullable TId = null
1618 fun n_id
: nullable TId do return _n_id
1619 fun n_id
=(n_id
: nullable TId) do _n_id
= n_id
1621 fun n_expr
: AExpr do return _n_expr
1622 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1623 var _n_else
: nullable AExpr = null
1624 fun n_else
: nullable AExpr do return _n_else
1625 fun n_else
=(n_else
: nullable AExpr) do _n_else
= n_else
1629 # Whatever is a simple assignment. eg `= something`
1630 abstract class AAssignFormExpr
1632 var _n_assign
: TAssign
1633 fun n_assign
: TAssign do return _n_assign
1634 fun n_assign
=(n_assign
: TAssign) do _n_assign
= n_assign
1636 fun n_value
: AExpr do return _n_value
1637 fun n_value
=(n_value
: AExpr) do _n_value
= n_value
1641 # Whatever is a combined assignment. eg `+= something`
1642 abstract class AReassignFormExpr
1644 var _n_assign_op
: AAssignOp
1645 fun n_assign_op
: AAssignOp do return _n_assign_op
1646 fun n_assign_op
=(n_assign_op
: AAssignOp) do _n_assign_op
= n_assign_op
1648 fun n_value
: AExpr do return _n_value
1649 fun n_value
=(n_value
: AExpr) do _n_value
= n_value
1653 # A `once` expression. eg `once x`
1656 var _n_kwonce
: TKwonce
1657 fun n_kwonce
: TKwonce do return _n_kwonce
1658 fun n_kwonce
=(n_kwonce
: TKwonce) do _n_kwonce
= n_kwonce
1662 # A polymorphic invocation of a method
1663 # The form of the invocation (name, arguments, etc) are specific
1664 abstract class ASendExpr
1666 # The receiver of the method invocation
1668 fun n_expr
: AExpr do return _n_expr
1669 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1673 # A binary operation on a method
1674 abstract class ABinopExpr
1676 # The second operand of the operation
1677 # Note: the receiver (`n_expr`) is the first operand
1679 fun n_expr2
: AExpr do return _n_expr2
1680 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1684 # Something that is boolean expression
1685 abstract class ABoolExpr
1693 fun n_expr
: AExpr do return _n_expr
1694 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1696 fun n_expr2
: AExpr do return _n_expr2
1697 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1701 # A `and` expression
1705 fun n_expr
: AExpr do return _n_expr
1706 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1708 fun n_expr2
: AExpr do return _n_expr2
1709 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1713 # A `or else` expression
1717 fun n_expr
: AExpr do return _n_expr
1718 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1720 fun n_expr2
: AExpr do return _n_expr2
1721 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1725 # A `implies` expression
1729 fun n_expr
: AExpr do return _n_expr
1730 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1732 fun n_expr2
: AExpr do return _n_expr2
1733 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1737 # A `not` expression
1740 var _n_kwnot
: TKwnot
1741 fun n_kwnot
: TKwnot do return _n_kwnot
1742 fun n_kwnot
=(n_kwnot
: TKwnot) do _n_kwnot
= n_kwnot
1744 fun n_expr
: AExpr do return _n_expr
1745 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1789 # A type-ckeck expression. eg `x isa T`
1793 fun n_expr
: AExpr do return _n_expr
1794 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1796 fun n_type
: AType do return _n_type
1797 fun n_type
=(n_type
: AType) do _n_type
= n_type
1811 # A `<=>` expression
1831 # A unary minus expression. eg `-x`
1834 var _n_minus
: TMinus
1835 fun n_minus
: TMinus do return _n_minus
1836 fun n_minus
=(n_minus
: TMinus) do _n_minus
= n_minus
1840 # An explicit instantiation. eg `new T`
1843 var _n_kwnew
: TKwnew
1844 fun n_kwnew
: TKwnew do return _n_kwnew
1845 fun n_kwnew
=(n_kwnew
: TKwnew) do _n_kwnew
= n_kwnew
1847 fun n_type
: AType do return _n_type
1848 fun n_type
=(n_type
: AType) do _n_type
= n_type
1850 # The name of the named-constructor, if any
1851 var _n_id
: nullable TId = null
1852 fun n_id
: nullable TId do return _n_id
1853 fun n_id
=(n_id
: nullable TId) do _n_id
= n_id
1855 fun n_args
: AExprs do return _n_args
1856 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1860 # Whatever is a old-style attribute access
1861 abstract class AAttrFormExpr
1864 # The receiver of the attribute
1866 fun n_expr
: AExpr do return _n_expr
1867 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1869 # The name of the attribute
1871 fun n_id
: TAttrid do return _n_id
1872 fun n_id
=(n_id
: TAttrid) do _n_id
= n_id
1877 # The read of an attribute. eg `x._a`
1882 # The assignment of an attribute. eg `x._a=y`
1883 class AAttrAssignExpr
1885 super AAssignFormExpr
1888 # Whatever looks-like a call with a standard method and any number of arguments.
1889 abstract class ACallFormExpr
1892 # The name of the method
1894 fun n_id
: TId do return _n_id
1895 fun n_id
=(n_id
: TId) do _n_id
= n_id
1897 # The arguments of the call
1899 fun n_args
: AExprs do return _n_args
1900 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1904 # A complex setter call (standard or brackets)
1905 abstract class ASendReassignFormExpr
1907 super AReassignFormExpr
1910 # A complex attribute assignment. eg `x._a+=y`
1911 class AAttrReassignExpr
1913 super AReassignFormExpr
1916 # A call with a standard method-name and any number of arguments. eg `x.m(y)`. OR just a simple id
1917 # 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`.
1918 # Semantic analysis have to transform them to instance of `AVarExpr`.
1923 # A setter call with a standard method-name and any number of arguments. eg `x.m(y)=z`. OR just a simple assignment.
1924 # 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`.
1925 # Semantic analysis have to transform them to instance of `AVarAssignExpr`.
1926 class ACallAssignExpr
1928 super AAssignFormExpr
1931 # 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.
1932 # 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`.
1933 # Semantic analysis have to transform them to instance of `AVarReassignExpr`.
1934 class ACallReassignExpr
1936 super ASendReassignFormExpr
1939 # A call to `super`. OR a call of a super-constructor
1942 var _n_qualified
: nullable AQualified = null
1943 fun n_qualified
: nullable AQualified do return _n_qualified
1944 fun n_qualified
=(n_qualified
: nullable AQualified) do _n_qualified
= n_qualified
1945 var _n_kwsuper
: TKwsuper
1946 fun n_kwsuper
: TKwsuper do return _n_kwsuper
1947 fun n_kwsuper
=(n_kwsuper
: TKwsuper) do _n_kwsuper
= n_kwsuper
1949 fun n_args
: AExprs do return _n_args
1950 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1954 # A call to the `init` constructor.
1955 # Note: because `init` is a keyword and not a `TId`, the explicit call to init cannot be a ACallFormExpr.
1958 var _n_kwinit
: TKwinit
1959 fun n_kwinit
: TKwinit do return _n_kwinit
1960 fun n_kwinit
=(n_kwinit
: TKwinit) do _n_kwinit
= n_kwinit
1962 fun n_args
: AExprs do return _n_args
1963 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1967 # Whatever looks-like a call of the brackets `[]` operator.
1968 abstract class ABraFormExpr
1971 fun n_args
: AExprs do return _n_args
1972 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1976 # A call of the brackets operator. eg `x[y,z]`
1981 # A setter call of the bracket operator. eg `x[y,z]=t`
1982 class ABraAssignExpr
1984 super AAssignFormExpr
1987 # Whatever is an access to a local variable
1988 abstract class AVarFormExpr
1991 fun n_id
: TId do return _n_id
1992 fun n_id
=(n_id
: TId) do _n_id
= n_id
1996 # A complex setter call of the bracket operator. eg `x[y,z]+=t`
1997 class ABraReassignExpr
1999 super ASendReassignFormExpr
2002 # A local variable read access.
2003 # The parser cannot instantiate them, see `ACallExpr`.
2008 # A local variable simple assigment access
2009 # The parser cannot instantiate them, see `ACallAssignExpr`.
2010 class AVarAssignExpr
2012 super AAssignFormExpr
2015 # A local variable complex assignment access
2016 # The parser cannot instantiate them, see `ACallReassignExpr`.
2017 class AVarReassignExpr
2019 super AReassignFormExpr
2022 # A literal range, open or closed
2023 abstract class ARangeExpr
2026 fun n_expr
: AExpr do return _n_expr
2027 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2029 fun n_expr2
: AExpr do return _n_expr2
2030 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
2034 # A closed literal range. eg `[x..y]`
2038 fun n_obra
: TObra do return _n_obra
2039 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
2041 fun n_cbra
: TCbra do return _n_cbra
2042 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
2046 # An open literal range. eg `[x..y[`
2050 fun n_obra
: TObra do return _n_obra
2051 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
2053 fun n_cbra
: TObra do return _n_cbra
2054 fun n_cbra
=(n_cbra
: TObra) do _n_cbra
= n_cbra
2058 # A literal array. eg. `[x,y,z]`
2061 var _n_exprs
: AExprs
2062 fun n_exprs
: AExprs do return _n_exprs
2063 fun n_exprs
=(n_exprs
: AExprs) do _n_exprs
= n_exprs
2070 var _n_kwself
: nullable TKwself
2071 fun n_kwself
: nullable TKwself do return _n_kwself
2072 fun n_kwself
=(n_kwself
: nullable TKwself) do _n_kwself
= n_kwself
2076 # When there is no explicit receiver, `self` is implicit
2077 class AImplicitSelfExpr
2081 # A `true` boolean literal constant
2084 var _n_kwtrue
: TKwtrue
2085 fun n_kwtrue
: TKwtrue do return _n_kwtrue
2086 fun n_kwtrue
=(n_kwtrue
: TKwtrue) do _n_kwtrue
= n_kwtrue
2089 # A `false` boolean literal constant
2092 var _n_kwfalse
: TKwfalse
2093 fun n_kwfalse
: TKwfalse do return _n_kwfalse
2094 fun n_kwfalse
=(n_kwfalse
: TKwfalse) do _n_kwfalse
= n_kwfalse
2097 # A `null` literal constant
2100 var _n_kwnull
: TKwnull
2101 fun n_kwnull
: TKwnull do return _n_kwnull
2102 fun n_kwnull
=(n_kwnull
: TKwnull) do _n_kwnull
= n_kwnull
2105 # An integer literal
2109 # An integer literal in decimal format
2112 var _n_number
: TNumber
2113 fun n_number
: TNumber do return _n_number
2114 fun n_number
=(n_number
: TNumber) do _n_number
= n_number
2117 # An integer literal in hexadecimal format
2120 var _n_hex_number
: THexNumber
2121 fun n_hex_number
: THexNumber do return _n_hex_number
2122 fun n_hex_number
=(n_hex_number
: THexNumber) do _n_hex_number
= n_hex_number
2128 var _n_float
: TFloat
2129 fun n_float
: TFloat do return _n_float
2130 fun n_float
=(n_float
: TFloat) do _n_float
= n_float
2133 # A character literal
2137 fun n_char
: TChar do return _n_char
2138 fun n_char
=(n_char
: TChar) do _n_char
= n_char
2142 abstract class AStringFormExpr
2144 var _n_string
: Token
2145 fun n_string
: Token do return _n_string
2146 fun n_string
=(n_string
: Token) do _n_string
= n_string
2150 # A simple string. eg. `"abc"`
2152 super AStringFormExpr
2155 # The start of a superstring. eg `"abc{`
2156 class AStartStringExpr
2157 super AStringFormExpr
2160 # The middle of a superstring. eg `}abc{`
2161 class AMidStringExpr
2162 super AStringFormExpr
2165 # The end of a superstrng. eg `}abc"`
2166 class AEndStringExpr
2167 super AStringFormExpr
2170 # A superstring literal. eg `"a{x}b{y}c"`
2171 # Each part is modelized a sequence of expression. eg. `["a{, x, }b{, y, }c"]`
2172 class ASuperstringExpr
2174 var n_exprs
: ANodes[AExpr] = new ANodes[AExpr](self)
2178 # A simple parenthesis. eg `(x)`
2182 fun n_opar
: TOpar do return _n_opar
2183 fun n_opar
=(n_opar
: TOpar) do _n_opar
= n_opar
2185 fun n_cpar
: TCpar do return _n_cpar
2186 fun n_cpar
=(n_cpar
: TCpar) do _n_cpar
= n_cpar
2190 # Whatevej just contains (and mimic) an other expression
2191 abstract class AProxyExpr
2194 fun n_expr
: AExpr do return _n_expr
2195 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2199 # A type cast. eg `x.as(T)`
2203 fun n_expr
: AExpr do return _n_expr
2204 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2206 fun n_kwas
: TKwas do return _n_kwas
2207 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
2208 var _n_opar
: nullable TOpar = null
2209 fun n_opar
: nullable TOpar do return _n_opar
2210 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2212 fun n_type
: AType do return _n_type
2213 fun n_type
=(n_type
: AType) do _n_type
= n_type
2214 var _n_cpar
: nullable TCpar = null
2215 fun n_cpar
: nullable TCpar do return _n_cpar
2216 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2220 # A as-not-null cast. eg `x.as(not null)`
2221 class AAsNotnullExpr
2224 fun n_expr
: AExpr do return _n_expr
2225 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2227 fun n_kwas
: TKwas do return _n_kwas
2228 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
2229 var _n_opar
: nullable TOpar = null
2230 fun n_opar
: nullable TOpar do return _n_opar
2231 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2232 var _n_kwnot
: TKwnot
2233 fun n_kwnot
: TKwnot do return _n_kwnot
2234 fun n_kwnot
=(n_kwnot
: TKwnot) do _n_kwnot
= n_kwnot
2235 var _n_kwnull
: TKwnull
2236 fun n_kwnull
: TKwnull do return _n_kwnull
2237 fun n_kwnull
=(n_kwnull
: TKwnull) do _n_kwnull
= n_kwnull
2238 var _n_cpar
: nullable TCpar = null
2239 fun n_cpar
: nullable TCpar do return _n_cpar
2240 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2244 # A is-set check of old-style attributes. eg `isset x._a`
2245 class AIssetAttrExpr
2247 var _n_kwisset
: TKwisset
2248 fun n_kwisset
: TKwisset do return _n_kwisset
2249 fun n_kwisset
=(n_kwisset
: TKwisset) do _n_kwisset
= n_kwisset
2253 # A elyspis notation used to pass an expression as it in a vararg parameter
2257 fun n_expr
: AExpr do return _n_expr
2258 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2259 var _n_dotdotdot
: TDotdotdot
2260 fun n_dotdotdot
: TDotdotdot do return _n_dotdotdot
2261 fun n_dotdotdot
=(n_dotdotdot
: TDotdotdot) do _n_dotdotdot
= n_dotdotdot
2265 # A list of expression separated with commas (arguments for instance)
2266 abstract class AExprs
2268 var n_exprs
: ANodes[AExpr] = new ANodes[AExpr](self)
2273 class ADebugTypeExpr
2275 var _n_kwdebug
: TKwdebug
2276 fun n_kwdebug
: TKwdebug do return _n_kwdebug
2277 fun n_kwdebug
=(n_kwdebug
: TKwdebug) do _n_kwdebug
= n_kwdebug
2278 var _n_kwtype
: TKwtype
2279 fun n_kwtype
: TKwtype do return _n_kwtype
2280 fun n_kwtype
=(n_kwtype
: TKwtype) do _n_kwtype
= n_kwtype
2282 fun n_expr
: AExpr do return _n_expr
2283 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2285 fun n_type
: AType do return _n_type
2286 fun n_type
=(n_type
: AType) do _n_type
= n_type
2290 # A simple list of expressions
2295 # A list of expressions enclosed in parentheses
2299 fun n_opar
: TOpar do return _n_opar
2300 fun n_opar
=(n_opar
: TOpar) do _n_opar
= n_opar
2302 fun n_cpar
: TCpar do return _n_cpar
2303 fun n_cpar
=(n_cpar
: TCpar) do _n_cpar
= n_cpar
2307 # A list of expressions enclosed in brackets
2311 fun n_obra
: TObra do return _n_obra
2312 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
2314 fun n_cbra
: TCbra do return _n_cbra
2315 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
2319 # A complex assignment operator. eg `+=`
2320 abstract class AAssignOp
2325 var _n_pluseq
: TPluseq
2326 fun n_pluseq
: TPluseq do return _n_pluseq
2327 fun n_pluseq
=(n_pluseq
: TPluseq) do _n_pluseq
= n_pluseq
2330 class AMinusAssignOp
2332 var _n_minuseq
: TMinuseq
2333 fun n_minuseq
: TMinuseq do return _n_minuseq
2334 fun n_minuseq
=(n_minuseq
: TMinuseq) do _n_minuseq
= n_minuseq
2340 var _n_quad
: nullable TQuad = null
2341 fun n_quad
: nullable TQuad do return _n_quad
2342 fun n_quad
=(n_quad
: nullable TQuad) do _n_quad
= n_quad
2343 var n_path
: ANodes[TId] = new ANodes[TId](self)
2345 fun n_id
: TId do return _n_id
2346 fun n_id
=(n_id
: TId) do _n_id
= n_id
2352 fun n_kwin
: TKwin do return _n_kwin
2353 fun n_kwin
=(n_kwin
: TKwin) do _n_kwin
= n_kwin
2354 var _n_string
: TString
2355 fun n_string
: TString do return _n_string
2356 fun n_string
=(n_string
: TString) do _n_string
= n_string
2359 class AExternCodeBlock
2361 var _n_in_language
: nullable AInLanguage = null
2362 fun n_in_language
: nullable AInLanguage do return _n_in_language
2363 fun n_in_language
=(n_in_language
: nullable AInLanguage) do _n_in_language
= n_in_language
2364 var _n_extern_code_segment
: TExternCodeSegment
2365 fun n_extern_code_segment
: TExternCodeSegment do return _n_extern_code_segment
2366 fun n_extern_code_segment
=(n_extern_code_segment
: TExternCodeSegment) do _n_extern_code_segment
= n_extern_code_segment
2371 var _n_quad
: nullable TQuad = null
2372 fun n_quad
: nullable TQuad do return _n_quad
2373 fun n_quad
=(n_quad
: nullable TQuad) do _n_quad
= n_quad
2374 var n_id
: ANodes[TId] = new ANodes[TId](self)
2375 var _n_classid
: nullable TClassid = null
2376 fun n_classid
: nullable TClassid do return _n_classid
2377 fun n_classid
=(n_classid
: nullable TClassid) do _n_classid
= n_classid
2381 # A documentation of a definition
2382 # It contains the block of comments just above the declaration
2385 var n_comment
: ANodes[TComment] = new ANodes[TComment](self)
2391 var _n_at
: nullable TAt = null
2392 fun n_at
: nullable TAt do return _n_at
2393 fun n_at
=(n_at
: nullable TAt) do _n_at
= n_at
2394 var _n_opar
: nullable TOpar = null
2395 fun n_opar
: nullable TOpar do return _n_opar
2396 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2397 var n_items
: ANodes[AAnnotation] = new ANodes[AAnnotation](self)
2398 var _n_cpar
: nullable TCpar = null
2399 fun n_cpar
: nullable TCpar do return _n_cpar
2400 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2406 fun n_atid
: AAtid do return _n_atid
2407 fun n_atid
=(n_atid
: AAtid) do _n_atid
= n_atid
2408 var _n_opar
: nullable TOpar = null
2409 fun n_opar
: nullable TOpar do return _n_opar
2410 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2411 var n_args
: ANodes[AAtArg] = new ANodes[AAtArg](self)
2412 var _n_cpar
: nullable TCpar = null
2413 fun n_cpar
: nullable TCpar do return _n_cpar
2414 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2417 abstract class AAtArg
2423 fun n_type
: AType do return _n_type
2424 fun n_type
=(n_type
: AType) do _n_type
= n_type
2430 fun n_expr
: AExpr do return _n_expr
2431 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2437 abstract class AAtid
2440 fun n_id
: Token do return _n_id
2441 fun n_id
=(n_id
: Token) do _n_id
= n_id
2453 class AKwreadableAtid
2456 class AKwwritableAtid
2463 # The root of the AST
2466 var _n_base
: nullable AModule
2467 fun n_base
: nullable AModule do return _n_base
2468 fun n_base
=(n_base
: nullable AModule) do _n_base
= n_base
2470 fun n_eof
: EOF do return _n_eof
2471 fun n_eof
=(n_eof
: EOF) do _n_eof
= n_eof
2472 init(n_base
: nullable AModule, n_eof
: EOF)
2474 self._n_base
= n_base