2e52c082ba22af5b3afd9b7938d7ada504bb9d02
1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
15 # AST nodes of the Nit language
16 # Was previously based on parser_abs.nit.
17 module parser_nodes
is old_style_init
21 # Root of the AST class-hierarchy
23 # Location is set during AST building. Once built, location cannon be null.
24 # However, manual instantiated nodes may need more care.
25 var location
: Location is writable, noinit
27 # The location of the important part of the node (identifier or whatever)
28 fun hot_location
: Location do return location
30 # Display a message for the colored location of the node
31 fun debug
(message
: String)
33 sys
.stderr
.write
"{hot_location} {self.class_name}: {message}\n{hot_location.colored_line("0;32")}\n"
36 # Parent of the node in the AST
37 var parent
: nullable ANode = null
39 # The topmost ancestor of the element
40 # This just apply `parent` until the first one
46 if p
== null then return res
51 # The most specific common parent between `self` and `other`
52 # Return null if the two node are unrelated (distinct root)
53 fun common_parent
(other
: ANode): nullable ANode
55 # First, get the same depth
56 var s
: nullable ANode = self
57 var o
: nullable ANode = other
58 var d
= s
.depth
- o
.depth
67 assert o
.depth
== s
.depth
68 # Second, go up until same in found
76 # Number of nodes between `self` and the `root` of the AST
77 # ENSURE `self == self.root implies result == 0 `
78 # ENSURE `self != self.root implies result == self.parent.depth + 1`
85 if p
== null then return res
91 # Protect from invalid instantiation of nodes
94 # Replace a child with an other node in the AST
95 private fun replace_child
(old_child
: ANode, new_child
: nullable ANode) is abstract
97 # Detach a node from its parent
98 # Aborts if the node is not detashable. use `replace_with` instead
99 # REQUIRE: parent != null
100 # REQUIRE: is_detachable
101 # ENDURE: parent == null
104 assert parent
!= null
105 parent
.replace_child
(self, null)
109 # Replace itself with an other node in the AST
110 # REQUIRE: parent != null
111 # ENSURE: node.parent == old(parent)
112 # ENSURE: parent == null
113 fun replace_with
(node
: ANode)
115 assert parent
!= null
116 parent
.replace_child
(self, node
)
120 # Visit all nodes in order.
121 # Thus, call `v.enter_visit(e)` for each child `e`
122 fun visit_all
(v
: Visitor) is abstract
125 # A sequence of nodes
126 # There is a specifc class (instead of a using Array) to track the parent/child relation when nodes are added or removed
127 class ANodes[E
: ANode]
129 private var parent
: ANode
130 private var items
= new Array[E
]
131 redef fun iterator
do return items
.iterator
132 redef fun length
do return items
.length
133 redef fun is_empty
do return items
.is_empty
152 var res
= items
.shift
164 redef fun []=(index
, e
)
166 hook_remove
(self[index
])
170 redef fun remove_at
(index
)
172 hook_remove
(items
[index
])
173 items
.remove_at
(index
)
175 private fun hook_add
(e
: E
)
177 #assert e.parent == null
180 private fun hook_remove
(e
: E
)
182 assert e
.parent
== parent
186 # Used in parent contructor to fill elements
187 private fun unsafe_add_all
(nodes
: Collection[Object])
189 var parent
= self.parent
197 private fun replace_child
(old_child
: ANode, new_child
: nullable ANode): Bool
199 var parent
= self.parent
200 for i
in [0..length
[ do
201 if self[i
] == old_child
then
202 if new_child
!= null then
203 assert new_child
isa E
205 new_child
.parent
= parent
215 private fun visit_all
(v
: Visitor)
217 for n
in self do v
.enter_visit
(n
)
221 # Ancestor of all tokens
222 # A token is a node that has a `text` but no children.
226 # The raw content on the token
227 fun text
: String is abstract
228 fun text
=(text
: String) is abstract
230 # The previous token in the Lexer.
231 # May have disapeared in the AST
232 var prev_token
: nullable Token = null
234 # The next token in the Lexer.
235 # May have disapeared in the AST
236 var next_token
: nullable Token = null
238 # The verbatim blank text between `prev_token` and `self`
239 fun blank_before
: String
241 if prev_token
== null then return ""
242 var from
= prev_token
.location
.pend
+1
243 var to
= location
.pstart
244 return location
.file
.string
.substring
(from
,to-from
)
247 redef fun to_s
: String do
251 redef fun visit_all
(v
: Visitor) do end
252 redef fun replace_child
(old_child
: ANode, new_child
: nullable ANode) do end
255 redef class SourceFile
256 # The first token parser by the lexer
257 # May have disapeared in the final AST
258 var first_token
: nullable Token = null
260 # The first token parser by the lexer
261 # May have disapeared in the final AST
262 var last_token
: nullable Token = null
265 # Ancestor of all productions
266 # A production is a node without text but that usually has children.
270 # All the annotations attached directly to the node
271 var _n_annotations
: nullable AAnnotations = null
272 fun n_annotations
: nullable AAnnotations do return _n_annotations
273 fun n_annotations
=(n_annotations
: nullable AAnnotations) do _n_annotations
= n_annotations
275 redef fun replace_with
(n
: ANode)
279 if not isset n
._location
and isset _location
then n
._location
= _location
283 # Abstract standard visitor on the AST
284 abstract class Visitor
285 # What the visitor do when a node is visited
286 # Concrete visitors should implement this method.
288 protected fun visit
(e
: ANode) is abstract
290 # Ask the visitor to visit a given node.
291 # Usually automatically called by visit_all* methods.
292 # This method should not be redefined
293 fun enter_visit
(e
: nullable ANode)
295 if e
== null then return
296 var old
= _current_node
302 # The current visited node
303 var _current_node
: nullable ANode = null
304 fun current_node
: nullable ANode do return _current_node
305 fun current_node
=(current_node
: nullable ANode) do _current_node
= current_node
308 # Token of end of line (basically `\n`)
317 # Token of a line of comments
318 # Starts with the `#` and contains the final end-of-line (if any)
323 # A token associated with a keyword
324 abstract class TokenKeyword
328 return "keyword '{text}'"
512 # A token associated with an operator (and other lookalike symbols)
513 abstract class TokenOperator
517 return "operator '{text}'"
584 # A class (or formal type) identifier. They start with an uppercase.
589 do return "type identifier '{text}'"
593 # A standard identifier (variable, method...). They start with a lowercase.
598 do return "identifier '{text}'"
602 # An attribute identifier. They start with an underscore.
607 do return "attribute '{text}'"
611 # A token of a literal value (string, integer, etc).
612 abstract class TokenLiteral
616 do return "literal value '{text}'"
649 do return "malformed string {text}"
658 do return "malformed character {text}"
662 class TExternCodeSegment
686 # The main node of a Nit source-file
690 var _n_moduledecl
: nullable AModuledecl = null
691 fun n_moduledecl
: nullable AModuledecl do return _n_moduledecl
692 fun n_moduledecl
=(n_moduledecl
: nullable AModuledecl) do _n_moduledecl
= n_moduledecl
693 var n_imports
: ANodes[AImport] = new ANodes[AImport](self)
694 var n_extern_code_blocks
: ANodes[AExternCodeBlock] = new ANodes[AExternCodeBlock](self)
695 var n_classdefs
: ANodes[AClassdef] = new ANodes[AClassdef](self)
699 # The declaration of the module with the documentation, name, and annotations
702 var _n_doc
: nullable ADoc = null
703 fun n_doc
: nullable ADoc do return _n_doc
704 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
705 var _n_kwredef
: nullable TKwredef = null
706 fun n_kwredef
: nullable TKwredef do return _n_kwredef
707 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
708 var _n_visibility
: AVisibility
709 fun n_visibility
: AVisibility do return _n_visibility
710 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
711 var _n_kwmodule
: TKwmodule
712 fun n_kwmodule
: TKwmodule do return _n_kwmodule
713 fun n_kwmodule
=(n_kwmodule
: TKwmodule) do _n_kwmodule
= n_kwmodule
714 var _n_name
: AModuleName
715 fun n_name
: AModuleName do return _n_name
716 fun n_name
=(n_name
: AModuleName) do _n_name
= n_name
720 # A import clause of a module
721 abstract class AImport
725 # A standard import clause. eg `import x`
728 var _n_visibility
: AVisibility
729 fun n_visibility
: AVisibility do return _n_visibility
730 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
731 var _n_kwimport
: TKwimport
732 fun n_kwimport
: TKwimport do return _n_kwimport
733 fun n_kwimport
=(n_kwimport
: TKwimport) do _n_kwimport
= n_kwimport
734 var _n_name
: AModuleName
735 fun n_name
: AModuleName do return _n_name
736 fun n_name
=(n_name
: AModuleName) do _n_name
= n_name
740 # The special import clause of the kernel module. eg `import end`
743 var _n_visibility
: AVisibility
744 fun n_visibility
: AVisibility do return _n_visibility
745 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
746 var _n_kwimport
: TKwimport
747 fun n_kwimport
: TKwimport do return _n_kwimport
748 fun n_kwimport
=(n_kwimport
: TKwimport) do _n_kwimport
= n_kwimport
750 fun n_kwend
: TKwend do return _n_kwend
751 fun n_kwend
=(n_kwend
: TKwend) do _n_kwend
= n_kwend
755 # A visibility modifier
757 # The public visibility is an empty production (no keyword).
759 # Note: even if some visibilities are only valid on some placse (for instance, no `protected` class or no `intrude` method)
760 # the parser has no such a restriction, therefore the semantic phases has to check that the visibilities make sense.
761 abstract class AVisibility
764 class APublicVisibility
766 var _n_kwpublic
: nullable TKwpublic
767 fun n_kwpublic
: nullable TKwpublic do return _n_kwpublic
768 fun n_kwpublic
=(n_kwpublic
: nullable TKwpublic) do _n_kwpublic
= n_kwpublic
771 class APrivateVisibility
773 var _n_kwprivate
: TKwprivate
774 fun n_kwprivate
: TKwprivate do return _n_kwprivate
775 fun n_kwprivate
=(n_kwprivate
: TKwprivate) do _n_kwprivate
= n_kwprivate
778 class AProtectedVisibility
780 var _n_kwprotected
: TKwprotected
781 fun n_kwprotected
: TKwprotected do return _n_kwprotected
782 fun n_kwprotected
=(n_kwprotected
: TKwprotected) do _n_kwprotected
= n_kwprotected
785 class AIntrudeVisibility
787 var _n_kwintrude
: TKwintrude
788 fun n_kwintrude
: TKwintrude do return _n_kwintrude
789 fun n_kwintrude
=(n_kwintrude
: TKwintrude) do _n_kwintrude
= n_kwintrude
794 # While most definition are `AStdClassdef`
795 # There is tow special case of class definition
796 abstract class AClassdef
798 var n_propdefs
: ANodes[APropdef] = new ANodes[APropdef](self)
802 # A standard class definition with a name, superclasses and properties
805 var _n_doc
: nullable ADoc = null
806 fun n_doc
: nullable ADoc do return _n_doc
807 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
808 var _n_kwredef
: nullable TKwredef = null
809 fun n_kwredef
: nullable TKwredef do return _n_kwredef
810 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
811 var _n_visibility
: AVisibility
812 fun n_visibility
: AVisibility do return _n_visibility
813 fun n_visibility
=(n_visibility
: AVisibility) do _n_visibility
= n_visibility
814 var _n_classkind
: AClasskind
815 fun n_classkind
: AClasskind do return _n_classkind
816 fun n_classkind
=(n_classkind
: AClasskind) do _n_classkind
= n_classkind
817 var _n_id
: nullable TClassid = null
818 fun n_id
: nullable TClassid do return _n_id
819 fun n_id
=(n_id
: nullable TClassid) do _n_id
= n_id
820 var n_formaldefs
: ANodes[AFormaldef] = new ANodes[AFormaldef](self)
821 var _n_extern_code_block
: nullable AExternCodeBlock = null
822 fun n_extern_code_block
: nullable AExternCodeBlock do return _n_extern_code_block
823 fun n_extern_code_block
=(n_extern_code_block
: nullable AExternCodeBlock) do _n_extern_code_block
= n_extern_code_block
824 var n_superclasses
: ANodes[ASuperclass] = new ANodes[ASuperclass](self)
826 fun n_kwend
: TKwend do return _n_kwend
827 fun n_kwend
=(n_kwend
: TKwend) do _n_kwend
= n_kwend
828 redef fun hot_location
do return n_id
.location
832 # The implicit class definition of the implicit main method
837 # The implicit class definition of the top-level methods
842 # The modifier for the kind of class (abstract, interface, etc.)
843 abstract class AClasskind
846 class AConcreteClasskind
848 var _n_kwclass
: TKwclass
849 fun n_kwclass
: TKwclass do return _n_kwclass
850 fun n_kwclass
=(n_kwclass
: TKwclass) do _n_kwclass
= n_kwclass
853 class AAbstractClasskind
855 var _n_kwabstract
: TKwabstract
856 fun n_kwabstract
: TKwabstract do return _n_kwabstract
857 fun n_kwabstract
=(n_kwabstract
: TKwabstract) do _n_kwabstract
= n_kwabstract
858 var _n_kwclass
: TKwclass
859 fun n_kwclass
: TKwclass do return _n_kwclass
860 fun n_kwclass
=(n_kwclass
: TKwclass) do _n_kwclass
= n_kwclass
863 class AInterfaceClasskind
865 var _n_kwinterface
: TKwinterface
866 fun n_kwinterface
: TKwinterface do return _n_kwinterface
867 fun n_kwinterface
=(n_kwinterface
: TKwinterface) do _n_kwinterface
= n_kwinterface
872 var _n_kwenum
: TKwenum
873 fun n_kwenum
: TKwenum do return _n_kwenum
874 fun n_kwenum
=(n_kwenum
: TKwenum) do _n_kwenum
= n_kwenum
877 class AExternClasskind
879 var _n_kwextern
: TKwextern
880 fun n_kwextern
: TKwextern do return _n_kwextern
881 fun n_kwextern
=(n_kwextern
: TKwextern) do _n_kwextern
= n_kwextern
882 var _n_kwclass
: nullable TKwclass = null
883 fun n_kwclass
: nullable TKwclass do return _n_kwclass
884 fun n_kwclass
=(n_kwclass
: nullable TKwclass) do _n_kwclass
= n_kwclass
888 # The definition of a formal generic parameter type. eg `X: Y`
892 fun n_id
: TClassid do return _n_id
893 fun n_id
=(n_id
: TClassid) do _n_id
= n_id
894 # The bound of the parameter type
895 var _n_type
: nullable AType = null
896 fun n_type
: nullable AType do return _n_type
897 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
901 # A super-class. eg `super X`
904 var _n_kwsuper
: TKwsuper
905 fun n_kwsuper
: TKwsuper do return _n_kwsuper
906 fun n_kwsuper
=(n_kwsuper
: TKwsuper) do _n_kwsuper
= n_kwsuper
908 fun n_type
: AType do return _n_type
909 fun n_type
=(n_type
: AType) do _n_type
= n_type
913 # The definition of a property
914 abstract class APropdef
916 var _n_doc
: nullable ADoc = null
917 fun n_doc
: nullable ADoc do return _n_doc
918 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
919 var _n_kwredef
: nullable TKwredef = null
920 fun n_kwredef
: nullable TKwredef do return _n_kwredef
921 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
922 var _n_visibility
: nullable AVisibility = null
923 fun n_visibility
: nullable AVisibility do return _n_visibility
924 fun n_visibility
=(n_visibility
: nullable AVisibility) do _n_visibility
= n_visibility
927 # A definition of an attribute
928 # For historical reason, old-syle and new-style attributes use the same `ANode` sub-class
932 fun n_kwvar
: TKwvar do return _n_kwvar
933 fun n_kwvar
=(n_kwvar
: TKwvar) do _n_kwvar
= n_kwvar
935 # The identifier for an old-style attribute (null if new-style)
936 var _n_id
: nullable TAttrid
937 fun n_id
: nullable TAttrid do return _n_id
938 fun n_id
=(n_id
: nullable TAttrid) do _n_id
= n_id
940 # The identifier for a new-style attribute (null if old-style)
941 var _n_id2
: nullable TId
942 fun n_id2
: nullable TId do return _n_id2
943 fun n_id2
=(n_id2
: nullable TId) do _n_id2
= n_id2
945 var _n_type
: nullable AType = null
946 fun n_type
: nullable AType do return _n_type
947 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
948 var _n_readable
: nullable AAble = null
949 fun n_readable
: nullable AAble do return _n_readable
950 fun n_readable
=(n_readable
: nullable AAble) do _n_readable
= n_readable
951 var _n_writable
: nullable AAble = null
952 fun n_writable
: nullable AAble do return _n_writable
953 fun n_writable
=(n_writable
: nullable AAble) do _n_writable
= n_writable
955 # The initial value, if any
956 var _n_expr
: nullable AExpr = null
957 fun n_expr
: nullable AExpr do return _n_expr
958 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
959 redef fun hot_location
961 if n_id
!= null then return n_id
.location
else return n_id2
.location
966 # A definition of all kind of method (including constructors)
967 abstract class AMethPropdef
969 var _n_kwmeth
: nullable TKwmeth = null
970 fun n_kwmeth
: nullable TKwmeth do return _n_kwmeth
971 fun n_kwmeth
=(n_kwmeth
: nullable TKwmeth) do _n_kwmeth
= n_kwmeth
972 var _n_kwinit
: nullable TKwinit = null
973 fun n_kwinit
: nullable TKwinit do return _n_kwinit
974 fun n_kwinit
=(n_kwinit
: nullable TKwinit) do _n_kwinit
= n_kwinit
975 var _n_kwnew
: nullable TKwnew = null
976 fun n_kwnew
: nullable TKwnew do return _n_kwnew
977 fun n_kwnew
=(n_kwnew
: nullable TKwnew) do _n_kwnew
= n_kwnew
978 var _n_methid
: nullable AMethid = null
979 fun n_methid
: nullable AMethid do return _n_methid
980 fun n_methid
=(n_methid
: nullable AMethid) do _n_methid
= n_methid
981 var _n_signature
: nullable ASignature = null
982 fun n_signature
: nullable ASignature do return _n_signature
983 fun n_signature
=(n_signature
: nullable ASignature) do _n_signature
= n_signature
984 var _n_block
: nullable AExpr = null
985 fun n_block
: nullable AExpr do return _n_block
986 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
987 var _n_extern
: nullable TString = null
988 fun n_extern
: nullable TString do return _n_extern
989 fun n_extern
=(n_extern
: nullable TString) do _n_extern
= n_extern
990 var _n_extern_calls
: nullable AExternCalls = null
991 fun n_extern_calls
: nullable AExternCalls do return _n_extern_calls
992 fun n_extern_calls
=(n_extern_calls
: nullable AExternCalls) do _n_extern_calls
= n_extern_calls
993 var _n_extern_code_block
: nullable AExternCodeBlock = null
994 fun n_extern_code_block
: nullable AExternCodeBlock do return _n_extern_code_block
995 fun n_extern_code_block
=(n_extern_code_block
: nullable AExternCodeBlock) do _n_extern_code_block
= n_extern_code_block
996 redef fun hot_location
998 if n_methid
!= null then
999 return n_methid
.location
1000 else if n_kwinit
!= null then
1001 return n_kwinit
.location
1002 else if n_kwnew
!= null then
1003 return n_kwnew
.location
1010 # A method marked abstract
1011 # *deferred* is a old synonynmous of *abstract* that comes from PRM, that comes from Eiffel.
1012 class ADeferredMethPropdef
1016 # A method marked intern
1017 class AInternMethPropdef
1021 # A method of a constructor marked extern
1022 abstract class AExternPropdef
1026 # A method marked extern
1027 class AExternMethPropdef
1028 super AExternPropdef
1031 # A method with a body
1032 class AConcreteMethPropdef
1037 abstract class AInitPropdef
1041 # A constructor with a body
1042 class AConcreteInitPropdef
1043 super AConcreteMethPropdef
1047 class AInternNewPropdef
1048 super AInternMethPropdef
1052 # A constructor marked extern (defined with the `new` keyword)
1053 class AExternInitPropdef
1054 super AExternPropdef
1058 # The implicit main method
1059 class AMainMethPropdef
1060 super AConcreteMethPropdef
1063 # Declaration of callbacks for extern methods
1066 var _n_kwimport
: TKwimport
1067 fun n_kwimport
: TKwimport do return _n_kwimport
1068 fun n_kwimport
=(n_kwimport
: TKwimport) do _n_kwimport
= n_kwimport
1069 var n_extern_calls
: ANodes[AExternCall] = new ANodes[AExternCall](self)
1072 abstract class AExternCall
1075 abstract class APropExternCall
1078 class ALocalPropExternCall
1079 super APropExternCall
1080 var _n_methid
: AMethid
1081 fun n_methid
: AMethid do return _n_methid
1082 fun n_methid
=(n_methid
: AMethid) do _n_methid
= n_methid
1085 class AFullPropExternCall
1086 super APropExternCall
1088 fun n_type
: AType do return _n_type
1089 fun n_type
=(n_type
: AType) do _n_type
= n_type
1090 var _n_dot
: nullable TDot = null
1091 fun n_dot
: nullable TDot do return _n_dot
1092 fun n_dot
=(n_dot
: nullable TDot) do _n_dot
= n_dot
1093 var _n_methid
: AMethid
1094 fun n_methid
: AMethid do return _n_methid
1095 fun n_methid
=(n_methid
: AMethid) do _n_methid
= n_methid
1098 class AInitPropExternCall
1099 super APropExternCall
1101 fun n_type
: AType do return _n_type
1102 fun n_type
=(n_type
: AType) do _n_type
= n_type
1105 class ASuperExternCall
1107 var _n_kwsuper
: TKwsuper
1108 fun n_kwsuper
: TKwsuper do return _n_kwsuper
1109 fun n_kwsuper
=(n_kwsuper
: TKwsuper) do _n_kwsuper
= n_kwsuper
1112 abstract class ACastExternCall
1115 class ACastAsExternCall
1116 super ACastExternCall
1117 var _n_from_type
: AType
1118 fun n_from_type
: AType do return _n_from_type
1119 fun n_from_type
=(n_from_type
: AType) do _n_from_type
= n_from_type
1120 var _n_dot
: nullable TDot = null
1121 fun n_dot
: nullable TDot do return _n_dot
1122 fun n_dot
=(n_dot
: nullable TDot) do _n_dot
= n_dot
1124 fun n_kwas
: TKwas do return _n_kwas
1125 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
1126 var _n_to_type
: AType
1127 fun n_to_type
: AType do return _n_to_type
1128 fun n_to_type
=(n_to_type
: AType) do _n_to_type
= n_to_type
1131 class AAsNullableExternCall
1132 super ACastExternCall
1134 fun n_type
: AType do return _n_type
1135 fun n_type
=(n_type
: AType) do _n_type
= n_type
1137 fun n_kwas
: TKwas do return _n_kwas
1138 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
1139 var _n_kwnullable
: TKwnullable
1140 fun n_kwnullable
: TKwnullable do return _n_kwnullable
1141 fun n_kwnullable
=(n_kwnullable
: TKwnullable) do _n_kwnullable
= n_kwnullable
1144 class AAsNotNullableExternCall
1145 super ACastExternCall
1147 fun n_type
: AType do return _n_type
1148 fun n_type
=(n_type
: AType) do _n_type
= n_type
1150 fun n_kwas
: TKwas do return _n_kwas
1151 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
1152 var _n_kwnot
: TKwnot
1153 fun n_kwnot
: TKwnot do return _n_kwnot
1154 fun n_kwnot
=(n_kwnot
: TKwnot) do _n_kwnot
= n_kwnot
1155 var _n_kwnullable
: TKwnullable
1156 fun n_kwnullable
: TKwnullable do return _n_kwnullable
1157 fun n_kwnullable
=(n_kwnullable
: TKwnullable) do _n_kwnullable
= n_kwnullable
1161 # A definition of a virtual type
1164 var _n_kwtype
: TKwtype
1165 fun n_kwtype
: TKwtype do return _n_kwtype
1166 fun n_kwtype
=(n_kwtype
: TKwtype) do _n_kwtype
= n_kwtype
1168 fun n_id
: TClassid do return _n_id
1169 fun n_id
=(n_id
: TClassid) do _n_id
= n_id
1171 fun n_type
: AType do return _n_type
1172 fun n_type
=(n_type
: AType) do _n_type
= n_type
1176 # A `writable` or `readable` modifier
1177 abstract class AAble
1179 var _n_visibility
: nullable AVisibility = null
1180 fun n_visibility
: nullable AVisibility do return _n_visibility
1181 fun n_visibility
=(n_visibility
: nullable AVisibility) do _n_visibility
= n_visibility
1182 var _n_kwredef
: nullable TKwredef = null
1183 fun n_kwredef
: nullable TKwredef do return _n_kwredef
1184 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
1188 # A `readable` modifier
1191 var _n_kwreadable
: TKwreadable
1192 fun n_kwreadable
: TKwreadable do return _n_kwreadable
1193 fun n_kwreadable
=(n_kwreadable
: TKwreadable) do _n_kwreadable
= n_kwreadable
1197 # A `writable` modifier
1200 var _n_kwwritable
: TKwwritable
1201 fun n_kwwritable
: TKwwritable do return _n_kwwritable
1202 fun n_kwwritable
=(n_kwwritable
: TKwwritable) do _n_kwwritable
= n_kwwritable
1206 # The identifier of a method in a method declaration.
1207 # There is a specific class because of operator and setters.
1208 abstract class AMethid
1214 fun n_id
: TId do return _n_id
1215 fun n_id
=(n_id
: TId) do _n_id
= n_id
1221 fun n_plus
: TPlus do return _n_plus
1222 fun n_plus
=(n_plus
: TPlus) do _n_plus
= n_plus
1227 var _n_minus
: TMinus
1228 fun n_minus
: TMinus do return _n_minus
1229 fun n_minus
=(n_minus
: TMinus) do _n_minus
= n_minus
1235 fun n_star
: TStar do return _n_star
1236 fun n_star
=(n_star
: TStar) do _n_star
= n_star
1241 var _n_slash
: TSlash
1242 fun n_slash
: TSlash do return _n_slash
1243 fun n_slash
=(n_slash
: TSlash) do _n_slash
= n_slash
1246 class APercentMethid
1248 var _n_percent
: TPercent
1249 fun n_percent
: TPercent do return _n_percent
1250 fun n_percent
=(n_percent
: TPercent) do _n_percent
= n_percent
1256 fun n_eq
: TEq do return _n_eq
1257 fun n_eq
=(n_eq
: TEq) do _n_eq
= n_eq
1263 fun n_ne
: TNe do return _n_ne
1264 fun n_ne
=(n_ne
: TNe) do _n_ne
= n_ne
1270 fun n_le
: TLe do return _n_le
1271 fun n_le
=(n_le
: TLe) do _n_le
= n_le
1277 fun n_ge
: TGe do return _n_ge
1278 fun n_ge
=(n_ge
: TGe) do _n_ge
= n_ge
1284 fun n_lt
: TLt do return _n_lt
1285 fun n_lt
=(n_lt
: TLt) do _n_lt
= n_lt
1291 fun n_gt
: TGt do return _n_gt
1292 fun n_gt
=(n_gt
: TGt) do _n_gt
= n_gt
1298 fun n_ll
: TLl do return _n_ll
1299 fun n_ll
=(n_ll
: TLl) do _n_ll
= n_ll
1305 fun n_gg
: TGg do return _n_gg
1306 fun n_gg
=(n_gg
: TGg) do _n_gg
= n_gg
1312 fun n_obra
: TObra do return _n_obra
1313 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
1315 fun n_cbra
: TCbra do return _n_cbra
1316 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
1319 class AStarshipMethid
1321 var _n_starship
: TStarship
1322 fun n_starship
: TStarship do return _n_starship
1323 fun n_starship
=(n_starship
: TStarship) do _n_starship
= n_starship
1329 fun n_id
: TId do return _n_id
1330 fun n_id
=(n_id
: TId) do _n_id
= n_id
1331 var _n_assign
: TAssign
1332 fun n_assign
: TAssign do return _n_assign
1333 fun n_assign
=(n_assign
: TAssign) do _n_assign
= n_assign
1336 class ABraassignMethid
1339 fun n_obra
: TObra do return _n_obra
1340 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
1342 fun n_cbra
: TCbra do return _n_cbra
1343 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
1344 var _n_assign
: TAssign
1345 fun n_assign
: TAssign do return _n_assign
1346 fun n_assign
=(n_assign
: TAssign) do _n_assign
= n_assign
1350 # A signature in a method definition. eg `(x,y:X,z:Z):T`
1353 var _n_opar
: nullable TOpar = null
1354 fun n_opar
: nullable TOpar do return _n_opar
1355 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
1356 var n_params
: ANodes[AParam] = new ANodes[AParam](self)
1357 var _n_cpar
: nullable TCpar = null
1358 fun n_cpar
: nullable TCpar do return _n_cpar
1359 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
1360 var _n_type
: nullable AType = null
1361 fun n_type
: nullable AType do return _n_type
1362 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
1366 # A parameter definition in a signature. eg `x:X`
1370 fun n_id
: TId do return _n_id
1371 fun n_id
=(n_id
: TId) do _n_id
= n_id
1372 var _n_type
: nullable AType = null
1373 fun n_type
: nullable AType do return _n_type
1374 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
1375 var _n_dotdotdot
: nullable TDotdotdot = null
1376 fun n_dotdotdot
: nullable TDotdotdot do return _n_dotdotdot
1377 fun n_dotdotdot
=(n_dotdotdot
: nullable TDotdotdot) do _n_dotdotdot
= n_dotdotdot
1381 # A static type. eg `nullable X[Y]`
1384 var _n_kwnullable
: nullable TKwnullable = null
1385 fun n_kwnullable
: nullable TKwnullable do return _n_kwnullable
1386 fun n_kwnullable
=(n_kwnullable
: nullable TKwnullable) do _n_kwnullable
= n_kwnullable
1388 # The name of the class or of the formal type
1390 fun n_id
: TClassid do return _n_id
1391 fun n_id
=(n_id
: TClassid) do _n_id
= n_id
1393 # Type arguments for a generic type
1394 var n_types
: ANodes[AType] = new ANodes[AType](self)
1398 # A label at the end of a block or in a break/continue statement. eg `label x`
1401 var _n_kwlabel
: TKwlabel
1402 fun n_kwlabel
: TKwlabel do return _n_kwlabel
1403 fun n_kwlabel
=(n_kwlabel
: TKwlabel) do _n_kwlabel
= n_kwlabel
1404 var _n_id
: nullable TId
1405 fun n_id
: nullable TId do return _n_id
1406 fun n_id
=(n_id
: nullable TId) do _n_id
= n_id
1410 # Expression and statements
1411 # From a AST point of view there is no distinction between statement and expressions (even if the parser has to distinguish them)
1412 abstract class AExpr
1416 # A sequence of AExpr (usually statements)
1417 # The last AExpr gives the value of the whole block
1420 var n_expr
: ANodes[AExpr] = new ANodes[AExpr](self)
1421 var _n_kwend
: nullable TKwend = null
1422 fun n_kwend
: nullable TKwend do return _n_kwend
1423 fun n_kwend
=(n_kwend
: nullable TKwend) do _n_kwend
= n_kwend
1427 # A declaration of a local variable. eg `var x: X = y`
1430 var _n_kwvar
: TKwvar
1431 fun n_kwvar
: TKwvar do return _n_kwvar
1432 fun n_kwvar
=(n_kwvar
: TKwvar) do _n_kwvar
= n_kwvar
1434 fun n_id
: TId do return _n_id
1435 fun n_id
=(n_id
: TId) do _n_id
= n_id
1436 var _n_type
: nullable AType = null
1437 fun n_type
: nullable AType do return _n_type
1438 fun n_type
=(n_type
: nullable AType) do _n_type
= n_type
1439 var _n_assign
: nullable TAssign = null
1440 fun n_assign
: nullable TAssign do return _n_assign
1441 fun n_assign
=(n_assign
: nullable TAssign) do _n_assign
= n_assign
1443 # The initial value, if any
1444 var _n_expr
: nullable AExpr = null
1445 fun n_expr
: nullable AExpr do return _n_expr
1446 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1450 # A `return` statement. eg `return x`
1453 var _n_kwreturn
: nullable TKwreturn = null
1454 fun n_kwreturn
: nullable TKwreturn do return _n_kwreturn
1455 fun n_kwreturn
=(n_kwreturn
: nullable TKwreturn) do _n_kwreturn
= n_kwreturn
1456 var _n_expr
: nullable AExpr = null
1457 fun n_expr
: nullable AExpr do return _n_expr
1458 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1462 # Something that has a label.
1463 abstract class ALabelable
1465 var _n_label
: nullable ALabel = null
1466 fun n_label
: nullable ALabel do return _n_label
1467 fun n_label
=(n_label
: nullable ALabel) do _n_label
= n_label
1471 # A `break` statement.
1475 var _n_kwbreak
: TKwbreak
1476 fun n_kwbreak
: TKwbreak do return _n_kwbreak
1477 fun n_kwbreak
=(n_kwbreak
: TKwbreak) do _n_kwbreak
= n_kwbreak
1478 var _n_expr
: nullable AExpr = null
1479 fun n_expr
: nullable AExpr do return _n_expr
1480 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1484 # An `abort` statement
1487 var _n_kwabort
: TKwabort
1488 fun n_kwabort
: TKwabort do return _n_kwabort
1489 fun n_kwabort
=(n_kwabort
: TKwabort) do _n_kwabort
= n_kwabort
1493 # A `continue` statement
1497 var _n_kwcontinue
: nullable TKwcontinue = null
1498 fun n_kwcontinue
: nullable TKwcontinue do return _n_kwcontinue
1499 fun n_kwcontinue
=(n_kwcontinue
: nullable TKwcontinue) do _n_kwcontinue
= n_kwcontinue
1500 var _n_expr
: nullable AExpr = null
1501 fun n_expr
: nullable AExpr do return _n_expr
1502 fun n_expr
=(n_expr
: nullable AExpr) do _n_expr
= n_expr
1511 fun n_kwdo
: TKwdo do return _n_kwdo
1512 fun n_kwdo
=(n_kwdo
: TKwdo) do _n_kwdo
= n_kwdo
1513 var _n_block
: nullable AExpr = null
1514 fun n_block
: nullable AExpr do return _n_block
1515 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1523 fun n_kwif
: TKwif do return _n_kwif
1524 fun n_kwif
=(n_kwif
: TKwif) do _n_kwif
= n_kwif
1526 fun n_expr
: AExpr do return _n_expr
1527 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1528 var _n_then
: nullable AExpr = null
1529 fun n_then
: nullable AExpr do return _n_then
1530 fun n_then
=(n_then
: nullable AExpr) do _n_then
= n_then
1531 var _n_else
: nullable AExpr = null
1532 fun n_else
: nullable AExpr do return _n_else
1533 fun n_else
=(n_else
: nullable AExpr) do _n_else
= n_else
1541 fun n_kwif
: TKwif do return _n_kwif
1542 fun n_kwif
=(n_kwif
: TKwif) do _n_kwif
= n_kwif
1544 fun n_expr
: AExpr do return _n_expr
1545 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1546 var _n_kwthen
: TKwthen
1547 fun n_kwthen
: TKwthen do return _n_kwthen
1548 fun n_kwthen
=(n_kwthen
: TKwthen) do _n_kwthen
= n_kwthen
1550 fun n_then
: AExpr do return _n_then
1551 fun n_then
=(n_then
: AExpr) do _n_then
= n_then
1552 var _n_kwelse
: TKwelse
1553 fun n_kwelse
: TKwelse do return _n_kwelse
1554 fun n_kwelse
=(n_kwelse
: TKwelse) do _n_kwelse
= n_kwelse
1556 fun n_else
: AExpr do return _n_else
1557 fun n_else
=(n_else
: AExpr) do _n_else
= n_else
1561 # A `while` statement
1565 var _n_kwwhile
: TKwwhile
1566 fun n_kwwhile
: TKwwhile do return _n_kwwhile
1567 fun n_kwwhile
=(n_kwwhile
: TKwwhile) do _n_kwwhile
= n_kwwhile
1569 fun n_expr
: AExpr do return _n_expr
1570 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1572 fun n_kwdo
: TKwdo do return _n_kwdo
1573 fun n_kwdo
=(n_kwdo
: TKwdo) do _n_kwdo
= n_kwdo
1574 var _n_block
: nullable AExpr = null
1575 fun n_block
: nullable AExpr do return _n_block
1576 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1580 # A `loop` statement
1584 var _n_kwloop
: TKwloop
1585 fun n_kwloop
: TKwloop do return _n_kwloop
1586 fun n_kwloop
=(n_kwloop
: TKwloop) do _n_kwloop
= n_kwloop
1587 var _n_block
: nullable AExpr = null
1588 fun n_block
: nullable AExpr do return _n_block
1589 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1597 var _n_kwfor
: TKwfor
1598 fun n_kwfor
: TKwfor do return _n_kwfor
1599 fun n_kwfor
=(n_kwfor
: TKwfor) do _n_kwfor
= n_kwfor
1600 var n_ids
: ANodes[TId] = new ANodes[TId](self)
1602 fun n_expr
: AExpr do return _n_expr
1603 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1605 fun n_kwdo
: TKwdo do return _n_kwdo
1606 fun n_kwdo
=(n_kwdo
: TKwdo) do _n_kwdo
= n_kwdo
1607 var _n_block
: nullable AExpr = null
1608 fun n_block
: nullable AExpr do return _n_block
1609 fun n_block
=(n_block
: nullable AExpr) do _n_block
= n_block
1613 # An `assert` statement
1616 var _n_kwassert
: TKwassert
1617 fun n_kwassert
: TKwassert do return _n_kwassert
1618 fun n_kwassert
=(n_kwassert
: TKwassert) do _n_kwassert
= n_kwassert
1619 var _n_id
: nullable TId = null
1620 fun n_id
: nullable TId do return _n_id
1621 fun n_id
=(n_id
: nullable TId) do _n_id
= n_id
1623 fun n_expr
: AExpr do return _n_expr
1624 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1625 var _n_else
: nullable AExpr = null
1626 fun n_else
: nullable AExpr do return _n_else
1627 fun n_else
=(n_else
: nullable AExpr) do _n_else
= n_else
1631 # Whatever is a simple assignment. eg `= something`
1632 abstract class AAssignFormExpr
1634 var _n_assign
: TAssign
1635 fun n_assign
: TAssign do return _n_assign
1636 fun n_assign
=(n_assign
: TAssign) do _n_assign
= n_assign
1638 fun n_value
: AExpr do return _n_value
1639 fun n_value
=(n_value
: AExpr) do _n_value
= n_value
1643 # Whatever is a combined assignment. eg `+= something`
1644 abstract class AReassignFormExpr
1646 var _n_assign_op
: AAssignOp
1647 fun n_assign_op
: AAssignOp do return _n_assign_op
1648 fun n_assign_op
=(n_assign_op
: AAssignOp) do _n_assign_op
= n_assign_op
1650 fun n_value
: AExpr do return _n_value
1651 fun n_value
=(n_value
: AExpr) do _n_value
= n_value
1655 # A `once` expression. eg `once x`
1658 var _n_kwonce
: TKwonce
1659 fun n_kwonce
: TKwonce do return _n_kwonce
1660 fun n_kwonce
=(n_kwonce
: TKwonce) do _n_kwonce
= n_kwonce
1664 # A polymorphic invocation of a method
1665 # The form of the invocation (name, arguments, etc) are specific
1666 abstract class ASendExpr
1668 # The receiver of the method invocation
1670 fun n_expr
: AExpr do return _n_expr
1671 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1675 # A binary operation on a method
1676 abstract class ABinopExpr
1678 # The second operand of the operation
1679 # Note: the receiver (`n_expr`) is the first operand
1681 fun n_expr2
: AExpr do return _n_expr2
1682 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1686 # Something that is boolean expression
1687 abstract class ABoolExpr
1695 fun n_expr
: AExpr do return _n_expr
1696 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1698 fun n_expr2
: AExpr do return _n_expr2
1699 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1703 # A `and` expression
1707 fun n_expr
: AExpr do return _n_expr
1708 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1710 fun n_expr2
: AExpr do return _n_expr2
1711 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1715 # A `or else` expression
1719 fun n_expr
: AExpr do return _n_expr
1720 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1722 fun n_expr2
: AExpr do return _n_expr2
1723 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1727 # A `implies` expression
1731 fun n_expr
: AExpr do return _n_expr
1732 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1734 fun n_expr2
: AExpr do return _n_expr2
1735 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
1739 # A `not` expression
1742 var _n_kwnot
: TKwnot
1743 fun n_kwnot
: TKwnot do return _n_kwnot
1744 fun n_kwnot
=(n_kwnot
: TKwnot) do _n_kwnot
= n_kwnot
1746 fun n_expr
: AExpr do return _n_expr
1747 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1791 # A type-ckeck expression. eg `x isa T`
1795 fun n_expr
: AExpr do return _n_expr
1796 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1798 fun n_type
: AType do return _n_type
1799 fun n_type
=(n_type
: AType) do _n_type
= n_type
1813 # A `<=>` expression
1833 # A unary minus expression. eg `-x`
1836 var _n_minus
: TMinus
1837 fun n_minus
: TMinus do return _n_minus
1838 fun n_minus
=(n_minus
: TMinus) do _n_minus
= n_minus
1842 # An explicit instantiation. eg `new T`
1845 var _n_kwnew
: TKwnew
1846 fun n_kwnew
: TKwnew do return _n_kwnew
1847 fun n_kwnew
=(n_kwnew
: TKwnew) do _n_kwnew
= n_kwnew
1849 fun n_type
: AType do return _n_type
1850 fun n_type
=(n_type
: AType) do _n_type
= n_type
1852 # The name of the named-constructor, if any
1853 var _n_id
: nullable TId = null
1854 fun n_id
: nullable TId do return _n_id
1855 fun n_id
=(n_id
: nullable TId) do _n_id
= n_id
1857 fun n_args
: AExprs do return _n_args
1858 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1862 # Whatever is a old-style attribute access
1863 abstract class AAttrFormExpr
1866 # The receiver of the attribute
1868 fun n_expr
: AExpr do return _n_expr
1869 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
1871 # The name of the attribute
1873 fun n_id
: TAttrid do return _n_id
1874 fun n_id
=(n_id
: TAttrid) do _n_id
= n_id
1879 # The read of an attribute. eg `x._a`
1884 # The assignment of an attribute. eg `x._a=y`
1885 class AAttrAssignExpr
1887 super AAssignFormExpr
1890 # Whatever looks-like a call with a standard method and any number of arguments.
1891 abstract class ACallFormExpr
1894 # The name of the method
1896 fun n_id
: TId do return _n_id
1897 fun n_id
=(n_id
: TId) do _n_id
= n_id
1899 # The arguments of the call
1901 fun n_args
: AExprs do return _n_args
1902 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1906 # A complex setter call (standard or brackets)
1907 abstract class ASendReassignFormExpr
1909 super AReassignFormExpr
1912 # A complex attribute assignment. eg `x._a+=y`
1913 class AAttrReassignExpr
1915 super AReassignFormExpr
1918 # A call with a standard method-name and any number of arguments. eg `x.m(y)`. OR just a simple id
1919 # 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`.
1920 # Semantic analysis have to transform them to instance of `AVarExpr`.
1925 # A setter call with a standard method-name and any number of arguments. eg `x.m(y)=z`. OR just a simple assignment.
1926 # 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`.
1927 # Semantic analysis have to transform them to instance of `AVarAssignExpr`.
1928 class ACallAssignExpr
1930 super AAssignFormExpr
1933 # 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.
1934 # 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`.
1935 # Semantic analysis have to transform them to instance of `AVarReassignExpr`.
1936 class ACallReassignExpr
1938 super ASendReassignFormExpr
1941 # A call to `super`. OR a call of a super-constructor
1944 var _n_qualified
: nullable AQualified = null
1945 fun n_qualified
: nullable AQualified do return _n_qualified
1946 fun n_qualified
=(n_qualified
: nullable AQualified) do _n_qualified
= n_qualified
1947 var _n_kwsuper
: TKwsuper
1948 fun n_kwsuper
: TKwsuper do return _n_kwsuper
1949 fun n_kwsuper
=(n_kwsuper
: TKwsuper) do _n_kwsuper
= n_kwsuper
1951 fun n_args
: AExprs do return _n_args
1952 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1956 # A call to the `init` constructor.
1957 # Note: because `init` is a keyword and not a `TId`, the explicit call to init cannot be a ACallFormExpr.
1960 var _n_kwinit
: TKwinit
1961 fun n_kwinit
: TKwinit do return _n_kwinit
1962 fun n_kwinit
=(n_kwinit
: TKwinit) do _n_kwinit
= n_kwinit
1964 fun n_args
: AExprs do return _n_args
1965 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1969 # Whatever looks-like a call of the brackets `[]` operator.
1970 abstract class ABraFormExpr
1973 fun n_args
: AExprs do return _n_args
1974 fun n_args
=(n_args
: AExprs) do _n_args
= n_args
1978 # A call of the brackets operator. eg `x[y,z]`
1983 # A setter call of the bracket operator. eg `x[y,z]=t`
1984 class ABraAssignExpr
1986 super AAssignFormExpr
1989 # Whatever is an access to a local variable
1990 abstract class AVarFormExpr
1993 fun n_id
: TId do return _n_id
1994 fun n_id
=(n_id
: TId) do _n_id
= n_id
1998 # A complex setter call of the bracket operator. eg `x[y,z]+=t`
1999 class ABraReassignExpr
2001 super ASendReassignFormExpr
2004 # A local variable read access.
2005 # The parser cannot instantiate them, see `ACallExpr`.
2010 # A local variable simple assigment access
2011 # The parser cannot instantiate them, see `ACallAssignExpr`.
2012 class AVarAssignExpr
2014 super AAssignFormExpr
2017 # A local variable complex assignment access
2018 # The parser cannot instantiate them, see `ACallReassignExpr`.
2019 class AVarReassignExpr
2021 super AReassignFormExpr
2024 # A literal range, open or closed
2025 abstract class ARangeExpr
2028 fun n_expr
: AExpr do return _n_expr
2029 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2031 fun n_expr2
: AExpr do return _n_expr2
2032 fun n_expr2
=(n_expr2
: AExpr) do _n_expr2
= n_expr2
2036 # A closed literal range. eg `[x..y]`
2040 fun n_obra
: TObra do return _n_obra
2041 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
2043 fun n_cbra
: TCbra do return _n_cbra
2044 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
2048 # An open literal range. eg `[x..y[`
2052 fun n_obra
: TObra do return _n_obra
2053 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
2055 fun n_cbra
: TObra do return _n_cbra
2056 fun n_cbra
=(n_cbra
: TObra) do _n_cbra
= n_cbra
2060 # A literal array. eg. `[x,y,z]`
2063 var _n_exprs
: AExprs
2064 fun n_exprs
: AExprs do return _n_exprs
2065 fun n_exprs
=(n_exprs
: AExprs) do _n_exprs
= n_exprs
2072 var _n_kwself
: nullable TKwself
2073 fun n_kwself
: nullable TKwself do return _n_kwself
2074 fun n_kwself
=(n_kwself
: nullable TKwself) do _n_kwself
= n_kwself
2078 # When there is no explicit receiver, `self` is implicit
2079 class AImplicitSelfExpr
2083 # A `true` boolean literal constant
2086 var _n_kwtrue
: TKwtrue
2087 fun n_kwtrue
: TKwtrue do return _n_kwtrue
2088 fun n_kwtrue
=(n_kwtrue
: TKwtrue) do _n_kwtrue
= n_kwtrue
2091 # A `false` boolean literal constant
2094 var _n_kwfalse
: TKwfalse
2095 fun n_kwfalse
: TKwfalse do return _n_kwfalse
2096 fun n_kwfalse
=(n_kwfalse
: TKwfalse) do _n_kwfalse
= n_kwfalse
2099 # A `null` literal constant
2102 var _n_kwnull
: TKwnull
2103 fun n_kwnull
: TKwnull do return _n_kwnull
2104 fun n_kwnull
=(n_kwnull
: TKwnull) do _n_kwnull
= n_kwnull
2107 # An integer literal
2111 # An integer literal in decimal format
2114 var _n_number
: TNumber
2115 fun n_number
: TNumber do return _n_number
2116 fun n_number
=(n_number
: TNumber) do _n_number
= n_number
2119 # An integer literal in hexadecimal format
2122 var _n_hex_number
: THexNumber
2123 fun n_hex_number
: THexNumber do return _n_hex_number
2124 fun n_hex_number
=(n_hex_number
: THexNumber) do _n_hex_number
= n_hex_number
2130 var _n_float
: TFloat
2131 fun n_float
: TFloat do return _n_float
2132 fun n_float
=(n_float
: TFloat) do _n_float
= n_float
2135 # A character literal
2139 fun n_char
: TChar do return _n_char
2140 fun n_char
=(n_char
: TChar) do _n_char
= n_char
2144 abstract class AStringFormExpr
2146 var _n_string
: Token
2147 fun n_string
: Token do return _n_string
2148 fun n_string
=(n_string
: Token) do _n_string
= n_string
2152 # A simple string. eg. `"abc"`
2154 super AStringFormExpr
2157 # The start of a superstring. eg `"abc{`
2158 class AStartStringExpr
2159 super AStringFormExpr
2162 # The middle of a superstring. eg `}abc{`
2163 class AMidStringExpr
2164 super AStringFormExpr
2167 # The end of a superstrng. eg `}abc"`
2168 class AEndStringExpr
2169 super AStringFormExpr
2172 # A superstring literal. eg `"a{x}b{y}c"`
2173 # Each part is modelized a sequence of expression. eg. `["a{, x, }b{, y, }c"]`
2174 class ASuperstringExpr
2176 var n_exprs
: ANodes[AExpr] = new ANodes[AExpr](self)
2180 # A simple parenthesis. eg `(x)`
2184 fun n_opar
: TOpar do return _n_opar
2185 fun n_opar
=(n_opar
: TOpar) do _n_opar
= n_opar
2187 fun n_cpar
: TCpar do return _n_cpar
2188 fun n_cpar
=(n_cpar
: TCpar) do _n_cpar
= n_cpar
2192 # Whatevej just contains (and mimic) an other expression
2193 abstract class AProxyExpr
2196 fun n_expr
: AExpr do return _n_expr
2197 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2201 # A type cast. eg `x.as(T)`
2205 fun n_expr
: AExpr do return _n_expr
2206 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2208 fun n_kwas
: TKwas do return _n_kwas
2209 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
2210 var _n_opar
: nullable TOpar = null
2211 fun n_opar
: nullable TOpar do return _n_opar
2212 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2214 fun n_type
: AType do return _n_type
2215 fun n_type
=(n_type
: AType) do _n_type
= n_type
2216 var _n_cpar
: nullable TCpar = null
2217 fun n_cpar
: nullable TCpar do return _n_cpar
2218 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2222 # A as-not-null cast. eg `x.as(not null)`
2223 class AAsNotnullExpr
2226 fun n_expr
: AExpr do return _n_expr
2227 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2229 fun n_kwas
: TKwas do return _n_kwas
2230 fun n_kwas
=(n_kwas
: TKwas) do _n_kwas
= n_kwas
2231 var _n_opar
: nullable TOpar = null
2232 fun n_opar
: nullable TOpar do return _n_opar
2233 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2234 var _n_kwnot
: TKwnot
2235 fun n_kwnot
: TKwnot do return _n_kwnot
2236 fun n_kwnot
=(n_kwnot
: TKwnot) do _n_kwnot
= n_kwnot
2237 var _n_kwnull
: TKwnull
2238 fun n_kwnull
: TKwnull do return _n_kwnull
2239 fun n_kwnull
=(n_kwnull
: TKwnull) do _n_kwnull
= n_kwnull
2240 var _n_cpar
: nullable TCpar = null
2241 fun n_cpar
: nullable TCpar do return _n_cpar
2242 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2246 # A is-set check of old-style attributes. eg `isset x._a`
2247 class AIssetAttrExpr
2249 var _n_kwisset
: TKwisset
2250 fun n_kwisset
: TKwisset do return _n_kwisset
2251 fun n_kwisset
=(n_kwisset
: TKwisset) do _n_kwisset
= n_kwisset
2255 # A elyspis notation used to pass an expression as it in a vararg parameter
2259 fun n_expr
: AExpr do return _n_expr
2260 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2261 var _n_dotdotdot
: TDotdotdot
2262 fun n_dotdotdot
: TDotdotdot do return _n_dotdotdot
2263 fun n_dotdotdot
=(n_dotdotdot
: TDotdotdot) do _n_dotdotdot
= n_dotdotdot
2267 # A list of expression separated with commas (arguments for instance)
2268 abstract class AExprs
2270 var n_exprs
: ANodes[AExpr] = new ANodes[AExpr](self)
2275 class ADebugTypeExpr
2277 var _n_kwdebug
: TKwdebug
2278 fun n_kwdebug
: TKwdebug do return _n_kwdebug
2279 fun n_kwdebug
=(n_kwdebug
: TKwdebug) do _n_kwdebug
= n_kwdebug
2280 var _n_kwtype
: TKwtype
2281 fun n_kwtype
: TKwtype do return _n_kwtype
2282 fun n_kwtype
=(n_kwtype
: TKwtype) do _n_kwtype
= n_kwtype
2284 fun n_expr
: AExpr do return _n_expr
2285 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2287 fun n_type
: AType do return _n_type
2288 fun n_type
=(n_type
: AType) do _n_type
= n_type
2292 # A simple list of expressions
2297 # A list of expressions enclosed in parentheses
2301 fun n_opar
: TOpar do return _n_opar
2302 fun n_opar
=(n_opar
: TOpar) do _n_opar
= n_opar
2304 fun n_cpar
: TCpar do return _n_cpar
2305 fun n_cpar
=(n_cpar
: TCpar) do _n_cpar
= n_cpar
2309 # A list of expressions enclosed in brackets
2313 fun n_obra
: TObra do return _n_obra
2314 fun n_obra
=(n_obra
: TObra) do _n_obra
= n_obra
2316 fun n_cbra
: TCbra do return _n_cbra
2317 fun n_cbra
=(n_cbra
: TCbra) do _n_cbra
= n_cbra
2321 # A complex assignment operator. eg `+=`
2322 abstract class AAssignOp
2327 var _n_pluseq
: TPluseq
2328 fun n_pluseq
: TPluseq do return _n_pluseq
2329 fun n_pluseq
=(n_pluseq
: TPluseq) do _n_pluseq
= n_pluseq
2332 class AMinusAssignOp
2334 var _n_minuseq
: TMinuseq
2335 fun n_minuseq
: TMinuseq do return _n_minuseq
2336 fun n_minuseq
=(n_minuseq
: TMinuseq) do _n_minuseq
= n_minuseq
2342 var _n_quad
: nullable TQuad = null
2343 fun n_quad
: nullable TQuad do return _n_quad
2344 fun n_quad
=(n_quad
: nullable TQuad) do _n_quad
= n_quad
2345 var n_path
: ANodes[TId] = new ANodes[TId](self)
2347 fun n_id
: TId do return _n_id
2348 fun n_id
=(n_id
: TId) do _n_id
= n_id
2354 fun n_kwin
: TKwin do return _n_kwin
2355 fun n_kwin
=(n_kwin
: TKwin) do _n_kwin
= n_kwin
2356 var _n_string
: TString
2357 fun n_string
: TString do return _n_string
2358 fun n_string
=(n_string
: TString) do _n_string
= n_string
2361 class AExternCodeBlock
2363 var _n_in_language
: nullable AInLanguage = null
2364 fun n_in_language
: nullable AInLanguage do return _n_in_language
2365 fun n_in_language
=(n_in_language
: nullable AInLanguage) do _n_in_language
= n_in_language
2366 var _n_extern_code_segment
: TExternCodeSegment
2367 fun n_extern_code_segment
: TExternCodeSegment do return _n_extern_code_segment
2368 fun n_extern_code_segment
=(n_extern_code_segment
: TExternCodeSegment) do _n_extern_code_segment
= n_extern_code_segment
2373 var _n_quad
: nullable TQuad = null
2374 fun n_quad
: nullable TQuad do return _n_quad
2375 fun n_quad
=(n_quad
: nullable TQuad) do _n_quad
= n_quad
2376 var n_id
: ANodes[TId] = new ANodes[TId](self)
2377 var _n_classid
: nullable TClassid = null
2378 fun n_classid
: nullable TClassid do return _n_classid
2379 fun n_classid
=(n_classid
: nullable TClassid) do _n_classid
= n_classid
2383 # A documentation of a definition
2384 # It contains the block of comments just above the declaration
2387 var n_comment
: ANodes[TComment] = new ANodes[TComment](self)
2393 var _n_at
: nullable TAt = null
2394 fun n_at
: nullable TAt do return _n_at
2395 fun n_at
=(n_at
: nullable TAt) do _n_at
= n_at
2396 var _n_opar
: nullable TOpar = null
2397 fun n_opar
: nullable TOpar do return _n_opar
2398 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2399 var n_items
: ANodes[AAnnotation] = new ANodes[AAnnotation](self)
2400 var _n_cpar
: nullable TCpar = null
2401 fun n_cpar
: nullable TCpar do return _n_cpar
2402 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2407 var _n_doc
: nullable ADoc = null
2408 fun n_doc
: nullable ADoc do return _n_doc
2409 fun n_doc
=(n_doc
: nullable ADoc) do _n_doc
= n_doc
2410 var _n_kwredef
: nullable TKwredef = null
2411 fun n_kwredef
: nullable TKwredef do return _n_kwredef
2412 fun n_kwredef
=(n_kwredef
: nullable TKwredef) do _n_kwredef
= n_kwredef
2413 var _n_visibility
: nullable AVisibility
2414 fun n_visibility
: nullable AVisibility do return _n_visibility
2415 fun n_visibility
=(n_visibility
: nullable AVisibility) do _n_visibility
= n_visibility
2417 fun n_atid
: AAtid do return _n_atid
2418 fun n_atid
=(n_atid
: AAtid) do _n_atid
= n_atid
2419 var _n_opar
: nullable TOpar = null
2420 fun n_opar
: nullable TOpar do return _n_opar
2421 fun n_opar
=(n_opar
: nullable TOpar) do _n_opar
= n_opar
2422 var n_args
: ANodes[AAtArg] = new ANodes[AAtArg](self)
2423 var _n_cpar
: nullable TCpar = null
2424 fun n_cpar
: nullable TCpar do return _n_cpar
2425 fun n_cpar
=(n_cpar
: nullable TCpar) do _n_cpar
= n_cpar
2428 abstract class AAtArg
2434 fun n_type
: AType do return _n_type
2435 fun n_type
=(n_type
: AType) do _n_type
= n_type
2441 fun n_expr
: AExpr do return _n_expr
2442 fun n_expr
=(n_expr
: AExpr) do _n_expr
= n_expr
2448 abstract class AAtid
2451 fun n_id
: Token do return _n_id
2452 fun n_id
=(n_id
: Token) do _n_id
= n_id
2464 class AKwreadableAtid
2467 class AKwwritableAtid
2474 # The root of the AST
2477 var _n_base
: nullable AModule
2478 fun n_base
: nullable AModule do return _n_base
2479 fun n_base
=(n_base
: nullable AModule) do _n_base
= n_base
2481 fun n_eof
: EOF do return _n_eof
2482 fun n_eof
=(n_eof
: EOF) do _n_eof
= n_eof
2483 init(n_base
: nullable AModule, n_eof
: EOF)
2485 self._n_base
= n_base