parser: remove generated old-style accesors.
[nit.git] / src / parser / parser_nodes.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
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
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
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.
14
15 # AST nodes of the Nit language
16 # Was previously based on parser_abs.nit.
17 module parser_nodes
18
19 import location
20
21 # Root of the AST class-hierarchy
22 abstract class ANode
23 var _location: nullable Location = null
24
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)
28
29 # The location of the important part of the node (identifier or whatever)
30 fun hot_location: Location do return location
31
32 # Display a message for the colored location of the node
33 fun debug(message: String)
34 do
35 sys.stderr.write "{hot_location} {self.class_name}: {message}\n{hot_location.colored_line("0;32")}\n"
36 end
37
38 # Parent of the node in the AST
39 var parent: nullable ANode = null
40
41 # The topmost ancestor of the element
42 # This just apply `parent` until the first one
43 fun root: ANode
44 do
45 var res = self
46 loop
47 var p = res.parent
48 if p == null then return res
49 res = p
50 end
51 end
52
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
56 do
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
61 while d > 0 do
62 s = s.parent
63 d -= 1
64 end
65 while d < 0 do
66 o = o.parent
67 d += 1
68 end
69 assert o.depth == s.depth
70 # Second, go up until same in found
71 while s != o do
72 s = s.parent
73 o = o.parent
74 end
75 return s
76 end
77
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`
81 fun depth: Int
82 do
83 var n = self
84 var res = 0
85 loop
86 var p = n.parent
87 if p == null then return res
88 n = p
89 res += 1
90 end
91 end
92
93 # Protect from invalid instantiation of nodes
94 private init do end
95
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
98
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
104 fun detach
105 do
106 assert parent != null
107 parent.replace_child(self, null)
108 parent = null
109 end
110
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)
116 do
117 assert parent != null
118 parent.replace_child(self, node)
119 parent = null
120 end
121
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
125 end
126
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]
130 super Sequence[E]
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
136 redef fun push(e)
137 do
138 hook_add(e)
139 items.push(e)
140 end
141 redef fun pop
142 do
143 var res = items.pop
144 hook_remove(res)
145 return res
146 end
147 redef fun unshift(e)
148 do
149 hook_add(e)
150 items.unshift(e)
151 end
152 redef fun shift
153 do
154 var res = items.shift
155 hook_remove(res)
156 return res
157 end
158 redef fun has(e)
159 do
160 return items.has(e)
161 end
162 redef fun [](index)
163 do
164 return items[index]
165 end
166 redef fun []=(index, e)
167 do
168 hook_remove(self[index])
169 hook_add(e)
170 items[index]=e
171 end
172 redef fun remove_at(index)
173 do
174 hook_remove(items[index])
175 items.remove_at(index)
176 end
177 private fun hook_add(e: E)
178 do
179 #assert e.parent == null
180 e.parent = parent
181 end
182 private fun hook_remove(e: E)
183 do
184 assert e.parent == parent
185 e.parent = null
186 end
187
188 # Used in parent contructor to fill elements
189 private fun unsafe_add_all(nodes: Collection[Object])
190 do
191 var parent = self.parent
192 for n in nodes do
193 assert n isa E
194 add n
195 n.parent = parent
196 end
197 end
198
199 private fun replace_child(old_child: ANode, new_child: nullable ANode): Bool
200 do
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
206 self[i] = new_child
207 new_child.parent = parent
208 else
209 self.remove_at(i)
210 end
211 return true
212 end
213 end
214 return false
215 end
216
217 private fun visit_all(v: Visitor)
218 do
219 for n in self do v.enter_visit(n)
220 end
221 end
222
223 # Ancestor of all tokens
224 # A token is a node that has a `text` but no children.
225 abstract class Token
226 super ANode
227
228 # The raw content on the token
229 fun text: String is abstract
230 fun text=(text: String) is abstract
231
232 # The previous token in the Lexer.
233 # May have disapeared in the AST
234 var prev_token: nullable Token = null
235
236 # The next token in the Lexer.
237 # May have disapeared in the AST
238 var next_token: nullable Token = null
239
240 # The verbatim blank text between `prev_token` and `self`
241 fun blank_before: String
242 do
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)
247 end
248
249 redef fun to_s: String do
250 return "'{text}'"
251 end
252
253 redef fun visit_all(v: Visitor) do end
254 redef fun replace_child(old_child: ANode, new_child: nullable ANode) do end
255 end
256
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
261
262 # The first token parser by the lexer
263 # May have disapeared in the final AST
264 var last_token: nullable Token = null
265 end
266
267 # Ancestor of all productions
268 # A production is a node without text but that usually has children.
269 abstract class Prod
270 super ANode
271
272 fun location=(l: Location) do _location = l
273
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
278
279 redef fun replace_with(n: ANode)
280 do
281 super
282 assert n isa Prod
283 if n._location == null then n._location = _location
284 end
285 end
286
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.
291 # @toimplement
292 protected fun visit(e: ANode) is abstract
293
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)
298 do
299 if e == null then return
300 var old = _current_node
301 _current_node = e
302 visit(e)
303 _current_node = old
304 end
305
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
310 end
311
312 # Token of end of line (basically `\n`)
313 class TEol
314 super Token
315 redef fun to_s
316 do
317 return "end of line"
318 end
319 end
320
321 # Token of a line of comments
322 # Starts with the `#` and contains the final end-of-line (if any)
323 class TComment
324 super Token
325 end
326
327 # A token associated with a keyword
328 abstract class TokenKeyword
329 super Token
330 redef fun to_s
331 do
332 return "keyword '{text}'"
333 end
334 end
335 class TKwpackage
336 super TokenKeyword
337 end
338 class TKwmodule
339 super TokenKeyword
340 end
341 class TKwimport
342 super TokenKeyword
343 end
344 class TKwclass
345 super TokenKeyword
346 end
347 class TKwabstract
348 super TokenKeyword
349 end
350 class TKwinterface
351 super TokenKeyword
352 end
353 class TKwenum
354 super TokenKeyword
355 end
356 class TKwend
357 super TokenKeyword
358 end
359 class TKwmeth
360 super TokenKeyword
361 end
362 class TKwtype
363 super TokenKeyword
364 end
365 class TKwinit
366 super TokenKeyword
367 end
368 class TKwredef
369 super TokenKeyword
370 end
371 class TKwis
372 super TokenKeyword
373 end
374 class TKwdo
375 super TokenKeyword
376 end
377 class TKwreadable
378 super TokenKeyword
379 end
380 class TKwwritable
381 super TokenKeyword
382 end
383 class TKwvar
384 super TokenKeyword
385 end
386 class TKwintern
387 super TokenKeyword
388 end
389 class TKwextern
390 super TokenKeyword
391 end
392 class TKwpublic
393 super TokenKeyword
394 end
395 class TKwprotected
396 super TokenKeyword
397 end
398 class TKwprivate
399 super TokenKeyword
400 end
401 class TKwintrude
402 super TokenKeyword
403 end
404 class TKwif
405 super TokenKeyword
406 end
407 class TKwthen
408 super TokenKeyword
409 end
410 class TKwelse
411 super TokenKeyword
412 end
413 class TKwwhile
414 super TokenKeyword
415 end
416 class TKwloop
417 super TokenKeyword
418 end
419 class TKwfor
420 super TokenKeyword
421 end
422 class TKwin
423 super TokenKeyword
424 end
425 class TKwand
426 super TokenKeyword
427 end
428 class TKwor
429 super TokenKeyword
430 end
431 class TKwimplies
432 super TokenKeyword
433 end
434 class TKwnot
435 super TokenKeyword
436 end
437 class TKwreturn
438 super TokenKeyword
439 end
440 class TKwcontinue
441 super TokenKeyword
442 end
443 class TKwbreak
444 super TokenKeyword
445 end
446 class TKwabort
447 super TokenKeyword
448 end
449 class TKwassert
450 super TokenKeyword
451 end
452 class TKwnew
453 super TokenKeyword
454 end
455 class TKwisa
456 super TokenKeyword
457 end
458 class TKwonce
459 super TokenKeyword
460 end
461 class TKwsuper
462 super TokenKeyword
463 end
464 class TKwself
465 super TokenKeyword
466 end
467 class TKwtrue
468 super TokenKeyword
469 end
470 class TKwfalse
471 super TokenKeyword
472 end
473 class TKwnull
474 super TokenKeyword
475 end
476 class TKwas
477 super TokenKeyword
478 end
479 class TKwnullable
480 super TokenKeyword
481 end
482 class TKwisset
483 super TokenKeyword
484 end
485 class TKwlabel
486 super TokenKeyword
487 end
488 class TKwdebug
489 super Token
490 end
491 class TOpar
492 super Token
493 end
494 class TCpar
495 super Token
496 end
497 class TObra
498 super Token
499 end
500 class TCbra
501 super Token
502 end
503 class TComma
504 super Token
505 end
506 class TColumn
507 super Token
508 end
509 class TQuad
510 super Token
511 end
512 class TAssign
513 super Token
514 end
515
516 # A token associated with an operator (and other lookalike symbols)
517 abstract class TokenOperator
518 super Token
519 redef fun to_s
520 do
521 return "operator '{text}'"
522 end
523 end
524 class TPluseq
525 super TokenOperator
526 end
527 class TMinuseq
528 super TokenOperator
529 end
530 class TDotdotdot
531 super Token
532 end
533 class TDotdot
534 super Token
535 end
536 class TDot
537 super Token
538 end
539 class TPlus
540 super TokenOperator
541 end
542 class TMinus
543 super TokenOperator
544 end
545 class TStar
546 super TokenOperator
547 end
548 class TSlash
549 super TokenOperator
550 end
551 class TPercent
552 super TokenOperator
553 end
554 class TEq
555 super TokenOperator
556 end
557 class TNe
558 super TokenOperator
559 end
560 class TLt
561 super TokenOperator
562 end
563 class TLe
564 super TokenOperator
565 end
566 class TLl
567 super TokenOperator
568 end
569 class TGt
570 super TokenOperator
571 end
572 class TGe
573 super TokenOperator
574 end
575 class TGg
576 super TokenOperator
577 end
578 class TStarship
579 super TokenOperator
580 end
581 class TBang
582 super TokenOperator
583 end
584 class TAt
585 super Token
586 end
587
588 # A class (or formal type) identifier. They start with an uppercase.
589 class TClassid
590 super Token
591 redef fun to_s
592 do
593 do return "type identifier '{text}'"
594 end
595 end
596
597 # A standard identifier (variable, method...). They start with a lowercase.
598 class TId
599 super Token
600 redef fun to_s
601 do
602 do return "identifier '{text}'"
603 end
604 end
605
606 # An attribute identifier. They start with an underscore.
607 class TAttrid
608 super Token
609 redef fun to_s
610 do
611 do return "attribute '{text}'"
612 end
613 end
614
615 # A token of a literal value (string, integer, etc).
616 abstract class TokenLiteral
617 super Token
618 redef fun to_s
619 do
620 do return "literal value '{text}'"
621 end
622 end
623 class TNumber
624 super TokenLiteral
625 end
626 class THexNumber
627 super TokenLiteral
628 end
629 class TFloat
630 super TokenLiteral
631 end
632 class TChar
633 super TokenLiteral
634 end
635 class TString
636 super TokenLiteral
637 end
638 class TStartString
639 super TokenLiteral
640 end
641 class TMidString
642 super TokenLiteral
643 end
644 class TEndString
645 super TokenLiteral
646 end
647
648 # A malformed string
649 class TBadString
650 super Token
651 redef fun to_s
652 do
653 do return "malformed string {text}"
654 end
655 end
656
657 # A malformed char
658 class TBadChar
659 super Token
660 redef fun to_s
661 do
662 do return "malformed character {text}"
663 end
664 end
665
666 class TExternCodeSegment
667 super Token
668 end
669
670 # A end of file
671 class EOF
672 super Token
673 redef fun to_s
674 do
675 return "end of file"
676 end
677 end
678
679 # A mark of an error
680 class AError
681 super EOF
682 end
683 class ALexerError
684 super AError
685 end
686 class AParserError
687 super AError
688 end
689
690 # The main node of a Nit source-file
691 class AModule
692 super Prod
693
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)
700 init do end
701 end
702
703 # The declaration of the module with the documentation, name, and annotations
704 class AModuledecl
705 super Prod
706 var _n_doc: nullable ADoc = null
707 fun n_doc: nullable ADoc do return _n_doc
708 fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
709 var _n_kwmodule: TKwmodule
710 fun n_kwmodule: TKwmodule do return _n_kwmodule
711 fun n_kwmodule=(n_kwmodule: TKwmodule) do _n_kwmodule = n_kwmodule
712 var _n_name: AModuleName
713 fun n_name: AModuleName do return _n_name
714 fun n_name=(n_name: AModuleName) do _n_name = n_name
715 init do end
716 end
717
718 # A import clause of a module
719 abstract class AImport
720 super Prod
721 end
722
723 # A standard import clause. eg `import x`
724 class AStdImport
725 super AImport
726 var _n_visibility: AVisibility
727 fun n_visibility: AVisibility do return _n_visibility
728 fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
729 var _n_kwimport: TKwimport
730 fun n_kwimport: TKwimport do return _n_kwimport
731 fun n_kwimport=(n_kwimport: TKwimport) do _n_kwimport = n_kwimport
732 var _n_name: AModuleName
733 fun n_name: AModuleName do return _n_name
734 fun n_name=(n_name: AModuleName) do _n_name = n_name
735 init do end
736 end
737
738 # The special import clause of the kernel module. eg `import end`
739 class ANoImport
740 super AImport
741 var _n_visibility: AVisibility
742 fun n_visibility: AVisibility do return _n_visibility
743 fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
744 var _n_kwimport: TKwimport
745 fun n_kwimport: TKwimport do return _n_kwimport
746 fun n_kwimport=(n_kwimport: TKwimport) do _n_kwimport = n_kwimport
747 var _n_kwend: TKwend
748 fun n_kwend: TKwend do return _n_kwend
749 fun n_kwend=(n_kwend: TKwend) do _n_kwend = n_kwend
750 init do end
751 end
752
753 # A visibility modifier
754 #
755 # The public visibility is an empty production (no keyword).
756 #
757 # Note: even if some visibilities are only valid on some placse (for instance, no `protected` class or no `intrude` method)
758 # the parser has no such a restriction, therefore the semantic phases has to check that the visibilities make sense.
759 abstract class AVisibility
760 super Prod
761 end
762 class APublicVisibility
763 super AVisibility
764 end
765 class APrivateVisibility
766 super AVisibility
767 var _n_kwprivate: TKwprivate
768 fun n_kwprivate: TKwprivate do return _n_kwprivate
769 fun n_kwprivate=(n_kwprivate: TKwprivate) do _n_kwprivate = n_kwprivate
770 init do end
771 end
772 class AProtectedVisibility
773 super AVisibility
774 var _n_kwprotected: TKwprotected
775 fun n_kwprotected: TKwprotected do return _n_kwprotected
776 fun n_kwprotected=(n_kwprotected: TKwprotected) do _n_kwprotected = n_kwprotected
777 init do end
778 end
779 class AIntrudeVisibility
780 super AVisibility
781 var _n_kwintrude: TKwintrude
782 fun n_kwintrude: TKwintrude do return _n_kwintrude
783 fun n_kwintrude=(n_kwintrude: TKwintrude) do _n_kwintrude = n_kwintrude
784 init do end
785 end
786
787 # A class definition
788 # While most definition are `AStdClassdef`
789 # There is tow special case of class definition
790 abstract class AClassdef
791 super Prod
792 var n_propdefs: ANodes[APropdef] = new ANodes[APropdef](self)
793 init do end
794 end
795
796 # A standard class definition with a name, superclasses and properties
797 class AStdClassdef
798 super AClassdef
799 var _n_doc: nullable ADoc = null
800 fun n_doc: nullable ADoc do return _n_doc
801 fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
802 var _n_kwredef: nullable TKwredef = null
803 fun n_kwredef: nullable TKwredef do return _n_kwredef
804 fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
805 var _n_visibility: AVisibility
806 fun n_visibility: AVisibility do return _n_visibility
807 fun n_visibility=(n_visibility: AVisibility) do _n_visibility = n_visibility
808 var _n_classkind: AClasskind
809 fun n_classkind: AClasskind do return _n_classkind
810 fun n_classkind=(n_classkind: AClasskind) do _n_classkind = n_classkind
811 var _n_id: nullable TClassid = null
812 fun n_id: nullable TClassid do return _n_id
813 fun n_id=(n_id: nullable TClassid) do _n_id = n_id
814 var n_formaldefs: ANodes[AFormaldef] = new ANodes[AFormaldef](self)
815 var _n_extern_code_block: nullable AExternCodeBlock = null
816 fun n_extern_code_block: nullable AExternCodeBlock do return _n_extern_code_block
817 fun n_extern_code_block=(n_extern_code_block: nullable AExternCodeBlock) do _n_extern_code_block = n_extern_code_block
818 var n_superclasses: ANodes[ASuperclass] = new ANodes[ASuperclass](self)
819 var _n_kwend: TKwend
820 fun n_kwend: TKwend do return _n_kwend
821 fun n_kwend=(n_kwend: TKwend) do _n_kwend = n_kwend
822 redef fun hot_location do return n_id.location
823 init do end
824 end
825
826 # The implicit class definition of the implicit main method
827 class ATopClassdef
828 super AClassdef
829 end
830
831 # The implicit class definition of the top-level methods
832 class AMainClassdef
833 super AClassdef
834 end
835
836 # The modifier for the kind of class (abstract, interface, etc.)
837 abstract class AClasskind
838 super Prod
839 end
840 class AConcreteClasskind
841 super AClasskind
842 var _n_kwclass: TKwclass
843 fun n_kwclass: TKwclass do return _n_kwclass
844 fun n_kwclass=(n_kwclass: TKwclass) do _n_kwclass = n_kwclass
845 init do end
846 end
847 class AAbstractClasskind
848 super AClasskind
849 var _n_kwabstract: TKwabstract
850 fun n_kwabstract: TKwabstract do return _n_kwabstract
851 fun n_kwabstract=(n_kwabstract: TKwabstract) do _n_kwabstract = n_kwabstract
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
855 init do end
856 end
857 class AInterfaceClasskind
858 super AClasskind
859 var _n_kwinterface: TKwinterface
860 fun n_kwinterface: TKwinterface do return _n_kwinterface
861 fun n_kwinterface=(n_kwinterface: TKwinterface) do _n_kwinterface = n_kwinterface
862 init do end
863 end
864 class AEnumClasskind
865 super AClasskind
866 var _n_kwenum: TKwenum
867 fun n_kwenum: TKwenum do return _n_kwenum
868 fun n_kwenum=(n_kwenum: TKwenum) do _n_kwenum = n_kwenum
869 init do end
870 end
871 class AExternClasskind
872 super AClasskind
873 var _n_kwextern: TKwextern
874 fun n_kwextern: TKwextern do return _n_kwextern
875 fun n_kwextern=(n_kwextern: TKwextern) do _n_kwextern = n_kwextern
876 var _n_kwclass: nullable TKwclass = null
877 fun n_kwclass: nullable TKwclass do return _n_kwclass
878 fun n_kwclass=(n_kwclass: nullable TKwclass) do _n_kwclass = n_kwclass
879 init do end
880 end
881
882 # The definition of a formal generic parameter type. eg `X: Y`
883 class AFormaldef
884 super Prod
885 var _n_id: TClassid
886 fun n_id: TClassid do return _n_id
887 fun n_id=(n_id: TClassid) do _n_id = n_id
888 # The bound of the parameter type
889 var _n_type: nullable AType = null
890 fun n_type: nullable AType do return _n_type
891 fun n_type=(n_type: nullable AType) do _n_type = n_type
892 init do end
893 end
894
895 # A super-class. eg `super X`
896 class ASuperclass
897 super Prod
898 var _n_kwsuper: TKwsuper
899 fun n_kwsuper: TKwsuper do return _n_kwsuper
900 fun n_kwsuper=(n_kwsuper: TKwsuper) do _n_kwsuper = n_kwsuper
901 var _n_type: AType
902 fun n_type: AType do return _n_type
903 fun n_type=(n_type: AType) do _n_type = n_type
904 init do end
905 end
906
907 # The definition of a property
908 abstract class APropdef
909 super Prod
910 var _n_doc: nullable ADoc = null
911 fun n_doc: nullable ADoc do return _n_doc
912 fun n_doc=(n_doc: nullable ADoc) do _n_doc = n_doc
913 var _n_kwredef: nullable TKwredef = null
914 fun n_kwredef: nullable TKwredef do return _n_kwredef
915 fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
916 var _n_visibility: nullable AVisibility = null
917 fun n_visibility: nullable AVisibility do return _n_visibility
918 fun n_visibility=(n_visibility: nullable AVisibility) do _n_visibility = n_visibility
919 end
920
921 # A definition of an attribute
922 # For historical reason, old-syle and new-style attributes use the same `ANode` sub-class
923 class AAttrPropdef
924 super APropdef
925 var _n_kwvar: TKwvar
926 fun n_kwvar: TKwvar do return _n_kwvar
927 fun n_kwvar=(n_kwvar: TKwvar) do _n_kwvar = n_kwvar
928
929 # The identifier for an old-style attribute (null if new-style)
930 var _n_id: nullable TAttrid
931 fun n_id: nullable TAttrid do return _n_id
932 fun n_id=(n_id: nullable TAttrid) do _n_id = n_id
933
934 # The identifier for a new-style attribute (null if old-style)
935 var _n_id2: nullable TId
936 fun n_id2: nullable TId do return _n_id2
937 fun n_id2=(n_id2: nullable TId) do _n_id2 = n_id2
938
939 var _n_type: nullable AType = null
940 fun n_type: nullable AType do return _n_type
941 fun n_type=(n_type: nullable AType) do _n_type = n_type
942 var _n_readable: nullable AAble = null
943 fun n_readable: nullable AAble do return _n_readable
944 fun n_readable=(n_readable: nullable AAble) do _n_readable = n_readable
945 var _n_writable: nullable AAble = null
946 fun n_writable: nullable AAble do return _n_writable
947 fun n_writable=(n_writable: nullable AAble) do _n_writable = n_writable
948
949 # The initial value, if any
950 var _n_expr: nullable AExpr = null
951 fun n_expr: nullable AExpr do return _n_expr
952 fun n_expr=(n_expr: nullable AExpr) do _n_expr = n_expr
953 redef fun hot_location
954 do
955 if n_id != null then return n_id.location else return n_id2.location
956 end
957 init do end
958 end
959
960 # A definition of all kind of method (including constructors)
961 abstract class AMethPropdef
962 super APropdef
963 var _n_kwmeth: nullable TKwmeth = null
964 fun n_kwmeth: nullable TKwmeth do return _n_kwmeth
965 fun n_kwmeth=(n_kwmeth: nullable TKwmeth) do _n_kwmeth = n_kwmeth
966 var _n_kwinit: nullable TKwinit = null
967 fun n_kwinit: nullable TKwinit do return _n_kwinit
968 fun n_kwinit=(n_kwinit: nullable TKwinit) do _n_kwinit = n_kwinit
969 var _n_kwnew: nullable TKwnew = null
970 fun n_kwnew: nullable TKwnew do return _n_kwnew
971 fun n_kwnew=(n_kwnew: nullable TKwnew) do _n_kwnew = n_kwnew
972 var _n_methid: nullable AMethid = null
973 fun n_methid: nullable AMethid do return _n_methid
974 fun n_methid=(n_methid: nullable AMethid) do _n_methid = n_methid
975 var _n_signature: nullable ASignature = null
976 fun n_signature: nullable ASignature do return _n_signature
977 fun n_signature=(n_signature: nullable ASignature) do _n_signature = n_signature
978 var _n_block: nullable AExpr = null
979 fun n_block: nullable AExpr do return _n_block
980 fun n_block=(n_block: nullable AExpr) do _n_block = n_block
981 var _n_extern: nullable TString = null
982 fun n_extern: nullable TString do return _n_extern
983 fun n_extern=(n_extern: nullable TString) do _n_extern = n_extern
984 var _n_extern_calls: nullable AExternCalls = null
985 fun n_extern_calls: nullable AExternCalls do return _n_extern_calls
986 fun n_extern_calls=(n_extern_calls: nullable AExternCalls) do _n_extern_calls = n_extern_calls
987 var _n_extern_code_block: nullable AExternCodeBlock = null
988 fun n_extern_code_block: nullable AExternCodeBlock do return _n_extern_code_block
989 fun n_extern_code_block=(n_extern_code_block: nullable AExternCodeBlock) do _n_extern_code_block = n_extern_code_block
990 redef fun hot_location
991 do
992 if n_methid != null then
993 return n_methid.location
994 else if n_kwinit != null then
995 return n_kwinit.location
996 else if n_kwnew != null then
997 return n_kwnew.location
998 else
999 return location
1000 end
1001 end
1002 end
1003
1004 # A method marked abstract
1005 # *deferred* is a old synonynmous of *abstract* that comes from PRM, that comes from Eiffel.
1006 class ADeferredMethPropdef
1007 super AMethPropdef
1008 end
1009
1010 # A method marked intern
1011 class AInternMethPropdef
1012 super AMethPropdef
1013 end
1014
1015 # A method of a constructor marked extern
1016 abstract class AExternPropdef
1017 super AMethPropdef
1018 end
1019
1020 # A method marked extern
1021 class AExternMethPropdef
1022 super AExternPropdef
1023 end
1024
1025 # A method with a body
1026 class AConcreteMethPropdef
1027 super AMethPropdef
1028 end
1029
1030 # A constructor
1031 abstract class AInitPropdef
1032 super AMethPropdef
1033 end
1034
1035 # A constructor with a body
1036 class AConcreteInitPropdef
1037 super AConcreteMethPropdef
1038 super AInitPropdef
1039 end
1040
1041 class AInternNewPropdef
1042 super AInternMethPropdef
1043 super AInitPropdef
1044 end
1045
1046 # A constructor marked extern (defined with the `new` keyword)
1047 class AExternInitPropdef
1048 super AExternPropdef
1049 super AInitPropdef
1050 end
1051
1052 # The implicit main method
1053 class AMainMethPropdef
1054 super AConcreteMethPropdef
1055 end
1056
1057 # Declaration of callbacks for extern methods
1058 class AExternCalls
1059 super Prod
1060 var _n_kwimport: TKwimport
1061 fun n_kwimport: TKwimport do return _n_kwimport
1062 fun n_kwimport=(n_kwimport: TKwimport) do _n_kwimport = n_kwimport
1063 var n_extern_calls: ANodes[AExternCall] = new ANodes[AExternCall](self)
1064 init do end
1065 end
1066 abstract class AExternCall
1067 super Prod
1068 end
1069 abstract class APropExternCall
1070 super AExternCall
1071 end
1072 class ALocalPropExternCall
1073 super APropExternCall
1074 var _n_methid: AMethid
1075 fun n_methid: AMethid do return _n_methid
1076 fun n_methid=(n_methid: AMethid) do _n_methid = n_methid
1077 init do end
1078 end
1079 class AFullPropExternCall
1080 super APropExternCall
1081 var _n_type: AType
1082 fun n_type: AType do return _n_type
1083 fun n_type=(n_type: AType) do _n_type = n_type
1084 var _n_dot: nullable TDot = null
1085 fun n_dot: nullable TDot do return _n_dot
1086 fun n_dot=(n_dot: nullable TDot) do _n_dot = n_dot
1087 var _n_methid: AMethid
1088 fun n_methid: AMethid do return _n_methid
1089 fun n_methid=(n_methid: AMethid) do _n_methid = n_methid
1090 init do end
1091 end
1092 class AInitPropExternCall
1093 super APropExternCall
1094 var _n_type: AType
1095 fun n_type: AType do return _n_type
1096 fun n_type=(n_type: AType) do _n_type = n_type
1097 init do end
1098 end
1099 class ASuperExternCall
1100 super AExternCall
1101 var _n_kwsuper: TKwsuper
1102 fun n_kwsuper: TKwsuper do return _n_kwsuper
1103 fun n_kwsuper=(n_kwsuper: TKwsuper) do _n_kwsuper = n_kwsuper
1104 init do end
1105 end
1106 abstract class ACastExternCall
1107 super AExternCall
1108 end
1109 class ACastAsExternCall
1110 super ACastExternCall
1111 var _n_from_type: AType
1112 fun n_from_type: AType do return _n_from_type
1113 fun n_from_type=(n_from_type: AType) do _n_from_type = n_from_type
1114 var _n_dot: nullable TDot = null
1115 fun n_dot: nullable TDot do return _n_dot
1116 fun n_dot=(n_dot: nullable TDot) do _n_dot = n_dot
1117 var _n_kwas: TKwas
1118 fun n_kwas: TKwas do return _n_kwas
1119 fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
1120 var _n_to_type: AType
1121 fun n_to_type: AType do return _n_to_type
1122 fun n_to_type=(n_to_type: AType) do _n_to_type = n_to_type
1123 init do end
1124 end
1125 class AAsNullableExternCall
1126 super ACastExternCall
1127 var _n_type: AType
1128 fun n_type: AType do return _n_type
1129 fun n_type=(n_type: AType) do _n_type = n_type
1130 var _n_kwas: TKwas
1131 fun n_kwas: TKwas do return _n_kwas
1132 fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
1133 var _n_kwnullable: TKwnullable
1134 fun n_kwnullable: TKwnullable do return _n_kwnullable
1135 fun n_kwnullable=(n_kwnullable: TKwnullable) do _n_kwnullable = n_kwnullable
1136 init do end
1137 end
1138 class AAsNotNullableExternCall
1139 super ACastExternCall
1140 var _n_type: AType
1141 fun n_type: AType do return _n_type
1142 fun n_type=(n_type: AType) do _n_type = n_type
1143 var _n_kwas: TKwas
1144 fun n_kwas: TKwas do return _n_kwas
1145 fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
1146 var _n_kwnot: TKwnot
1147 fun n_kwnot: TKwnot do return _n_kwnot
1148 fun n_kwnot=(n_kwnot: TKwnot) do _n_kwnot = n_kwnot
1149 var _n_kwnullable: TKwnullable
1150 fun n_kwnullable: TKwnullable do return _n_kwnullable
1151 fun n_kwnullable=(n_kwnullable: TKwnullable) do _n_kwnullable = n_kwnullable
1152 init do end
1153 end
1154
1155 # A definition of a virtual type
1156 class ATypePropdef
1157 super APropdef
1158 var _n_kwtype: TKwtype
1159 fun n_kwtype: TKwtype do return _n_kwtype
1160 fun n_kwtype=(n_kwtype: TKwtype) do _n_kwtype = n_kwtype
1161 var _n_id: TClassid
1162 fun n_id: TClassid do return _n_id
1163 fun n_id=(n_id: TClassid) do _n_id = n_id
1164 var _n_type: AType
1165 fun n_type: AType do return _n_type
1166 fun n_type=(n_type: AType) do _n_type = n_type
1167 init do end
1168 end
1169
1170 # A `writable` or `readable` modifier
1171 abstract class AAble
1172 super Prod
1173 var _n_visibility: nullable AVisibility = null
1174 fun n_visibility: nullable AVisibility do return _n_visibility
1175 fun n_visibility=(n_visibility: nullable AVisibility) do _n_visibility = n_visibility
1176 var _n_kwredef: nullable TKwredef = null
1177 fun n_kwredef: nullable TKwredef do return _n_kwredef
1178 fun n_kwredef=(n_kwredef: nullable TKwredef) do _n_kwredef = n_kwredef
1179 init do end
1180 end
1181
1182 # A `readable` modifier
1183 class AReadAble
1184 super AAble
1185 var _n_kwreadable: TKwreadable
1186 fun n_kwreadable: TKwreadable do return _n_kwreadable
1187 fun n_kwreadable=(n_kwreadable: TKwreadable) do _n_kwreadable = n_kwreadable
1188 init do end
1189 end
1190
1191 # A `writable` modifier
1192 class AWriteAble
1193 super AAble
1194 var _n_kwwritable: TKwwritable
1195 fun n_kwwritable: TKwwritable do return _n_kwwritable
1196 fun n_kwwritable=(n_kwwritable: TKwwritable) do _n_kwwritable = n_kwwritable
1197 init do end
1198 end
1199
1200 # The identifier of a method in a method declaration.
1201 # There is a specific class because of operator and setters.
1202 abstract class AMethid
1203 super Prod
1204 end
1205 class AIdMethid
1206 super AMethid
1207 var _n_id: TId
1208 fun n_id: TId do return _n_id
1209 fun n_id=(n_id: TId) do _n_id = n_id
1210 init do end
1211 end
1212 class APlusMethid
1213 super AMethid
1214 var _n_plus: TPlus
1215 fun n_plus: TPlus do return _n_plus
1216 fun n_plus=(n_plus: TPlus) do _n_plus = n_plus
1217 init do end
1218 end
1219 class AMinusMethid
1220 super AMethid
1221 var _n_minus: TMinus
1222 fun n_minus: TMinus do return _n_minus
1223 fun n_minus=(n_minus: TMinus) do _n_minus = n_minus
1224 init do end
1225 end
1226 class AStarMethid
1227 super AMethid
1228 var _n_star: TStar
1229 fun n_star: TStar do return _n_star
1230 fun n_star=(n_star: TStar) do _n_star = n_star
1231 init do end
1232 end
1233 class ASlashMethid
1234 super AMethid
1235 var _n_slash: TSlash
1236 fun n_slash: TSlash do return _n_slash
1237 fun n_slash=(n_slash: TSlash) do _n_slash = n_slash
1238 init do end
1239 end
1240 class APercentMethid
1241 super AMethid
1242 var _n_percent: TPercent
1243 fun n_percent: TPercent do return _n_percent
1244 fun n_percent=(n_percent: TPercent) do _n_percent = n_percent
1245 init do end
1246 end
1247 class AEqMethid
1248 super AMethid
1249 var _n_eq: TEq
1250 fun n_eq: TEq do return _n_eq
1251 fun n_eq=(n_eq: TEq) do _n_eq = n_eq
1252 init do end
1253 end
1254 class ANeMethid
1255 super AMethid
1256 var _n_ne: TNe
1257 fun n_ne: TNe do return _n_ne
1258 fun n_ne=(n_ne: TNe) do _n_ne = n_ne
1259 init do end
1260 end
1261 class ALeMethid
1262 super AMethid
1263 var _n_le: TLe
1264 fun n_le: TLe do return _n_le
1265 fun n_le=(n_le: TLe) do _n_le = n_le
1266 init do end
1267 end
1268 class AGeMethid
1269 super AMethid
1270 var _n_ge: TGe
1271 fun n_ge: TGe do return _n_ge
1272 fun n_ge=(n_ge: TGe) do _n_ge = n_ge
1273 init do end
1274 end
1275 class ALtMethid
1276 super AMethid
1277 var _n_lt: TLt
1278 fun n_lt: TLt do return _n_lt
1279 fun n_lt=(n_lt: TLt) do _n_lt = n_lt
1280 init do end
1281 end
1282 class AGtMethid
1283 super AMethid
1284 var _n_gt: TGt
1285 fun n_gt: TGt do return _n_gt
1286 fun n_gt=(n_gt: TGt) do _n_gt = n_gt
1287 init do end
1288 end
1289 class ALlMethid
1290 super AMethid
1291 var _n_ll: TLl
1292 fun n_ll: TLl do return _n_ll
1293 fun n_ll=(n_ll: TLl) do _n_ll = n_ll
1294 init do end
1295 end
1296 class AGgMethid
1297 super AMethid
1298 var _n_gg: TGg
1299 fun n_gg: TGg do return _n_gg
1300 fun n_gg=(n_gg: TGg) do _n_gg = n_gg
1301 init do end
1302 end
1303 class ABraMethid
1304 super AMethid
1305 var _n_obra: TObra
1306 fun n_obra: TObra do return _n_obra
1307 fun n_obra=(n_obra: TObra) do _n_obra = n_obra
1308 var _n_cbra: TCbra
1309 fun n_cbra: TCbra do return _n_cbra
1310 fun n_cbra=(n_cbra: TCbra) do _n_cbra = n_cbra
1311 init do end
1312 end
1313 class AStarshipMethid
1314 super AMethid
1315 var _n_starship: TStarship
1316 fun n_starship: TStarship do return _n_starship
1317 fun n_starship=(n_starship: TStarship) do _n_starship = n_starship
1318 init do end
1319 end
1320 class AAssignMethid
1321 super AMethid
1322 var _n_id: TId
1323 fun n_id: TId do return _n_id
1324 fun n_id=(n_id: TId) do _n_id = n_id
1325 var _n_assign: TAssign
1326 fun n_assign: TAssign do return _n_assign
1327 fun n_assign=(n_assign: TAssign) do _n_assign = n_assign
1328 init do end
1329 end
1330 class ABraassignMethid
1331 super AMethid
1332 var _n_obra: TObra
1333 fun n_obra: TObra do return _n_obra
1334 fun n_obra=(n_obra: TObra) do _n_obra = n_obra
1335 var _n_cbra: TCbra
1336 fun n_cbra: TCbra do return _n_cbra
1337 fun n_cbra=(n_cbra: TCbra) do _n_cbra = n_cbra
1338 var _n_assign: TAssign
1339 fun n_assign: TAssign do return _n_assign
1340 fun n_assign=(n_assign: TAssign) do _n_assign = n_assign
1341 init do end
1342 end
1343
1344 # A signature in a method definition. eg `(x,y:X,z:Z):T`
1345 class ASignature
1346 super Prod
1347 var _n_opar: nullable TOpar = null
1348 fun n_opar: nullable TOpar do return _n_opar
1349 fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
1350 var n_params: ANodes[AParam] = new ANodes[AParam](self)
1351 var _n_cpar: nullable TCpar = null
1352 fun n_cpar: nullable TCpar do return _n_cpar
1353 fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
1354 var _n_type: nullable AType = null
1355 fun n_type: nullable AType do return _n_type
1356 fun n_type=(n_type: nullable AType) do _n_type = n_type
1357 init do end
1358 end
1359
1360 # A parameter definition in a signature. eg `x:X`
1361 class AParam
1362 super Prod
1363 var _n_id: TId
1364 fun n_id: TId do return _n_id
1365 fun n_id=(n_id: TId) do _n_id = n_id
1366 var _n_type: nullable AType = null
1367 fun n_type: nullable AType do return _n_type
1368 fun n_type=(n_type: nullable AType) do _n_type = n_type
1369 var _n_dotdotdot: nullable TDotdotdot = null
1370 fun n_dotdotdot: nullable TDotdotdot do return _n_dotdotdot
1371 fun n_dotdotdot=(n_dotdotdot: nullable TDotdotdot) do _n_dotdotdot = n_dotdotdot
1372 init do end
1373 end
1374
1375 # A static type. eg `nullable X[Y]`
1376 class AType
1377 super Prod
1378 var _n_kwnullable: nullable TKwnullable = null
1379 fun n_kwnullable: nullable TKwnullable do return _n_kwnullable
1380 fun n_kwnullable=(n_kwnullable: nullable TKwnullable) do _n_kwnullable = n_kwnullable
1381
1382 # The name of the class or of the formal type
1383 var _n_id: TClassid
1384 fun n_id: TClassid do return _n_id
1385 fun n_id=(n_id: TClassid) do _n_id = n_id
1386
1387 # Type arguments for a generic type
1388 var n_types: ANodes[AType] = new ANodes[AType](self)
1389 init do end
1390 end
1391
1392 # A label at the end of a block or in a break/continue statement. eg `label x`
1393 class ALabel
1394 super Prod
1395 var _n_kwlabel: TKwlabel
1396 fun n_kwlabel: TKwlabel do return _n_kwlabel
1397 fun n_kwlabel=(n_kwlabel: TKwlabel) do _n_kwlabel = n_kwlabel
1398 var _n_id: TId
1399 fun n_id: TId do return _n_id
1400 fun n_id=(n_id: TId) do _n_id = n_id
1401 init do end
1402 end
1403
1404 # Expression and statements
1405 # From a AST point of view there is no distinction between statement and expressions (even if the parser has to distinguish them)
1406 abstract class AExpr
1407 super Prod
1408 end
1409
1410 # A sequence of AExpr (usually statements)
1411 # The last AExpr gives the value of the whole block
1412 class ABlockExpr
1413 super AExpr
1414 var n_expr: ANodes[AExpr] = new ANodes[AExpr](self)
1415 var _n_kwend: nullable TKwend = null
1416 fun n_kwend: nullable TKwend do return _n_kwend
1417 fun n_kwend=(n_kwend: nullable TKwend) do _n_kwend = n_kwend
1418 init do end
1419 end
1420
1421 # A declaration of a local variable. eg `var x: X = y`
1422 class AVardeclExpr
1423 super AExpr
1424 var _n_kwvar: TKwvar
1425 fun n_kwvar: TKwvar do return _n_kwvar
1426 fun n_kwvar=(n_kwvar: TKwvar) do _n_kwvar = n_kwvar
1427 var _n_id: TId
1428 fun n_id: TId do return _n_id
1429 fun n_id=(n_id: TId) do _n_id = n_id
1430 var _n_type: nullable AType = null
1431 fun n_type: nullable AType do return _n_type
1432 fun n_type=(n_type: nullable AType) do _n_type = n_type
1433 var _n_assign: nullable TAssign = null
1434 fun n_assign: nullable TAssign do return _n_assign
1435 fun n_assign=(n_assign: nullable TAssign) do _n_assign = n_assign
1436
1437 # The initial value, if any
1438 var _n_expr: nullable AExpr = null
1439 fun n_expr: nullable AExpr do return _n_expr
1440 fun n_expr=(n_expr: nullable AExpr) do _n_expr = n_expr
1441 init do end
1442 end
1443
1444 # A `return` statement. eg `return x`
1445 class AReturnExpr
1446 super AExpr
1447 var _n_kwreturn: nullable TKwreturn = null
1448 fun n_kwreturn: nullable TKwreturn do return _n_kwreturn
1449 fun n_kwreturn=(n_kwreturn: nullable TKwreturn) do _n_kwreturn = n_kwreturn
1450 var _n_expr: nullable AExpr = null
1451 fun n_expr: nullable AExpr do return _n_expr
1452 fun n_expr=(n_expr: nullable AExpr) do _n_expr = n_expr
1453 init do end
1454 end
1455
1456 # Something that has a label.
1457 abstract class ALabelable
1458 super Prod
1459 var _n_label: nullable ALabel = null
1460 fun n_label: nullable ALabel do return _n_label
1461 fun n_label=(n_label: nullable ALabel) do _n_label = n_label
1462 init do end
1463 end
1464
1465 # A `break` statement.
1466 class ABreakExpr
1467 super AExpr
1468 super ALabelable
1469 var _n_kwbreak: TKwbreak
1470 fun n_kwbreak: TKwbreak do return _n_kwbreak
1471 fun n_kwbreak=(n_kwbreak: TKwbreak) do _n_kwbreak = n_kwbreak
1472 var _n_expr: nullable AExpr = null
1473 fun n_expr: nullable AExpr do return _n_expr
1474 fun n_expr=(n_expr: nullable AExpr) do _n_expr = n_expr
1475 init do end
1476 end
1477
1478 # An `abort` statement
1479 class AAbortExpr
1480 super AExpr
1481 var _n_kwabort: TKwabort
1482 fun n_kwabort: TKwabort do return _n_kwabort
1483 fun n_kwabort=(n_kwabort: TKwabort) do _n_kwabort = n_kwabort
1484 init do end
1485 end
1486
1487 # A `continue` statement
1488 class AContinueExpr
1489 super AExpr
1490 super ALabelable
1491 var _n_kwcontinue: nullable TKwcontinue = null
1492 fun n_kwcontinue: nullable TKwcontinue do return _n_kwcontinue
1493 fun n_kwcontinue=(n_kwcontinue: nullable TKwcontinue) do _n_kwcontinue = n_kwcontinue
1494 var _n_expr: nullable AExpr = null
1495 fun n_expr: nullable AExpr do return _n_expr
1496 fun n_expr=(n_expr: nullable AExpr) do _n_expr = n_expr
1497 init do end
1498 end
1499
1500 # A `do` statement
1501 class ADoExpr
1502 super AExpr
1503 super ALabelable
1504 var _n_kwdo: TKwdo
1505 fun n_kwdo: TKwdo do return _n_kwdo
1506 fun n_kwdo=(n_kwdo: TKwdo) do _n_kwdo = n_kwdo
1507 var _n_block: nullable AExpr = null
1508 fun n_block: nullable AExpr do return _n_block
1509 fun n_block=(n_block: nullable AExpr) do _n_block = n_block
1510 init do end
1511 end
1512
1513 # A `if` statement
1514 class AIfExpr
1515 super AExpr
1516 var _n_kwif: TKwif
1517 fun n_kwif: TKwif do return _n_kwif
1518 fun n_kwif=(n_kwif: TKwif) do _n_kwif = n_kwif
1519 var _n_expr: AExpr
1520 fun n_expr: AExpr do return _n_expr
1521 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
1522 var _n_then: nullable AExpr = null
1523 fun n_then: nullable AExpr do return _n_then
1524 fun n_then=(n_then: nullable AExpr) do _n_then = n_then
1525 var _n_else: nullable AExpr = null
1526 fun n_else: nullable AExpr do return _n_else
1527 fun n_else=(n_else: nullable AExpr) do _n_else = n_else
1528 init do end
1529 end
1530
1531 # A `if` expression
1532 class AIfexprExpr
1533 super AExpr
1534 var _n_kwif: TKwif
1535 fun n_kwif: TKwif do return _n_kwif
1536 fun n_kwif=(n_kwif: TKwif) do _n_kwif = n_kwif
1537 var _n_expr: AExpr
1538 fun n_expr: AExpr do return _n_expr
1539 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
1540 var _n_kwthen: TKwthen
1541 fun n_kwthen: TKwthen do return _n_kwthen
1542 fun n_kwthen=(n_kwthen: TKwthen) do _n_kwthen = n_kwthen
1543 var _n_then: AExpr
1544 fun n_then: AExpr do return _n_then
1545 fun n_then=(n_then: AExpr) do _n_then = n_then
1546 var _n_kwelse: TKwelse
1547 fun n_kwelse: TKwelse do return _n_kwelse
1548 fun n_kwelse=(n_kwelse: TKwelse) do _n_kwelse = n_kwelse
1549 var _n_else: AExpr
1550 fun n_else: AExpr do return _n_else
1551 fun n_else=(n_else: AExpr) do _n_else = n_else
1552 init do end
1553 end
1554
1555 # A `while` statement
1556 class AWhileExpr
1557 super AExpr
1558 super ALabelable
1559 var _n_kwwhile: TKwwhile
1560 fun n_kwwhile: TKwwhile do return _n_kwwhile
1561 fun n_kwwhile=(n_kwwhile: TKwwhile) do _n_kwwhile = n_kwwhile
1562 var _n_expr: AExpr
1563 fun n_expr: AExpr do return _n_expr
1564 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
1565 var _n_kwdo: TKwdo
1566 fun n_kwdo: TKwdo do return _n_kwdo
1567 fun n_kwdo=(n_kwdo: TKwdo) do _n_kwdo = n_kwdo
1568 var _n_block: nullable AExpr = null
1569 fun n_block: nullable AExpr do return _n_block
1570 fun n_block=(n_block: nullable AExpr) do _n_block = n_block
1571 init do end
1572 end
1573
1574 # A `loop` statement
1575 class ALoopExpr
1576 super AExpr
1577 super ALabelable
1578 var _n_kwloop: TKwloop
1579 fun n_kwloop: TKwloop do return _n_kwloop
1580 fun n_kwloop=(n_kwloop: TKwloop) do _n_kwloop = n_kwloop
1581 var _n_block: nullable AExpr = null
1582 fun n_block: nullable AExpr do return _n_block
1583 fun n_block=(n_block: nullable AExpr) do _n_block = n_block
1584 init do end
1585 end
1586
1587 # A `for` statement
1588 class AForExpr
1589 super AExpr
1590 super ALabelable
1591 var _n_kwfor: TKwfor
1592 fun n_kwfor: TKwfor do return _n_kwfor
1593 fun n_kwfor=(n_kwfor: TKwfor) do _n_kwfor = n_kwfor
1594 var n_ids: ANodes[TId] = new ANodes[TId](self)
1595 var _n_expr: AExpr
1596 fun n_expr: AExpr do return _n_expr
1597 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
1598 var _n_kwdo: TKwdo
1599 fun n_kwdo: TKwdo do return _n_kwdo
1600 fun n_kwdo=(n_kwdo: TKwdo) do _n_kwdo = n_kwdo
1601 var _n_block: nullable AExpr = null
1602 fun n_block: nullable AExpr do return _n_block
1603 fun n_block=(n_block: nullable AExpr) do _n_block = n_block
1604 init do end
1605 end
1606
1607 # An `assert` statement
1608 class AAssertExpr
1609 super AExpr
1610 var _n_kwassert: TKwassert
1611 fun n_kwassert: TKwassert do return _n_kwassert
1612 fun n_kwassert=(n_kwassert: TKwassert) do _n_kwassert = n_kwassert
1613 var _n_id: nullable TId = null
1614 fun n_id: nullable TId do return _n_id
1615 fun n_id=(n_id: nullable TId) do _n_id = n_id
1616 var _n_expr: AExpr
1617 fun n_expr: AExpr do return _n_expr
1618 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
1619 var _n_else: nullable AExpr = null
1620 fun n_else: nullable AExpr do return _n_else
1621 fun n_else=(n_else: nullable AExpr) do _n_else = n_else
1622 init do end
1623 end
1624
1625 # Whatever is a simple assignment. eg `= something`
1626 abstract class AAssignFormExpr
1627 super AExpr
1628 var _n_assign: TAssign
1629 fun n_assign: TAssign do return _n_assign
1630 fun n_assign=(n_assign: TAssign) do _n_assign = n_assign
1631 var _n_value: AExpr
1632 fun n_value: AExpr do return _n_value
1633 fun n_value=(n_value: AExpr) do _n_value = n_value
1634 init do end
1635 end
1636
1637 # Whatever is a combined assignment. eg `+= something`
1638 abstract class AReassignFormExpr
1639 super AExpr
1640 var _n_assign_op: AAssignOp
1641 fun n_assign_op: AAssignOp do return _n_assign_op
1642 fun n_assign_op=(n_assign_op: AAssignOp) do _n_assign_op = n_assign_op
1643 var _n_value: AExpr
1644 fun n_value: AExpr do return _n_value
1645 fun n_value=(n_value: AExpr) do _n_value = n_value
1646 init do end
1647 end
1648
1649 # A `once` expression. eg `once x`
1650 class AOnceExpr
1651 super AProxyExpr
1652 var _n_kwonce: TKwonce
1653 fun n_kwonce: TKwonce do return _n_kwonce
1654 fun n_kwonce=(n_kwonce: TKwonce) do _n_kwonce = n_kwonce
1655 init do end
1656 end
1657
1658 # A polymorphic invocation of a method
1659 # The form of the invocation (name, arguments, etc) are specific
1660 abstract class ASendExpr
1661 super AExpr
1662 # The receiver of the method invocation
1663 var _n_expr: AExpr
1664 fun n_expr: AExpr do return _n_expr
1665 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
1666 init do end
1667 end
1668
1669 # A binary operation on a method
1670 abstract class ABinopExpr
1671 super ASendExpr
1672 # The second operand of the operation
1673 # Note: the receiver (`n_expr`) is the first operand
1674 var _n_expr2: AExpr
1675 fun n_expr2: AExpr do return _n_expr2
1676 fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
1677 init do end
1678 end
1679
1680 # Something that is boolean expression
1681 abstract class ABoolExpr
1682 super AExpr
1683 end
1684
1685 # A `or` expression
1686 class AOrExpr
1687 super ABoolExpr
1688 var _n_expr: AExpr
1689 fun n_expr: AExpr do return _n_expr
1690 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
1691 var _n_expr2: AExpr
1692 fun n_expr2: AExpr do return _n_expr2
1693 fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
1694 init do end
1695 end
1696
1697 # A `and` expression
1698 class AAndExpr
1699 super ABoolExpr
1700 var _n_expr: AExpr
1701 fun n_expr: AExpr do return _n_expr
1702 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
1703 var _n_expr2: AExpr
1704 fun n_expr2: AExpr do return _n_expr2
1705 fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
1706 init do end
1707 end
1708
1709 # A `or else` expression
1710 class AOrElseExpr
1711 super ABoolExpr
1712 var _n_expr: AExpr
1713 fun n_expr: AExpr do return _n_expr
1714 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
1715 var _n_expr2: AExpr
1716 fun n_expr2: AExpr do return _n_expr2
1717 fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
1718 init do end
1719 end
1720
1721 # A `implies` expression
1722 class AImpliesExpr
1723 super ABoolExpr
1724 var _n_expr: AExpr
1725 fun n_expr: AExpr do return _n_expr
1726 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
1727 var _n_expr2: AExpr
1728 fun n_expr2: AExpr do return _n_expr2
1729 fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
1730 init do end
1731 end
1732
1733 # A `not` expression
1734 class ANotExpr
1735 super ABoolExpr
1736 var _n_kwnot: TKwnot
1737 fun n_kwnot: TKwnot do return _n_kwnot
1738 fun n_kwnot=(n_kwnot: TKwnot) do _n_kwnot = n_kwnot
1739 var _n_expr: AExpr
1740 fun n_expr: AExpr do return _n_expr
1741 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
1742 init do end
1743 end
1744
1745 # A `==` expression
1746 class AEqExpr
1747 super ABinopExpr
1748 end
1749
1750 # A `!=` expression
1751 class ANeExpr
1752 super ABinopExpr
1753 end
1754
1755 # A `<` expression
1756 class ALtExpr
1757 super ABinopExpr
1758 end
1759
1760 # A `<=` expression
1761 class ALeExpr
1762 super ABinopExpr
1763 end
1764
1765 # A `<<` expression
1766 class ALlExpr
1767 super ABinopExpr
1768 end
1769
1770 # A `>` expression
1771 class AGtExpr
1772 super ABinopExpr
1773 end
1774
1775 # A `>=` expression
1776 class AGeExpr
1777 super ABinopExpr
1778 end
1779
1780 # A `>>` expression
1781 class AGgExpr
1782 super ABinopExpr
1783 end
1784
1785 # A type-ckeck expression. eg `x isa T`
1786 class AIsaExpr
1787 super ABoolExpr
1788 var _n_expr: AExpr
1789 fun n_expr: AExpr do return _n_expr
1790 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
1791 var _n_type: AType
1792 fun n_type: AType do return _n_type
1793 fun n_type=(n_type: AType) do _n_type = n_type
1794 init do end
1795 end
1796
1797 # A `+` expression
1798 class APlusExpr
1799 super ABinopExpr
1800 end
1801
1802 # A `-` expression
1803 class AMinusExpr
1804 super ABinopExpr
1805 end
1806
1807 # A `<=>` expression
1808 class AStarshipExpr
1809 super ABinopExpr
1810 end
1811
1812 # A `*` expression
1813 class AStarExpr
1814 super ABinopExpr
1815 end
1816
1817 # A `/` expression
1818 class ASlashExpr
1819 super ABinopExpr
1820 end
1821
1822 # A `%` expression
1823 class APercentExpr
1824 super ABinopExpr
1825 end
1826
1827 # A unary minus expression. eg `-x`
1828 class AUminusExpr
1829 super ASendExpr
1830 var _n_minus: TMinus
1831 fun n_minus: TMinus do return _n_minus
1832 fun n_minus=(n_minus: TMinus) do _n_minus = n_minus
1833 init do end
1834 end
1835
1836 # An explicit instantiation. eg `new T`
1837 class ANewExpr
1838 super AExpr
1839 var _n_kwnew: TKwnew
1840 fun n_kwnew: TKwnew do return _n_kwnew
1841 fun n_kwnew=(n_kwnew: TKwnew) do _n_kwnew = n_kwnew
1842 var _n_type: AType
1843 fun n_type: AType do return _n_type
1844 fun n_type=(n_type: AType) do _n_type = n_type
1845
1846 # The name of the named-constructor, if any
1847 var _n_id: nullable TId = null
1848 fun n_id: nullable TId do return _n_id
1849 fun n_id=(n_id: nullable TId) do _n_id = n_id
1850 var _n_args: AExprs
1851 fun n_args: AExprs do return _n_args
1852 fun n_args=(n_args: AExprs) do _n_args = n_args
1853 init do end
1854 end
1855
1856 # Whatever is a old-style attribute access
1857 abstract class AAttrFormExpr
1858 super AExpr
1859
1860 # The receiver of the attribute
1861 var _n_expr: AExpr
1862 fun n_expr: AExpr do return _n_expr
1863 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
1864
1865 # The name of the attribute
1866 var _n_id: TAttrid
1867 fun n_id: TAttrid do return _n_id
1868 fun n_id=(n_id: TAttrid) do _n_id = n_id
1869
1870 init do end
1871 end
1872
1873 # The read of an attribute. eg `x._a`
1874 class AAttrExpr
1875 super AAttrFormExpr
1876 end
1877
1878 # The assignment of an attribute. eg `x._a=y`
1879 class AAttrAssignExpr
1880 super AAttrFormExpr
1881 super AAssignFormExpr
1882 end
1883
1884 # Whatever looks-like a call with a standard method and any number of arguments.
1885 abstract class ACallFormExpr
1886 super ASendExpr
1887
1888 # The name of the method
1889 var _n_id: TId
1890 fun n_id: TId do return _n_id
1891 fun n_id=(n_id: TId) do _n_id = n_id
1892
1893 # The arguments of the call
1894 var _n_args: AExprs
1895 fun n_args: AExprs do return _n_args
1896 fun n_args=(n_args: AExprs) do _n_args = n_args
1897 init do end
1898 end
1899
1900 # A complex setter call (standard or brackets)
1901 abstract class ASendReassignFormExpr
1902 super ASendExpr
1903 super AReassignFormExpr
1904 end
1905
1906 # A complex attribute assignment. eg `x._a+=y`
1907 class AAttrReassignExpr
1908 super AAttrFormExpr
1909 super AReassignFormExpr
1910 end
1911
1912 # A call with a standard method-name and any number of arguments. eg `x.m(y)`. OR just a simple id
1913 # 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`.
1914 # Semantic analysis have to transform them to instance of `AVarExpr`.
1915 class ACallExpr
1916 super ACallFormExpr
1917 end
1918
1919 # A setter call with a standard method-name and any number of arguments. eg `x.m(y)=z`. OR just a simple assignment.
1920 # 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`.
1921 # Semantic analysis have to transform them to instance of `AVarAssignExpr`.
1922 class ACallAssignExpr
1923 super ACallFormExpr
1924 super AAssignFormExpr
1925 end
1926
1927 # 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.
1928 # 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`.
1929 # Semantic analysis have to transform them to instance of `AVarReassignExpr`.
1930 class ACallReassignExpr
1931 super ACallFormExpr
1932 super ASendReassignFormExpr
1933 end
1934
1935 # A call to `super`. OR a call of a super-constructor
1936 class ASuperExpr
1937 super AExpr
1938 var _n_qualified: nullable AQualified = null
1939 fun n_qualified: nullable AQualified do return _n_qualified
1940 fun n_qualified=(n_qualified: nullable AQualified) do _n_qualified = n_qualified
1941 var _n_kwsuper: TKwsuper
1942 fun n_kwsuper: TKwsuper do return _n_kwsuper
1943 fun n_kwsuper=(n_kwsuper: TKwsuper) do _n_kwsuper = n_kwsuper
1944 var _n_args: AExprs
1945 fun n_args: AExprs do return _n_args
1946 fun n_args=(n_args: AExprs) do _n_args = n_args
1947 init do end
1948 end
1949
1950 # A call to the `init` constructor.
1951 # Note: because `init` is a keyword and not a `TId`, the explicit call to init cannot be a ACallFormExpr.
1952 class AInitExpr
1953 super ASendExpr
1954 var _n_kwinit: TKwinit
1955 fun n_kwinit: TKwinit do return _n_kwinit
1956 fun n_kwinit=(n_kwinit: TKwinit) do _n_kwinit = n_kwinit
1957 var _n_args: AExprs
1958 fun n_args: AExprs do return _n_args
1959 fun n_args=(n_args: AExprs) do _n_args = n_args
1960 init do end
1961 end
1962
1963 # Whatever looks-like a call of the brackets `[]` operator.
1964 abstract class ABraFormExpr
1965 super ASendExpr
1966 var _n_args: AExprs
1967 fun n_args: AExprs do return _n_args
1968 fun n_args=(n_args: AExprs) do _n_args = n_args
1969 init do end
1970 end
1971
1972 # A call of the brackets operator. eg `x[y,z]`
1973 class ABraExpr
1974 super ABraFormExpr
1975 end
1976
1977 # A setter call of the bracket operator. eg `x[y,z]=t`
1978 class ABraAssignExpr
1979 super ABraFormExpr
1980 super AAssignFormExpr
1981 end
1982
1983 # Whatever is an access to a local variable
1984 abstract class AVarFormExpr
1985 super AExpr
1986 var _n_id: TId
1987 fun n_id: TId do return _n_id
1988 fun n_id=(n_id: TId) do _n_id = n_id
1989 init do end
1990 end
1991
1992 # A complex setter call of the bracket operator. eg `x[y,z]+=t`
1993 class ABraReassignExpr
1994 super ABraFormExpr
1995 super ASendReassignFormExpr
1996 end
1997
1998 # A local variable read access.
1999 # The parser cannot instantiate them, see `ACallExpr`.
2000 class AVarExpr
2001 super AVarFormExpr
2002 end
2003
2004 # A local variable simple assigment access
2005 # The parser cannot instantiate them, see `ACallAssignExpr`.
2006 class AVarAssignExpr
2007 super AVarFormExpr
2008 super AAssignFormExpr
2009 end
2010
2011 # A local variable complex assignment access
2012 # The parser cannot instantiate them, see `ACallReassignExpr`.
2013 class AVarReassignExpr
2014 super AVarFormExpr
2015 super AReassignFormExpr
2016 end
2017
2018 # A literal range, open or closed
2019 abstract class ARangeExpr
2020 super AExpr
2021 var _n_expr: AExpr
2022 fun n_expr: AExpr do return _n_expr
2023 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
2024 var _n_expr2: AExpr
2025 fun n_expr2: AExpr do return _n_expr2
2026 fun n_expr2=(n_expr2: AExpr) do _n_expr2 = n_expr2
2027 init do end
2028 end
2029
2030 # A closed literal range. eg `[x..y]`
2031 class ACrangeExpr
2032 super ARangeExpr
2033 var _n_obra: TObra
2034 fun n_obra: TObra do return _n_obra
2035 fun n_obra=(n_obra: TObra) do _n_obra = n_obra
2036 var _n_cbra: TCbra
2037 fun n_cbra: TCbra do return _n_cbra
2038 fun n_cbra=(n_cbra: TCbra) do _n_cbra = n_cbra
2039 init do end
2040 end
2041
2042 # An open literal range. eg `[x..y[`
2043 class AOrangeExpr
2044 super ARangeExpr
2045 var _n_obra: TObra
2046 fun n_obra: TObra do return _n_obra
2047 fun n_obra=(n_obra: TObra) do _n_obra = n_obra
2048 var _n_cbra: TObra
2049 fun n_cbra: TObra do return _n_cbra
2050 fun n_cbra=(n_cbra: TObra) do _n_cbra = n_cbra
2051 init do end
2052 end
2053
2054 # A literal array. eg. `[x,y,z]`
2055 class AArrayExpr
2056 super AExpr
2057 var _n_exprs: AExprs
2058 fun n_exprs: AExprs do return _n_exprs
2059 fun n_exprs=(n_exprs: AExprs) do _n_exprs = n_exprs
2060 init do end
2061 end
2062
2063 # A read of `self`
2064 class ASelfExpr
2065 super AExpr
2066 var _n_kwself: nullable TKwself
2067 fun n_kwself: nullable TKwself do return _n_kwself
2068 fun n_kwself=(n_kwself: nullable TKwself) do _n_kwself = n_kwself
2069 init do end
2070 end
2071
2072 # When there is no explicit receiver, `self` is implicit
2073 class AImplicitSelfExpr
2074 super ASelfExpr
2075 end
2076
2077 # A `true` boolean literal constant
2078 class ATrueExpr
2079 super ABoolExpr
2080 var _n_kwtrue: TKwtrue
2081 fun n_kwtrue: TKwtrue do return _n_kwtrue
2082 fun n_kwtrue=(n_kwtrue: TKwtrue) do _n_kwtrue = n_kwtrue
2083 init do end
2084 end
2085 # A `false` boolean literal constant
2086 class AFalseExpr
2087 super ABoolExpr
2088 var _n_kwfalse: TKwfalse
2089 fun n_kwfalse: TKwfalse do return _n_kwfalse
2090 fun n_kwfalse=(n_kwfalse: TKwfalse) do _n_kwfalse = n_kwfalse
2091 init do end
2092 end
2093 # A `null` literal constant
2094 class ANullExpr
2095 super AExpr
2096 var _n_kwnull: TKwnull
2097 fun n_kwnull: TKwnull do return _n_kwnull
2098 fun n_kwnull=(n_kwnull: TKwnull) do _n_kwnull = n_kwnull
2099 init do end
2100 end
2101 # An integer literal
2102 class AIntExpr
2103 super AExpr
2104 end
2105 # An integer literal in decimal format
2106 class ADecIntExpr
2107 super AIntExpr
2108 var _n_number: TNumber
2109 fun n_number: TNumber do return _n_number
2110 fun n_number=(n_number: TNumber) do _n_number = n_number
2111 init do end
2112 end
2113 # An integer literal in hexadecimal format
2114 class AHexIntExpr
2115 super AIntExpr
2116 var _n_hex_number: THexNumber
2117 fun n_hex_number: THexNumber do return _n_hex_number
2118 fun n_hex_number=(n_hex_number: THexNumber) do _n_hex_number = n_hex_number
2119 init do end
2120 end
2121 # A float literal
2122 class AFloatExpr
2123 super AExpr
2124 var _n_float: TFloat
2125 fun n_float: TFloat do return _n_float
2126 fun n_float=(n_float: TFloat) do _n_float = n_float
2127 init do end
2128 end
2129 # A character literal
2130 class ACharExpr
2131 super AExpr
2132 var _n_char: TChar
2133 fun n_char: TChar do return _n_char
2134 fun n_char=(n_char: TChar) do _n_char = n_char
2135 init do end
2136 end
2137 # A string literal
2138 abstract class AStringFormExpr
2139 super AExpr
2140 var _n_string: Token
2141 fun n_string: Token do return _n_string
2142 fun n_string=(n_string: Token) do _n_string = n_string
2143 init do end
2144 end
2145
2146 # A simple string. eg. `"abc"`
2147 class AStringExpr
2148 super AStringFormExpr
2149 end
2150
2151 # The start of a superstring. eg `"abc{`
2152 class AStartStringExpr
2153 super AStringFormExpr
2154 end
2155
2156 # The middle of a superstring. eg `}abc{`
2157 class AMidStringExpr
2158 super AStringFormExpr
2159 end
2160
2161 # The end of a superstrng. eg `}abc"`
2162 class AEndStringExpr
2163 super AStringFormExpr
2164 end
2165
2166 # A superstring literal. eg `"a{x}b{y}c"`
2167 # Each part is modelized a sequence of expression. eg. `["a{, x, }b{, y, }c"]`
2168 class ASuperstringExpr
2169 super AExpr
2170 var n_exprs: ANodes[AExpr] = new ANodes[AExpr](self)
2171 init do end
2172 end
2173
2174 # A simple parenthesis. eg `(x)`
2175 class AParExpr
2176 super AProxyExpr
2177 var _n_opar: TOpar
2178 fun n_opar: TOpar do return _n_opar
2179 fun n_opar=(n_opar: TOpar) do _n_opar = n_opar
2180 var _n_cpar: TCpar
2181 fun n_cpar: TCpar do return _n_cpar
2182 fun n_cpar=(n_cpar: TCpar) do _n_cpar = n_cpar
2183 init do end
2184 end
2185
2186 # Whatevej just contains (and mimic) an other expression
2187 abstract class AProxyExpr
2188 super AExpr
2189 var _n_expr: AExpr
2190 fun n_expr: AExpr do return _n_expr
2191 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
2192 init do end
2193 end
2194
2195 # A type cast. eg `x.as(T)`
2196 class AAsCastExpr
2197 super AExpr
2198 var _n_expr: AExpr
2199 fun n_expr: AExpr do return _n_expr
2200 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
2201 var _n_kwas: TKwas
2202 fun n_kwas: TKwas do return _n_kwas
2203 fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
2204 var _n_opar: nullable TOpar = null
2205 fun n_opar: nullable TOpar do return _n_opar
2206 fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
2207 var _n_type: AType
2208 fun n_type: AType do return _n_type
2209 fun n_type=(n_type: AType) do _n_type = n_type
2210 var _n_cpar: nullable TCpar = null
2211 fun n_cpar: nullable TCpar do return _n_cpar
2212 fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
2213 init do end
2214 end
2215
2216 # A as-not-null cast. eg `x.as(not null)`
2217 class AAsNotnullExpr
2218 super AExpr
2219 var _n_expr: AExpr
2220 fun n_expr: AExpr do return _n_expr
2221 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
2222 var _n_kwas: TKwas
2223 fun n_kwas: TKwas do return _n_kwas
2224 fun n_kwas=(n_kwas: TKwas) do _n_kwas = n_kwas
2225 var _n_opar: nullable TOpar = null
2226 fun n_opar: nullable TOpar do return _n_opar
2227 fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
2228 var _n_kwnot: TKwnot
2229 fun n_kwnot: TKwnot do return _n_kwnot
2230 fun n_kwnot=(n_kwnot: TKwnot) do _n_kwnot = n_kwnot
2231 var _n_kwnull: TKwnull
2232 fun n_kwnull: TKwnull do return _n_kwnull
2233 fun n_kwnull=(n_kwnull: TKwnull) do _n_kwnull = n_kwnull
2234 var _n_cpar: nullable TCpar = null
2235 fun n_cpar: nullable TCpar do return _n_cpar
2236 fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
2237 init do end
2238 end
2239
2240 # A is-set check of old-style attributes. eg `isset x._a`
2241 class AIssetAttrExpr
2242 super AAttrFormExpr
2243 var _n_kwisset: TKwisset
2244 fun n_kwisset: TKwisset do return _n_kwisset
2245 fun n_kwisset=(n_kwisset: TKwisset) do _n_kwisset = n_kwisset
2246 init do end
2247 end
2248
2249 # A list of expression separated with commas (arguments for instance)
2250 abstract class AExprs
2251 super Prod
2252 var n_exprs: ANodes[AExpr] = new ANodes[AExpr](self)
2253 init do end
2254 end
2255
2256 class ADebugTypeExpr
2257 super AExpr
2258 var _n_kwdebug: TKwdebug
2259 fun n_kwdebug: TKwdebug do return _n_kwdebug
2260 fun n_kwdebug=(n_kwdebug: TKwdebug) do _n_kwdebug = n_kwdebug
2261 var _n_kwtype: TKwtype
2262 fun n_kwtype: TKwtype do return _n_kwtype
2263 fun n_kwtype=(n_kwtype: TKwtype) do _n_kwtype = n_kwtype
2264 var _n_expr: AExpr
2265 fun n_expr: AExpr do return _n_expr
2266 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
2267 var _n_type: AType
2268 fun n_type: AType do return _n_type
2269 fun n_type=(n_type: AType) do _n_type = n_type
2270 init do end
2271 end
2272
2273 # A simple list of expressions
2274 class AListExprs
2275 super AExprs
2276 end
2277
2278 # A list of expressions enclosed in parentheses
2279 class AParExprs
2280 super AExprs
2281 var _n_opar: TOpar
2282 fun n_opar: TOpar do return _n_opar
2283 fun n_opar=(n_opar: TOpar) do _n_opar = n_opar
2284 var _n_cpar: TCpar
2285 fun n_cpar: TCpar do return _n_cpar
2286 fun n_cpar=(n_cpar: TCpar) do _n_cpar = n_cpar
2287 init do end
2288 end
2289
2290 # A list of expressions enclosed in brackets
2291 class ABraExprs
2292 super AExprs
2293 var _n_obra: TObra
2294 fun n_obra: TObra do return _n_obra
2295 fun n_obra=(n_obra: TObra) do _n_obra = n_obra
2296 var _n_cbra: TCbra
2297 fun n_cbra: TCbra do return _n_cbra
2298 fun n_cbra=(n_cbra: TCbra) do _n_cbra = n_cbra
2299 init do end
2300 end
2301
2302 # A complex assignment operator. eg `+=`
2303 abstract class AAssignOp
2304 super Prod
2305 end
2306 class APlusAssignOp
2307 super AAssignOp
2308 var _n_pluseq: TPluseq
2309 fun n_pluseq: TPluseq do return _n_pluseq
2310 fun n_pluseq=(n_pluseq: TPluseq) do _n_pluseq = n_pluseq
2311 init do end
2312 end
2313 class AMinusAssignOp
2314 super AAssignOp
2315 var _n_minuseq: TMinuseq
2316 fun n_minuseq: TMinuseq do return _n_minuseq
2317 fun n_minuseq=(n_minuseq: TMinuseq) do _n_minuseq = n_minuseq
2318 init do end
2319 end
2320
2321 class AModuleName
2322 super Prod
2323 var _n_quad: nullable TQuad = null
2324 fun n_quad: nullable TQuad do return _n_quad
2325 fun n_quad=(n_quad: nullable TQuad) do _n_quad = n_quad
2326 var n_path: ANodes[TId] = new ANodes[TId](self)
2327 var _n_id: TId
2328 fun n_id: TId do return _n_id
2329 fun n_id=(n_id: TId) do _n_id = n_id
2330 init do end
2331 end
2332 class AInLanguage
2333 super Prod
2334 var _n_kwin: TKwin
2335 fun n_kwin: TKwin do return _n_kwin
2336 fun n_kwin=(n_kwin: TKwin) do _n_kwin = n_kwin
2337 var _n_string: TString
2338 fun n_string: TString do return _n_string
2339 fun n_string=(n_string: TString) do _n_string = n_string
2340 init do end
2341 end
2342 class AExternCodeBlock
2343 super Prod
2344 var _n_in_language: nullable AInLanguage = null
2345 fun n_in_language: nullable AInLanguage do return _n_in_language
2346 fun n_in_language=(n_in_language: nullable AInLanguage) do _n_in_language = n_in_language
2347 var _n_extern_code_segment: TExternCodeSegment
2348 fun n_extern_code_segment: TExternCodeSegment do return _n_extern_code_segment
2349 fun n_extern_code_segment=(n_extern_code_segment: TExternCodeSegment) do _n_extern_code_segment = n_extern_code_segment
2350 init do end
2351 end
2352 class AQualified
2353 super Prod
2354 var _n_quad: nullable TQuad = null
2355 fun n_quad: nullable TQuad do return _n_quad
2356 fun n_quad=(n_quad: nullable TQuad) do _n_quad = n_quad
2357 var n_id: ANodes[TId] = new ANodes[TId](self)
2358 var _n_classid: nullable TClassid = null
2359 fun n_classid: nullable TClassid do return _n_classid
2360 fun n_classid=(n_classid: nullable TClassid) do _n_classid = n_classid
2361 init do end
2362 end
2363
2364 # A documentation of a definition
2365 # It contains the block of comments just above the declaration
2366 class ADoc
2367 super Prod
2368 var n_comment: ANodes[TComment] = new ANodes[TComment](self)
2369 init do end
2370 end
2371
2372 class AAnnotations
2373 super Prod
2374 var _n_at: nullable TAt = null
2375 fun n_at: nullable TAt do return _n_at
2376 fun n_at=(n_at: nullable TAt) do _n_at = n_at
2377 var _n_opar: nullable TOpar = null
2378 fun n_opar: nullable TOpar do return _n_opar
2379 fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
2380 var n_items: ANodes[AAnnotation] = new ANodes[AAnnotation](self)
2381 var _n_cpar: nullable TCpar = null
2382 fun n_cpar: nullable TCpar do return _n_cpar
2383 fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
2384 init do end
2385 end
2386 class AAnnotation
2387 super Prod
2388 var _n_atid: AAtid
2389 fun n_atid: AAtid do return _n_atid
2390 fun n_atid=(n_atid: AAtid) do _n_atid = n_atid
2391 var _n_opar: nullable TOpar = null
2392 fun n_opar: nullable TOpar do return _n_opar
2393 fun n_opar=(n_opar: nullable TOpar) do _n_opar = n_opar
2394 var n_args: ANodes[AAtArg] = new ANodes[AAtArg](self)
2395 var _n_cpar: nullable TCpar = null
2396 fun n_cpar: nullable TCpar do return _n_cpar
2397 fun n_cpar=(n_cpar: nullable TCpar) do _n_cpar = n_cpar
2398 init do end
2399 end
2400 abstract class AAtArg
2401 super Prod
2402 end
2403 class ATypeAtArg
2404 super AAtArg
2405 var _n_type: AType
2406 fun n_type: AType do return _n_type
2407 fun n_type=(n_type: AType) do _n_type = n_type
2408 init do end
2409 end
2410 class AExprAtArg
2411 super AAtArg
2412 var _n_expr: AExpr
2413 fun n_expr: AExpr do return _n_expr
2414 fun n_expr=(n_expr: AExpr) do _n_expr = n_expr
2415 init do end
2416 end
2417 class AAtAtArg
2418 super AAtArg
2419 end
2420 abstract class AAtid
2421 super Prod
2422 var _n_id: Token
2423 fun n_id: Token do return _n_id
2424 fun n_id=(n_id: Token) do _n_id = n_id
2425 init do end
2426 end
2427 class AIdAtid
2428 super AAtid
2429 end
2430 class AKwexternAtid
2431 super AAtid
2432 end
2433 class AKwinternAtid
2434 super AAtid
2435 end
2436 class AKwreadableAtid
2437 super AAtid
2438 end
2439 class AKwwritableAtid
2440 super AAtid
2441 end
2442 class AKwimportAtid
2443 super AAtid
2444 end
2445
2446 # The root of the AST
2447 class Start
2448 super Prod
2449 var _n_base: nullable AModule
2450 fun n_base: nullable AModule do return _n_base
2451 fun n_base=(n_base: nullable AModule) do _n_base = n_base
2452 var _n_eof: EOF
2453 fun n_eof: EOF do return _n_eof
2454 fun n_eof=(n_eof: EOF) do _n_eof = n_eof
2455 init(n_base: nullable AModule, n_eof: EOF)
2456 do
2457 self._n_base = n_base
2458 self._n_eof = n_eof
2459 end
2460 end