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 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_kwredef
: nullable TKwredef = null
710 fun n_kwredef
: nullable TKwredef do return _n_kwredef
711 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
712 var _n_visibility
: AVisibility
713 fun n_visibility
: AVisibility do return _n_visibility
714 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
715 var _n_kwmodule
: TKwmodule
716 fun n_kwmodule
: TKwmodule do return _n_kwmodule
717 fun n_kwmodule
=(n_kwmodule
: TKwmodule) do _n_kwmodule
= n_kwmodule
718 var _n_name
: AModuleName
719 fun n_name
: AModuleName do return _n_name
720 fun n_name
=(n_name
: AModuleName) do _n_name
= n_name
724 # A import clause of a module
725 abstract class AImport
729 # A standard import clause. eg `import x`
732 var _n_visibility
: AVisibility
733 fun n_visibility
: AVisibility do return _n_visibility
734 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
735 var _n_kwimport
: TKwimport
736 fun n_kwimport
: TKwimport do return _n_kwimport
737 fun n_kwimport
=(n_kwimport
: TKwimport) do _n_kwimport
= n_kwimport
738 var _n_name
: AModuleName
739 fun n_name
: AModuleName do return _n_name
740 fun n_name
=(n_name
: AModuleName) do _n_name
= n_name
744 # The special import clause of the kernel module. eg `import end`
747 var _n_visibility
: AVisibility
748 fun n_visibility
: AVisibility do return _n_visibility
749 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
750 var _n_kwimport
: TKwimport
751 fun n_kwimport
: TKwimport do return _n_kwimport
752 fun n_kwimport
=(n_kwimport
: TKwimport) do _n_kwimport
= n_kwimport
754 fun n_kwend
: TKwend do return _n_kwend
755 fun n_kwend
=(n_kwend
: TKwend) do _n_kwend
= n_kwend
759 # A visibility modifier
761 # The public visibility is an empty production (no keyword).
763 # Note: even if some visibilities are only valid on some placse (for instance, no `protected` class or no `intrude` method)
764 # the parser has no such a restriction, therefore the semantic phases has to check that the visibilities make sense.
765 abstract class AVisibility
768 class APublicVisibility
770 var _n_kwpublic
: nullable TKwpublic
771 fun n_kwpublic
: nullable TKwpublic do return _n_kwpublic
772 fun n_kwpublic
=(n_kwpublic
: nullable TKwpublic) do _n_kwpublic
= n_kwpublic
775 class APrivateVisibility
777 var _n_kwprivate
: TKwprivate
778 fun n_kwprivate
: TKwprivate do return _n_kwprivate
779 fun n_kwprivate
=(n_kwprivate
: TKwprivate) do _n_kwprivate
= n_kwprivate
782 class AProtectedVisibility
784 var _n_kwprotected
: TKwprotected
785 fun n_kwprotected
: TKwprotected do return _n_kwprotected
786 fun n_kwprotected
=(n_kwprotected
: TKwprotected) do _n_kwprotected
= n_kwprotected
789 class AIntrudeVisibility
791 var _n_kwintrude
: TKwintrude
792 fun n_kwintrude
: TKwintrude do return _n_kwintrude
793 fun n_kwintrude
=(n_kwintrude
: TKwintrude) do _n_kwintrude
= n_kwintrude
798 # While most definition are `AStdClassdef`
799 # There is tow special case of class definition
800 abstract class AClassdef
802 var n_propdefs
: ANodes[APropdef] = new ANodes[APropdef](self)
806 # A standard class definition with a name, superclasses and properties
809 var _n_doc
: nullable ADoc = null
810 fun n_doc
: nullable ADoc do return _n_doc
811 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
812 var _n_kwredef
: nullable TKwredef = null
813 fun n_kwredef
: nullable TKwredef do return _n_kwredef
814 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
815 var _n_visibility
: AVisibility
816 fun n_visibility
: AVisibility do return _n_visibility
817 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
818 var _n_classkind
: AClasskind
819 fun n_classkind
: AClasskind do return _n_classkind
820 fun n_classkind
=(n_classkind
: AClasskind) do _n_classkind
= n_classkind
821 var _n_id
: nullable TClassid = null
822 fun n_id
: nullable TClassid do return _n_id
823 fun n_id
=(n_id
: nullable TClassid) do _n_id
= n_id
824 var n_formaldefs
: ANodes[AFormaldef] = new ANodes[AFormaldef](self)
825 var _n_extern_code_block
: nullable AExternCodeBlock = null
826 fun n_extern_code_block
: nullable AExternCodeBlock do return _n_extern_code_block
827 fun n_extern_code_block
=(n_extern_code_block
: nullable AExternCodeBlock) do _n_extern_code_block
= n_extern_code_block
828 var n_superclasses
: ANodes[ASuperclass] = new ANodes[ASuperclass](self)
830 fun n_kwend
: TKwend do return _n_kwend
831 fun n_kwend
=(n_kwend
: TKwend) do _n_kwend
= n_kwend
832 redef fun hot_location
do return n_id
.location
836 # The implicit class definition of the implicit main method
841 # The implicit class definition of the top-level methods
846 # The modifier for the kind of class (abstract, interface, etc.)
847 abstract class AClasskind
850 class AConcreteClasskind
852 var _n_kwclass
: TKwclass
853 fun n_kwclass
: TKwclass do return _n_kwclass
854 fun n_kwclass
=(n_kwclass
: TKwclass) do _n_kwclass
= n_kwclass
857 class AAbstractClasskind
859 var _n_kwabstract
: TKwabstract
860 fun n_kwabstract
: TKwabstract do return _n_kwabstract
861 fun n_kwabstract
=(n_kwabstract
: TKwabstract) do _n_kwabstract
= n_kwabstract
862 var _n_kwclass
: TKwclass
863 fun n_kwclass
: TKwclass do return _n_kwclass
864 fun n_kwclass
=(n_kwclass
: TKwclass) do _n_kwclass
= n_kwclass
867 class AInterfaceClasskind
869 var _n_kwinterface
: TKwinterface
870 fun n_kwinterface
: TKwinterface do return _n_kwinterface
871 fun n_kwinterface
=(n_kwinterface
: TKwinterface) do _n_kwinterface
= n_kwinterface
876 var _n_kwenum
: TKwenum
877 fun n_kwenum
: TKwenum do return _n_kwenum
878 fun n_kwenum
=(n_kwenum
: TKwenum) do _n_kwenum
= n_kwenum
881 class AExternClasskind
883 var _n_kwextern
: TKwextern
884 fun n_kwextern
: TKwextern do return _n_kwextern
885 fun n_kwextern
=(n_kwextern
: TKwextern) do _n_kwextern
= n_kwextern
886 var _n_kwclass
: nullable TKwclass = null
887 fun n_kwclass
: nullable TKwclass do return _n_kwclass
888 fun n_kwclass
=(n_kwclass
: nullable TKwclass) do _n_kwclass
= n_kwclass
892 # The definition of a formal generic parameter type. eg `X: Y`
896 fun n_id
: TClassid do return _n_id
897 fun n_id
=(n_id
: TClassid) do _n_id
= n_id
898 # The bound of the parameter type
899 var _n_type
: nullable AType = null
900 fun n_type
: nullable AType do return _n_type
901 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
905 # A super-class. eg `super X`
908 var _n_kwsuper
: TKwsuper
909 fun n_kwsuper
: TKwsuper do return _n_kwsuper
910 fun n_kwsuper
=(n_kwsuper
: TKwsuper) do _n_kwsuper
= n_kwsuper
912 fun n_type
: AType do return _n_type
913 fun n_type
=(n_type
: AType) do _n_type
= n_type
917 # The definition of a property
918 abstract class APropdef
920 var _n_doc
: nullable ADoc = null
921 fun n_doc
: nullable ADoc do return _n_doc
922 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
923 var _n_kwredef
: nullable TKwredef = null
924 fun n_kwredef
: nullable TKwredef do return _n_kwredef
925 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
926 var _n_visibility
: nullable AVisibility = null
927 fun n_visibility
: nullable AVisibility do return _n_visibility
928 fun n_visibility
=(n_visibility
: nullable AVisibility) do _n_visibility
= n_visibility
931 # A definition of an attribute
932 # For historical reason, old-syle and new-style attributes use the same `ANode` sub-class
936 fun n_kwvar
: TKwvar do return _n_kwvar
937 fun n_kwvar
=(n_kwvar
: TKwvar) do _n_kwvar
= n_kwvar
939 # The identifier for an old-style attribute (null if new-style)
940 var _n_id
: nullable TAttrid
941 fun n_id
: nullable TAttrid do return _n_id
942 fun n_id
=(n_id
: nullable TAttrid) do _n_id
= n_id
944 # The identifier for a new-style attribute (null if old-style)
945 var _n_id2
: nullable TId
946 fun n_id2
: nullable TId do return _n_id2
947 fun n_id2
=(n_id2
: nullable TId) do _n_id2
= n_id2
949 var _n_type
: nullable AType = null
950 fun n_type
: nullable AType do return _n_type
951 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
952 var _n_readable
: nullable AAble = null
953 fun n_readable
: nullable AAble do return _n_readable
954 fun n_readable
=(n_readable
: nullable AAble) do _n_readable
= n_readable
955 var _n_writable
: nullable AAble = null
956 fun n_writable
: nullable AAble do return _n_writable
957 fun n_writable
=(n_writable
: nullable AAble) do _n_writable
= n_writable
959 # The initial value, if any
960 var _n_expr
: nullable AExpr = null
961 fun n_expr
: nullable AExpr do return _n_expr
962 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
963 redef fun hot_location
965 if n_id
!= null then return n_id
.location
else return n_id2
.location
970 # A definition of all kind of method (including constructors)
971 abstract class AMethPropdef
973 var _n_kwmeth
: nullable TKwmeth = null
974 fun n_kwmeth
: nullable TKwmeth do return _n_kwmeth
975 fun n_kwmeth
=(n_kwmeth
: nullable TKwmeth) do _n_kwmeth
= n_kwmeth
976 var _n_kwinit
: nullable TKwinit = null
977 fun n_kwinit
: nullable TKwinit do return _n_kwinit
978 fun n_kwinit
=(n_kwinit
: nullable TKwinit) do _n_kwinit
= n_kwinit
979 var _n_kwnew
: nullable TKwnew = null
980 fun n_kwnew
: nullable TKwnew do return _n_kwnew
981 fun n_kwnew
=(n_kwnew
: nullable TKwnew) do _n_kwnew
= n_kwnew
982 var _n_methid
: nullable AMethid = null
983 fun n_methid
: nullable AMethid do return _n_methid
984 fun n_methid
=(n_methid
: nullable AMethid) do _n_methid
= n_methid
985 var _n_signature
: nullable ASignature = null
986 fun n_signature
: nullable ASignature do return _n_signature
987 fun n_signature
=(n_signature
: nullable ASignature) do _n_signature
= n_signature
988 var _n_block
: nullable AExpr = null
989 fun n_block
: nullable AExpr do return _n_block
990 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
991 var _n_extern
: nullable TString = null
992 fun n_extern
: nullable TString do return _n_extern
993 fun n_extern
=(n_extern
: nullable TString) do _n_extern
= n_extern
994 var _n_extern_calls
: nullable AExternCalls = null
995 fun n_extern_calls
: nullable AExternCalls do return _n_extern_calls
996 fun n_extern_calls
=(n_extern_calls
: nullable AExternCalls) do _n_extern_calls
= n_extern_calls
997 var _n_extern_code_block
: nullable AExternCodeBlock = null
998 fun n_extern_code_block
: nullable AExternCodeBlock do return _n_extern_code_block
999 fun n_extern_code_block
=(n_extern_code_block
: nullable AExternCodeBlock) do _n_extern_code_block
= n_extern_code_block
1000 redef fun hot_location
1002 if n_methid
!= null then
1003 return n_methid
.location
1004 else if n_kwinit
!= null then
1005 return n_kwinit
.location
1006 else if n_kwnew
!= null then
1007 return n_kwnew
.location
1014 # A method marked abstract
1015 # *deferred* is a old synonynmous of *abstract* that comes from PRM, that comes from Eiffel.
1016 class ADeferredMethPropdef
1020 # A method marked intern
1021 class AInternMethPropdef
1025 # A method of a constructor marked extern
1026 abstract class AExternPropdef
1030 # A method marked extern
1031 class AExternMethPropdef
1032 super AExternPropdef
1035 # A method with a body
1036 class AConcreteMethPropdef
1041 abstract class AInitPropdef
1045 # A constructor with a body
1046 class AConcreteInitPropdef
1047 super AConcreteMethPropdef
1051 class AInternNewPropdef
1052 super AInternMethPropdef
1056 # A constructor marked extern (defined with the `new` keyword)
1057 class AExternInitPropdef
1058 super AExternPropdef
1062 # The implicit main method
1063 class AMainMethPropdef
1064 super AConcreteMethPropdef
1067 # Declaration of callbacks for extern methods
1070 var _n_kwimport
: TKwimport
1071 fun n_kwimport
: TKwimport do return _n_kwimport
1072 fun n_kwimport
=(n_kwimport
: TKwimport) do _n_kwimport
= n_kwimport
1073 var n_extern_calls
: ANodes[AExternCall] = new ANodes[AExternCall](self)
1076 abstract class AExternCall
1079 abstract class APropExternCall
1082 class ALocalPropExternCall
1083 super APropExternCall
1084 var _n_methid
: AMethid
1085 fun n_methid
: AMethid do return _n_methid
1086 fun n_methid
=(n_methid
: AMethid) do _n_methid
= n_methid
1089 class AFullPropExternCall
1090 super APropExternCall
1092 fun n_type
: AType do return _n_type
1093 fun n_type
=(n_type
: AType) do _n_type
= n_type
1094 var _n_dot
: nullable TDot = null
1095 fun n_dot
: nullable TDot do return _n_dot
1096 fun n_dot
=(n_dot
: nullable TDot) do _n_dot
= n_dot
1097 var _n_methid
: AMethid
1098 fun n_methid
: AMethid do return _n_methid
1099 fun n_methid
=(n_methid
: AMethid) do _n_methid
= n_methid
1102 class AInitPropExternCall
1103 super APropExternCall
1105 fun n_type
: AType do return _n_type
1106 fun n_type
=(n_type
: AType) do _n_type
= n_type
1109 class ASuperExternCall
1111 var _n_kwsuper
: TKwsuper
1112 fun n_kwsuper
: TKwsuper do return _n_kwsuper
1113 fun n_kwsuper
=(n_kwsuper
: TKwsuper) do _n_kwsuper
= n_kwsuper
1116 abstract class ACastExternCall
1119 class ACastAsExternCall
1120 super ACastExternCall
1121 var _n_from_type
: AType
1122 fun n_from_type
: AType do return _n_from_type
1123 fun n_from_type
=(n_from_type
: AType) do _n_from_type
= n_from_type
1124 var _n_dot
: nullable TDot = null
1125 fun n_dot
: nullable TDot do return _n_dot
1126 fun n_dot
=(n_dot
: nullable TDot) do _n_dot
= n_dot
1128 fun n_kwas
: TKwas do return _n_kwas
1129 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
1130 var _n_to_type
: AType
1131 fun n_to_type
: AType do return _n_to_type
1132 fun n_to_type
=(n_to_type
: AType) do _n_to_type
= n_to_type
1135 class AAsNullableExternCall
1136 super ACastExternCall
1138 fun n_type
: AType do return _n_type
1139 fun n_type
=(n_type
: AType) do _n_type
= n_type
1141 fun n_kwas
: TKwas do return _n_kwas
1142 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
1143 var _n_kwnullable
: TKwnullable
1144 fun n_kwnullable
: TKwnullable do return _n_kwnullable
1145 fun n_kwnullable
=(n_kwnullable
: TKwnullable) do _n_kwnullable
= n_kwnullable
1148 class AAsNotNullableExternCall
1149 super ACastExternCall
1151 fun n_type
: AType do return _n_type
1152 fun n_type
=(n_type
: AType) do _n_type
= n_type
1154 fun n_kwas
: TKwas do return _n_kwas
1155 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
1156 var _n_kwnot
: TKwnot
1157 fun n_kwnot
: TKwnot do return _n_kwnot
1158 fun n_kwnot
=(n_kwnot
: TKwnot) do _n_kwnot
= n_kwnot
1159 var _n_kwnullable
: TKwnullable
1160 fun n_kwnullable
: TKwnullable do return _n_kwnullable
1161 fun n_kwnullable
=(n_kwnullable
: TKwnullable) do _n_kwnullable
= n_kwnullable
1165 # A definition of a virtual type
1168 var _n_kwtype
: TKwtype
1169 fun n_kwtype
: TKwtype do return _n_kwtype
1170 fun n_kwtype
=(n_kwtype
: TKwtype) do _n_kwtype
= n_kwtype
1172 fun n_id
: TClassid do return _n_id
1173 fun n_id
=(n_id
: TClassid) do _n_id
= n_id
1175 fun n_type
: AType do return _n_type
1176 fun n_type
=(n_type
: AType) do _n_type
= n_type
1180 # A `writable` or `readable` modifier
1181 abstract class AAble
1183 var _n_visibility
: nullable AVisibility = null
1184 fun n_visibility
: nullable AVisibility do return _n_visibility
1185 fun n_visibility
=(n_visibility
: nullable AVisibility) do _n_visibility
= n_visibility
1186 var _n_kwredef
: nullable TKwredef = null
1187 fun n_kwredef
: nullable TKwredef do return _n_kwredef
1188 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
1192 # A `readable` modifier
1195 var _n_kwreadable
: TKwreadable
1196 fun n_kwreadable
: TKwreadable do return _n_kwreadable
1197 fun n_kwreadable
=(n_kwreadable
: TKwreadable) do _n_kwreadable
= n_kwreadable
1201 # A `writable` modifier
1204 var _n_kwwritable
: TKwwritable
1205 fun n_kwwritable
: TKwwritable do return _n_kwwritable
1206 fun n_kwwritable
=(n_kwwritable
: TKwwritable) do _n_kwwritable
= n_kwwritable
1210 # The identifier of a method in a method declaration.
1211 # There is a specific class because of operator and setters.
1212 abstract class AMethid
1218 fun n_id
: TId do return _n_id
1219 fun n_id
=(n_id
: TId) do _n_id
= n_id
1225 fun n_plus
: TPlus do return _n_plus
1226 fun n_plus
=(n_plus
: TPlus) do _n_plus
= n_plus
1231 var _n_minus
: TMinus
1232 fun n_minus
: TMinus do return _n_minus
1233 fun n_minus
=(n_minus
: TMinus) do _n_minus
= n_minus
1239 fun n_star
: TStar do return _n_star
1240 fun n_star
=(n_star
: TStar) do _n_star
= n_star
1245 var _n_slash
: TSlash
1246 fun n_slash
: TSlash do return _n_slash
1247 fun n_slash
=(n_slash
: TSlash) do _n_slash
= n_slash
1250 class APercentMethid
1252 var _n_percent
: TPercent
1253 fun n_percent
: TPercent do return _n_percent
1254 fun n_percent
=(n_percent
: TPercent) do _n_percent
= n_percent
1260 fun n_eq
: TEq do return _n_eq
1261 fun n_eq
=(n_eq
: TEq) do _n_eq
= n_eq
1267 fun n_ne
: TNe do return _n_ne
1268 fun n_ne
=(n_ne
: TNe) do _n_ne
= n_ne
1274 fun n_le
: TLe do return _n_le
1275 fun n_le
=(n_le
: TLe) do _n_le
= n_le
1281 fun n_ge
: TGe do return _n_ge
1282 fun n_ge
=(n_ge
: TGe) do _n_ge
= n_ge
1288 fun n_lt
: TLt do return _n_lt
1289 fun n_lt
=(n_lt
: TLt) do _n_lt
= n_lt
1295 fun n_gt
: TGt do return _n_gt
1296 fun n_gt
=(n_gt
: TGt) do _n_gt
= n_gt
1302 fun n_ll
: TLl do return _n_ll
1303 fun n_ll
=(n_ll
: TLl) do _n_ll
= n_ll
1309 fun n_gg
: TGg do return _n_gg
1310 fun n_gg
=(n_gg
: TGg) do _n_gg
= n_gg
1316 fun n_obra
: TObra do return _n_obra
1317 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
1319 fun n_cbra
: TCbra do return _n_cbra
1320 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
1323 class AStarshipMethid
1325 var _n_starship
: TStarship
1326 fun n_starship
: TStarship do return _n_starship
1327 fun n_starship
=(n_starship
: TStarship) do _n_starship
= n_starship
1333 fun n_id
: TId do return _n_id
1334 fun n_id
=(n_id
: TId) do _n_id
= n_id
1335 var _n_assign
: TAssign
1336 fun n_assign
: TAssign do return _n_assign
1337 fun n_assign
=(n_assign
: TAssign) do _n_assign
= n_assign
1340 class ABraassignMethid
1343 fun n_obra
: TObra do return _n_obra
1344 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
1346 fun n_cbra
: TCbra do return _n_cbra
1347 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
1348 var _n_assign
: TAssign
1349 fun n_assign
: TAssign do return _n_assign
1350 fun n_assign
=(n_assign
: TAssign) do _n_assign
= n_assign
1354 # A signature in a method definition. eg `(x,y:X,z:Z):T`
1357 var _n_opar
: nullable TOpar = null
1358 fun n_opar
: nullable TOpar do return _n_opar
1359 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
1360 var n_params
: ANodes[AParam] = new ANodes[AParam](self)
1361 var _n_cpar
: nullable TCpar = null
1362 fun n_cpar
: nullable TCpar do return _n_cpar
1363 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
1364 var _n_type
: nullable AType = null
1365 fun n_type
: nullable AType do return _n_type
1366 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
1370 # A parameter definition in a signature. eg `x:X`
1374 fun n_id
: TId do return _n_id
1375 fun n_id
=(n_id
: TId) do _n_id
= n_id
1376 var _n_type
: nullable AType = null
1377 fun n_type
: nullable AType do return _n_type
1378 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
1379 var _n_dotdotdot
: nullable TDotdotdot = null
1380 fun n_dotdotdot
: nullable TDotdotdot do return _n_dotdotdot
1381 fun n_dotdotdot
=(n_dotdotdot
: nullable TDotdotdot) do _n_dotdotdot
= n_dotdotdot
1385 # A static type. eg `nullable X[Y]`
1388 var _n_kwnullable
: nullable TKwnullable = null
1389 fun n_kwnullable
: nullable TKwnullable do return _n_kwnullable
1390 fun n_kwnullable
=(n_kwnullable
: nullable TKwnullable) do _n_kwnullable
= n_kwnullable
1392 # The name of the class or of the formal type
1394 fun n_id
: TClassid do return _n_id
1395 fun n_id
=(n_id
: TClassid) do _n_id
= n_id
1397 # Type arguments for a generic type
1398 var n_types
: ANodes[AType] = new ANodes[AType](self)
1402 # A label at the end of a block or in a break/continue statement. eg `label x`
1405 var _n_kwlabel
: TKwlabel
1406 fun n_kwlabel
: TKwlabel do return _n_kwlabel
1407 fun n_kwlabel
=(n_kwlabel
: TKwlabel) do _n_kwlabel
= n_kwlabel
1408 var _n_id
: nullable TId
1409 fun n_id
: nullable TId do return _n_id
1410 fun n_id
=(n_id
: nullable TId) do _n_id
= n_id
1414 # Expression and statements
1415 # From a AST point of view there is no distinction between statement and expressions (even if the parser has to distinguish them)
1416 abstract class AExpr
1420 # A sequence of AExpr (usually statements)
1421 # The last AExpr gives the value of the whole block
1424 var n_expr
: ANodes[AExpr] = new ANodes[AExpr](self)
1425 var _n_kwend
: nullable TKwend = null
1426 fun n_kwend
: nullable TKwend do return _n_kwend
1427 fun n_kwend
=(n_kwend
: nullable TKwend) do _n_kwend
= n_kwend
1431 # A declaration of a local variable. eg `var x: X = y`
1434 var _n_kwvar
: TKwvar
1435 fun n_kwvar
: TKwvar do return _n_kwvar
1436 fun n_kwvar
=(n_kwvar
: TKwvar) do _n_kwvar
= n_kwvar
1438 fun n_id
: TId do return _n_id
1439 fun n_id
=(n_id
: TId) do _n_id
= n_id
1440 var _n_type
: nullable AType = null
1441 fun n_type
: nullable AType do return _n_type
1442 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
1443 var _n_assign
: nullable TAssign = null
1444 fun n_assign
: nullable TAssign do return _n_assign
1445 fun n_assign
=(n_assign
: nullable TAssign) do _n_assign
= n_assign
1447 # The initial value, if any
1448 var _n_expr
: nullable AExpr = null
1449 fun n_expr
: nullable AExpr do return _n_expr
1450 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1454 # A `return` statement. eg `return x`
1457 var _n_kwreturn
: nullable TKwreturn = null
1458 fun n_kwreturn
: nullable TKwreturn do return _n_kwreturn
1459 fun n_kwreturn
=(n_kwreturn
: nullable TKwreturn) do _n_kwreturn
= n_kwreturn
1460 var _n_expr
: nullable AExpr = null
1461 fun n_expr
: nullable AExpr do return _n_expr
1462 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1466 # Something that has a label.
1467 abstract class ALabelable
1469 var _n_label
: nullable ALabel = null
1470 fun n_label
: nullable ALabel do return _n_label
1471 fun n_label
=(n_label
: nullable ALabel) do _n_label
= n_label
1475 # A `break` statement.
1479 var _n_kwbreak
: TKwbreak
1480 fun n_kwbreak
: TKwbreak do return _n_kwbreak
1481 fun n_kwbreak
=(n_kwbreak
: TKwbreak) do _n_kwbreak
= n_kwbreak
1482 var _n_expr
: nullable AExpr = null
1483 fun n_expr
: nullable AExpr do return _n_expr
1484 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1488 # An `abort` statement
1491 var _n_kwabort
: TKwabort
1492 fun n_kwabort
: TKwabort do return _n_kwabort
1493 fun n_kwabort
=(n_kwabort
: TKwabort) do _n_kwabort
= n_kwabort
1497 # A `continue` statement
1501 var _n_kwcontinue
: nullable TKwcontinue = null
1502 fun n_kwcontinue
: nullable TKwcontinue do return _n_kwcontinue
1503 fun n_kwcontinue
=(n_kwcontinue
: nullable TKwcontinue) do _n_kwcontinue
= n_kwcontinue
1504 var _n_expr
: nullable AExpr = null
1505 fun n_expr
: nullable AExpr do return _n_expr
1506 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1515 fun n_kwdo
: TKwdo do return _n_kwdo
1516 fun n_kwdo
=(n_kwdo
: TKwdo) do _n_kwdo
= n_kwdo
1517 var _n_block
: nullable AExpr = null
1518 fun n_block
: nullable AExpr do return _n_block
1519 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1527 fun n_kwif
: TKwif do return _n_kwif
1528 fun n_kwif
=(n_kwif
: TKwif) do _n_kwif
= n_kwif
1530 fun n_expr
: AExpr do return _n_expr
1531 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1532 var _n_then
: nullable AExpr = null
1533 fun n_then
: nullable AExpr do return _n_then
1534 fun n_then
=(n_then
: nullable AExpr) do _n_then
= n_then
1535 var _n_else
: nullable AExpr = null
1536 fun n_else
: nullable AExpr do return _n_else
1537 fun n_else
=(n_else
: nullable AExpr) do _n_else
= n_else
1545 fun n_kwif
: TKwif do return _n_kwif
1546 fun n_kwif
=(n_kwif
: TKwif) do _n_kwif
= n_kwif
1548 fun n_expr
: AExpr do return _n_expr
1549 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1550 var _n_kwthen
: TKwthen
1551 fun n_kwthen
: TKwthen do return _n_kwthen
1552 fun n_kwthen
=(n_kwthen
: TKwthen) do _n_kwthen
= n_kwthen
1554 fun n_then
: AExpr do return _n_then
1555 fun n_then
=(n_then
: AExpr) do _n_then
= n_then
1556 var _n_kwelse
: TKwelse
1557 fun n_kwelse
: TKwelse do return _n_kwelse
1558 fun n_kwelse
=(n_kwelse
: TKwelse) do _n_kwelse
= n_kwelse
1560 fun n_else
: AExpr do return _n_else
1561 fun n_else
=(n_else
: AExpr) do _n_else
= n_else
1565 # A `while` statement
1569 var _n_kwwhile
: TKwwhile
1570 fun n_kwwhile
: TKwwhile do return _n_kwwhile
1571 fun n_kwwhile
=(n_kwwhile
: TKwwhile) do _n_kwwhile
= n_kwwhile
1573 fun n_expr
: AExpr do return _n_expr
1574 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1576 fun n_kwdo
: TKwdo do return _n_kwdo
1577 fun n_kwdo
=(n_kwdo
: TKwdo) do _n_kwdo
= n_kwdo
1578 var _n_block
: nullable AExpr = null
1579 fun n_block
: nullable AExpr do return _n_block
1580 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1584 # A `loop` statement
1588 var _n_kwloop
: TKwloop
1589 fun n_kwloop
: TKwloop do return _n_kwloop
1590 fun n_kwloop
=(n_kwloop
: TKwloop) do _n_kwloop
= n_kwloop
1591 var _n_block
: nullable AExpr = null
1592 fun n_block
: nullable AExpr do return _n_block
1593 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1601 var _n_kwfor
: TKwfor
1602 fun n_kwfor
: TKwfor do return _n_kwfor
1603 fun n_kwfor
=(n_kwfor
: TKwfor) do _n_kwfor
= n_kwfor
1604 var n_ids
: ANodes[TId] = new ANodes[TId](self)
1606 fun n_expr
: AExpr do return _n_expr
1607 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1609 fun n_kwdo
: TKwdo do return _n_kwdo
1610 fun n_kwdo
=(n_kwdo
: TKwdo) do _n_kwdo
= n_kwdo
1611 var _n_block
: nullable AExpr = null
1612 fun n_block
: nullable AExpr do return _n_block
1613 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1617 # An `assert` statement
1620 var _n_kwassert
: TKwassert
1621 fun n_kwassert
: TKwassert do return _n_kwassert
1622 fun n_kwassert
=(n_kwassert
: TKwassert) do _n_kwassert
= n_kwassert
1623 var _n_id
: nullable TId = null
1624 fun n_id
: nullable TId do return _n_id
1625 fun n_id
=(n_id
: nullable TId) do _n_id
= n_id
1627 fun n_expr
: AExpr do return _n_expr
1628 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1629 var _n_else
: nullable AExpr = null
1630 fun n_else
: nullable AExpr do return _n_else
1631 fun n_else
=(n_else
: nullable AExpr) do _n_else
= n_else
1635 # Whatever is a simple assignment. eg `= something`
1636 abstract class AAssignFormExpr
1638 var _n_assign
: TAssign
1639 fun n_assign
: TAssign do return _n_assign
1640 fun n_assign
=(n_assign
: TAssign) do _n_assign
= n_assign
1642 fun n_value
: AExpr do return _n_value
1643 fun n_value
=(n_value
: AExpr) do _n_value
= n_value
1647 # Whatever is a combined assignment. eg `+= something`
1648 abstract class AReassignFormExpr
1650 var _n_assign_op
: AAssignOp
1651 fun n_assign_op
: AAssignOp do return _n_assign_op
1652 fun n_assign_op
=(n_assign_op
: AAssignOp) do _n_assign_op
= n_assign_op
1654 fun n_value
: AExpr do return _n_value
1655 fun n_value
=(n_value
: AExpr) do _n_value
= n_value
1659 # A `once` expression. eg `once x`
1662 var _n_kwonce
: TKwonce
1663 fun n_kwonce
: TKwonce do return _n_kwonce
1664 fun n_kwonce
=(n_kwonce
: TKwonce) do _n_kwonce
= n_kwonce
1668 # A polymorphic invocation of a method
1669 # The form of the invocation (name, arguments, etc) are specific
1670 abstract class ASendExpr
1672 # The receiver of the method invocation
1674 fun n_expr
: AExpr do return _n_expr
1675 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1679 # A binary operation on a method
1680 abstract class ABinopExpr
1682 # The second operand of the operation
1683 # Note: the receiver (`n_expr`) is the first operand
1685 fun n_expr2
: AExpr do return _n_expr2
1686 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1690 # Something that is boolean expression
1691 abstract class ABoolExpr
1699 fun n_expr
: AExpr do return _n_expr
1700 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1702 fun n_expr2
: AExpr do return _n_expr2
1703 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1707 # A `and` expression
1711 fun n_expr
: AExpr do return _n_expr
1712 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1714 fun n_expr2
: AExpr do return _n_expr2
1715 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1719 # A `or else` expression
1723 fun n_expr
: AExpr do return _n_expr
1724 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1726 fun n_expr2
: AExpr do return _n_expr2
1727 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1731 # A `implies` expression
1735 fun n_expr
: AExpr do return _n_expr
1736 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1738 fun n_expr2
: AExpr do return _n_expr2
1739 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1743 # A `not` expression
1746 var _n_kwnot
: TKwnot
1747 fun n_kwnot
: TKwnot do return _n_kwnot
1748 fun n_kwnot
=(n_kwnot
: TKwnot) do _n_kwnot
= n_kwnot
1750 fun n_expr
: AExpr do return _n_expr
1751 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1795 # A type-ckeck expression. eg `x isa T`
1799 fun n_expr
: AExpr do return _n_expr
1800 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1802 fun n_type
: AType do return _n_type
1803 fun n_type
=(n_type
: AType) do _n_type
= n_type
1817 # A `<=>` expression
1837 # A unary minus expression. eg `-x`
1840 var _n_minus
: TMinus
1841 fun n_minus
: TMinus do return _n_minus
1842 fun n_minus
=(n_minus
: TMinus) do _n_minus
= n_minus
1846 # An explicit instantiation. eg `new T`
1849 var _n_kwnew
: TKwnew
1850 fun n_kwnew
: TKwnew do return _n_kwnew
1851 fun n_kwnew
=(n_kwnew
: TKwnew) do _n_kwnew
= n_kwnew
1853 fun n_type
: AType do return _n_type
1854 fun n_type
=(n_type
: AType) do _n_type
= n_type
1856 # The name of the named-constructor, if any
1857 var _n_id
: nullable TId = null
1858 fun n_id
: nullable TId do return _n_id
1859 fun n_id
=(n_id
: nullable TId) do _n_id
= n_id
1861 fun n_args
: AExprs do return _n_args
1862 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1866 # Whatever is a old-style attribute access
1867 abstract class AAttrFormExpr
1870 # The receiver of the attribute
1872 fun n_expr
: AExpr do return _n_expr
1873 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1875 # The name of the attribute
1877 fun n_id
: TAttrid do return _n_id
1878 fun n_id
=(n_id
: TAttrid) do _n_id
= n_id
1883 # The read of an attribute. eg `x._a`
1888 # The assignment of an attribute. eg `x._a=y`
1889 class AAttrAssignExpr
1891 super AAssignFormExpr
1894 # Whatever looks-like a call with a standard method and any number of arguments.
1895 abstract class ACallFormExpr
1898 # The name of the method
1900 fun n_id
: TId do return _n_id
1901 fun n_id
=(n_id
: TId) do _n_id
= n_id
1903 # The arguments of the call
1905 fun n_args
: AExprs do return _n_args
1906 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1910 # A complex setter call (standard or brackets)
1911 abstract class ASendReassignFormExpr
1913 super AReassignFormExpr
1916 # A complex attribute assignment. eg `x._a+=y`
1917 class AAttrReassignExpr
1919 super AReassignFormExpr
1922 # A call with a standard method-name and any number of arguments. eg `x.m(y)`. OR just a simple id
1923 # 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`.
1924 # Semantic analysis have to transform them to instance of `AVarExpr`.
1929 # A setter call with a standard method-name and any number of arguments. eg `x.m(y)=z`. OR just a simple assignment.
1930 # 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`.
1931 # Semantic analysis have to transform them to instance of `AVarAssignExpr`.
1932 class ACallAssignExpr
1934 super AAssignFormExpr
1937 # 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.
1938 # 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`.
1939 # Semantic analysis have to transform them to instance of `AVarReassignExpr`.
1940 class ACallReassignExpr
1942 super ASendReassignFormExpr
1945 # A call to `super`. OR a call of a super-constructor
1948 var _n_qualified
: nullable AQualified = null
1949 fun n_qualified
: nullable AQualified do return _n_qualified
1950 fun n_qualified
=(n_qualified
: nullable AQualified) do _n_qualified
= n_qualified
1951 var _n_kwsuper
: TKwsuper
1952 fun n_kwsuper
: TKwsuper do return _n_kwsuper
1953 fun n_kwsuper
=(n_kwsuper
: TKwsuper) do _n_kwsuper
= n_kwsuper
1955 fun n_args
: AExprs do return _n_args
1956 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1960 # A call to the `init` constructor.
1961 # Note: because `init` is a keyword and not a `TId`, the explicit call to init cannot be a ACallFormExpr.
1964 var _n_kwinit
: TKwinit
1965 fun n_kwinit
: TKwinit do return _n_kwinit
1966 fun n_kwinit
=(n_kwinit
: TKwinit) do _n_kwinit
= n_kwinit
1968 fun n_args
: AExprs do return _n_args
1969 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1973 # Whatever looks-like a call of the brackets `[]` operator.
1974 abstract class ABraFormExpr
1977 fun n_args
: AExprs do return _n_args
1978 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1982 # A call of the brackets operator. eg `x[y,z]`
1987 # A setter call of the bracket operator. eg `x[y,z]=t`
1988 class ABraAssignExpr
1990 super AAssignFormExpr
1993 # Whatever is an access to a local variable
1994 abstract class AVarFormExpr
1997 fun n_id
: TId do return _n_id
1998 fun n_id
=(n_id
: TId) do _n_id
= n_id
2002 # A complex setter call of the bracket operator. eg `x[y,z]+=t`
2003 class ABraReassignExpr
2005 super ASendReassignFormExpr
2008 # A local variable read access.
2009 # The parser cannot instantiate them, see `ACallExpr`.
2014 # A local variable simple assigment access
2015 # The parser cannot instantiate them, see `ACallAssignExpr`.
2016 class AVarAssignExpr
2018 super AAssignFormExpr
2021 # A local variable complex assignment access
2022 # The parser cannot instantiate them, see `ACallReassignExpr`.
2023 class AVarReassignExpr
2025 super AReassignFormExpr
2028 # A literal range, open or closed
2029 abstract class ARangeExpr
2032 fun n_expr
: AExpr do return _n_expr
2033 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2035 fun n_expr2
: AExpr do return _n_expr2
2036 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
2040 # A closed literal range. eg `[x..y]`
2044 fun n_obra
: TObra do return _n_obra
2045 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
2047 fun n_cbra
: TCbra do return _n_cbra
2048 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
2052 # An open literal range. eg `[x..y[`
2056 fun n_obra
: TObra do return _n_obra
2057 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
2059 fun n_cbra
: TObra do return _n_cbra
2060 fun n_cbra
=(n_cbra
: TObra) do _n_cbra
= n_cbra
2064 # A literal array. eg. `[x,y,z]`
2067 var _n_exprs
: AExprs
2068 fun n_exprs
: AExprs do return _n_exprs
2069 fun n_exprs
=(n_exprs
: AExprs) do _n_exprs
= n_exprs
2076 var _n_kwself
: nullable TKwself
2077 fun n_kwself
: nullable TKwself do return _n_kwself
2078 fun n_kwself
=(n_kwself
: nullable TKwself) do _n_kwself
= n_kwself
2082 # When there is no explicit receiver, `self` is implicit
2083 class AImplicitSelfExpr
2087 # A `true` boolean literal constant
2090 var _n_kwtrue
: TKwtrue
2091 fun n_kwtrue
: TKwtrue do return _n_kwtrue
2092 fun n_kwtrue
=(n_kwtrue
: TKwtrue) do _n_kwtrue
= n_kwtrue
2095 # A `false` boolean literal constant
2098 var _n_kwfalse
: TKwfalse
2099 fun n_kwfalse
: TKwfalse do return _n_kwfalse
2100 fun n_kwfalse
=(n_kwfalse
: TKwfalse) do _n_kwfalse
= n_kwfalse
2103 # A `null` literal constant
2106 var _n_kwnull
: TKwnull
2107 fun n_kwnull
: TKwnull do return _n_kwnull
2108 fun n_kwnull
=(n_kwnull
: TKwnull) do _n_kwnull
= n_kwnull
2111 # An integer literal
2115 # An integer literal in decimal format
2118 var _n_number
: TNumber
2119 fun n_number
: TNumber do return _n_number
2120 fun n_number
=(n_number
: TNumber) do _n_number
= n_number
2123 # An integer literal in hexadecimal format
2126 var _n_hex_number
: THexNumber
2127 fun n_hex_number
: THexNumber do return _n_hex_number
2128 fun n_hex_number
=(n_hex_number
: THexNumber) do _n_hex_number
= n_hex_number
2134 var _n_float
: TFloat
2135 fun n_float
: TFloat do return _n_float
2136 fun n_float
=(n_float
: TFloat) do _n_float
= n_float
2139 # A character literal
2143 fun n_char
: TChar do return _n_char
2144 fun n_char
=(n_char
: TChar) do _n_char
= n_char
2148 abstract class AStringFormExpr
2150 var _n_string
: Token
2151 fun n_string
: Token do return _n_string
2152 fun n_string
=(n_string
: Token) do _n_string
= n_string
2156 # A simple string. eg. `"abc"`
2158 super AStringFormExpr
2161 # The start of a superstring. eg `"abc{`
2162 class AStartStringExpr
2163 super AStringFormExpr
2166 # The middle of a superstring. eg `}abc{`
2167 class AMidStringExpr
2168 super AStringFormExpr
2171 # The end of a superstrng. eg `}abc"`
2172 class AEndStringExpr
2173 super AStringFormExpr
2176 # A superstring literal. eg `"a{x}b{y}c"`
2177 # Each part is modelized a sequence of expression. eg. `["a{, x, }b{, y, }c"]`
2178 class ASuperstringExpr
2180 var n_exprs
: ANodes[AExpr] = new ANodes[AExpr](self)
2184 # A simple parenthesis. eg `(x)`
2188 fun n_opar
: TOpar do return _n_opar
2189 fun n_opar
=(n_opar
: TOpar) do _n_opar
= n_opar
2191 fun n_cpar
: TCpar do return _n_cpar
2192 fun n_cpar
=(n_cpar
: TCpar) do _n_cpar
= n_cpar
2196 # Whatevej just contains (and mimic) an other expression
2197 abstract class AProxyExpr
2200 fun n_expr
: AExpr do return _n_expr
2201 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2205 # A type cast. eg `x.as(T)`
2209 fun n_expr
: AExpr do return _n_expr
2210 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2212 fun n_kwas
: TKwas do return _n_kwas
2213 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
2214 var _n_opar
: nullable TOpar = null
2215 fun n_opar
: nullable TOpar do return _n_opar
2216 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2218 fun n_type
: AType do return _n_type
2219 fun n_type
=(n_type
: AType) do _n_type
= n_type
2220 var _n_cpar
: nullable TCpar = null
2221 fun n_cpar
: nullable TCpar do return _n_cpar
2222 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2226 # A as-not-null cast. eg `x.as(not null)`
2227 class AAsNotnullExpr
2230 fun n_expr
: AExpr do return _n_expr
2231 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2233 fun n_kwas
: TKwas do return _n_kwas
2234 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
2235 var _n_opar
: nullable TOpar = null
2236 fun n_opar
: nullable TOpar do return _n_opar
2237 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2238 var _n_kwnot
: TKwnot
2239 fun n_kwnot
: TKwnot do return _n_kwnot
2240 fun n_kwnot
=(n_kwnot
: TKwnot) do _n_kwnot
= n_kwnot
2241 var _n_kwnull
: TKwnull
2242 fun n_kwnull
: TKwnull do return _n_kwnull
2243 fun n_kwnull
=(n_kwnull
: TKwnull) do _n_kwnull
= n_kwnull
2244 var _n_cpar
: nullable TCpar = null
2245 fun n_cpar
: nullable TCpar do return _n_cpar
2246 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2250 # A is-set check of old-style attributes. eg `isset x._a`
2251 class AIssetAttrExpr
2253 var _n_kwisset
: TKwisset
2254 fun n_kwisset
: TKwisset do return _n_kwisset
2255 fun n_kwisset
=(n_kwisset
: TKwisset) do _n_kwisset
= n_kwisset
2259 # A elyspis notation used to pass an expression as it in a vararg parameter
2263 fun n_expr
: AExpr do return _n_expr
2264 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2265 var _n_dotdotdot
: TDotdotdot
2266 fun n_dotdotdot
: TDotdotdot do return _n_dotdotdot
2267 fun n_dotdotdot
=(n_dotdotdot
: TDotdotdot) do _n_dotdotdot
= n_dotdotdot
2271 # A list of expression separated with commas (arguments for instance)
2272 abstract class AExprs
2274 var n_exprs
: ANodes[AExpr] = new ANodes[AExpr](self)
2279 class ADebugTypeExpr
2281 var _n_kwdebug
: TKwdebug
2282 fun n_kwdebug
: TKwdebug do return _n_kwdebug
2283 fun n_kwdebug
=(n_kwdebug
: TKwdebug) do _n_kwdebug
= n_kwdebug
2284 var _n_kwtype
: TKwtype
2285 fun n_kwtype
: TKwtype do return _n_kwtype
2286 fun n_kwtype
=(n_kwtype
: TKwtype) do _n_kwtype
= n_kwtype
2288 fun n_expr
: AExpr do return _n_expr
2289 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2291 fun n_type
: AType do return _n_type
2292 fun n_type
=(n_type
: AType) do _n_type
= n_type
2296 # A simple list of expressions
2301 # A list of expressions enclosed in parentheses
2305 fun n_opar
: TOpar do return _n_opar
2306 fun n_opar
=(n_opar
: TOpar) do _n_opar
= n_opar
2308 fun n_cpar
: TCpar do return _n_cpar
2309 fun n_cpar
=(n_cpar
: TCpar) do _n_cpar
= n_cpar
2313 # A list of expressions enclosed in brackets
2317 fun n_obra
: TObra do return _n_obra
2318 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
2320 fun n_cbra
: TCbra do return _n_cbra
2321 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
2325 # A complex assignment operator. eg `+=`
2326 abstract class AAssignOp
2331 var _n_pluseq
: TPluseq
2332 fun n_pluseq
: TPluseq do return _n_pluseq
2333 fun n_pluseq
=(n_pluseq
: TPluseq) do _n_pluseq
= n_pluseq
2336 class AMinusAssignOp
2338 var _n_minuseq
: TMinuseq
2339 fun n_minuseq
: TMinuseq do return _n_minuseq
2340 fun n_minuseq
=(n_minuseq
: TMinuseq) do _n_minuseq
= n_minuseq
2346 var _n_quad
: nullable TQuad = null
2347 fun n_quad
: nullable TQuad do return _n_quad
2348 fun n_quad
=(n_quad
: nullable TQuad) do _n_quad
= n_quad
2349 var n_path
: ANodes[TId] = new ANodes[TId](self)
2351 fun n_id
: TId do return _n_id
2352 fun n_id
=(n_id
: TId) do _n_id
= n_id
2358 fun n_kwin
: TKwin do return _n_kwin
2359 fun n_kwin
=(n_kwin
: TKwin) do _n_kwin
= n_kwin
2360 var _n_string
: TString
2361 fun n_string
: TString do return _n_string
2362 fun n_string
=(n_string
: TString) do _n_string
= n_string
2365 class AExternCodeBlock
2367 var _n_in_language
: nullable AInLanguage = null
2368 fun n_in_language
: nullable AInLanguage do return _n_in_language
2369 fun n_in_language
=(n_in_language
: nullable AInLanguage) do _n_in_language
= n_in_language
2370 var _n_extern_code_segment
: TExternCodeSegment
2371 fun n_extern_code_segment
: TExternCodeSegment do return _n_extern_code_segment
2372 fun n_extern_code_segment
=(n_extern_code_segment
: TExternCodeSegment) do _n_extern_code_segment
= n_extern_code_segment
2377 var _n_quad
: nullable TQuad = null
2378 fun n_quad
: nullable TQuad do return _n_quad
2379 fun n_quad
=(n_quad
: nullable TQuad) do _n_quad
= n_quad
2380 var n_id
: ANodes[TId] = new ANodes[TId](self)
2381 var _n_classid
: nullable TClassid = null
2382 fun n_classid
: nullable TClassid do return _n_classid
2383 fun n_classid
=(n_classid
: nullable TClassid) do _n_classid
= n_classid
2387 # A documentation of a definition
2388 # It contains the block of comments just above the declaration
2391 var n_comment
: ANodes[TComment] = new ANodes[TComment](self)
2397 var _n_at
: nullable TAt = null
2398 fun n_at
: nullable TAt do return _n_at
2399 fun n_at
=(n_at
: nullable TAt) do _n_at
= n_at
2400 var _n_opar
: nullable TOpar = null
2401 fun n_opar
: nullable TOpar do return _n_opar
2402 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2403 var n_items
: ANodes[AAnnotation] = new ANodes[AAnnotation](self)
2404 var _n_cpar
: nullable TCpar = null
2405 fun n_cpar
: nullable TCpar do return _n_cpar
2406 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2411 var _n_doc
: nullable ADoc = null
2412 fun n_doc
: nullable ADoc do return _n_doc
2413 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
2414 var _n_kwredef
: nullable TKwredef = null
2415 fun n_kwredef
: nullable TKwredef do return _n_kwredef
2416 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
2417 var _n_visibility
: nullable AVisibility
2418 fun n_visibility
: nullable AVisibility do return _n_visibility
2419 fun n_visibility
=(n_visibility
: nullable AVisibility) do _n_visibility
= n_visibility
2421 fun n_atid
: AAtid do return _n_atid
2422 fun n_atid
=(n_atid
: AAtid) do _n_atid
= n_atid
2423 var _n_opar
: nullable TOpar = null
2424 fun n_opar
: nullable TOpar do return _n_opar
2425 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2426 var n_args
: ANodes[AAtArg] = new ANodes[AAtArg](self)
2427 var _n_cpar
: nullable TCpar = null
2428 fun n_cpar
: nullable TCpar do return _n_cpar
2429 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2432 abstract class AAtArg
2438 fun n_type
: AType do return _n_type
2439 fun n_type
=(n_type
: AType) do _n_type
= n_type
2445 fun n_expr
: AExpr do return _n_expr
2446 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2452 abstract class AAtid
2455 fun n_id
: Token do return _n_id
2456 fun n_id
=(n_id
: Token) do _n_id
= n_id
2468 class AKwreadableAtid
2471 class AKwwritableAtid
2478 # The root of the AST
2481 var _n_base
: nullable AModule
2482 fun n_base
: nullable AModule do return _n_base
2483 fun n_base
=(n_base
: nullable AModule) do _n_base
= n_base
2485 fun n_eof
: EOF do return _n_eof
2486 fun n_eof
=(n_eof
: EOF) do _n_eof
= n_eof
2487 init(n_base
: nullable AModule, n_eof
: EOF)
2489 self._n_base
= n_base