1 /*
2 This file is part of solidity.
3
4 solidity is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
8
9 solidity is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with solidity. If not, see <http://www.gnu.org/licenses/>.
16 */
17 // SPDX-License-Identifier: GPL-3.0
18 /**
19 * @author Christian <c@ethdev.com>
20 * @date 2014
21 * Implementation of the accept functions of AST nodes, included by AST.cpp to not clutter that
22 * file with these mechanical implementations.
23 */
24
25 #pragma once
26
27 #include <libsolidity/ast/AST.h>
28 #include <libsolidity/ast/ASTVisitor.h>
29
30 namespace solidity::frontend
31 {
32
accept(ASTVisitor & _visitor)33 void SourceUnit::accept(ASTVisitor& _visitor)
34 {
35 if (_visitor.visit(*this))
36 listAccept(m_nodes, _visitor);
37 _visitor.endVisit(*this);
38 }
39
accept(ASTConstVisitor & _visitor)40 void SourceUnit::accept(ASTConstVisitor& _visitor) const
41 {
42 if (_visitor.visit(*this))
43 listAccept(m_nodes, _visitor);
44 _visitor.endVisit(*this);
45 }
46
accept(ASTVisitor & _visitor)47 void PragmaDirective::accept(ASTVisitor& _visitor)
48 {
49 _visitor.visit(*this);
50 _visitor.endVisit(*this);
51 }
52
accept(ASTConstVisitor & _visitor)53 void PragmaDirective::accept(ASTConstVisitor& _visitor) const
54 {
55 _visitor.visit(*this);
56 _visitor.endVisit(*this);
57 }
58
accept(ASTVisitor & _visitor)59 void ImportDirective::accept(ASTVisitor& _visitor)
60 {
61 _visitor.visit(*this);
62 _visitor.endVisit(*this);
63 }
64
accept(ASTConstVisitor & _visitor)65 void ImportDirective::accept(ASTConstVisitor& _visitor) const
66 {
67 _visitor.visit(*this);
68 _visitor.endVisit(*this);
69 }
70
accept(ASTVisitor & _visitor)71 void StructuredDocumentation::accept(ASTVisitor& _visitor)
72 {
73 _visitor.visit(*this);
74 _visitor.endVisit(*this);
75 }
76
accept(ASTConstVisitor & _visitor)77 void StructuredDocumentation::accept(ASTConstVisitor& _visitor) const
78 {
79 _visitor.visit(*this);
80 _visitor.endVisit(*this);
81 }
82
accept(ASTVisitor & _visitor)83 void ContractDefinition::accept(ASTVisitor& _visitor)
84 {
85 if (_visitor.visit(*this))
86 {
87 if (m_documentation)
88 m_documentation->accept(_visitor);
89 listAccept(m_baseContracts, _visitor);
90 listAccept(m_subNodes, _visitor);
91 }
92 _visitor.endVisit(*this);
93 }
94
accept(ASTConstVisitor & _visitor)95 void ContractDefinition::accept(ASTConstVisitor& _visitor) const
96 {
97 if (_visitor.visit(*this))
98 {
99 if (m_documentation)
100 m_documentation->accept(_visitor);
101 listAccept(m_baseContracts, _visitor);
102 listAccept(m_subNodes, _visitor);
103 }
104 _visitor.endVisit(*this);
105 }
106
accept(ASTVisitor & _visitor)107 void IdentifierPath::accept(ASTVisitor& _visitor)
108 {
109 _visitor.visit(*this);
110 _visitor.endVisit(*this);
111 }
112
accept(ASTConstVisitor & _visitor)113 void IdentifierPath::accept(ASTConstVisitor& _visitor) const
114 {
115 _visitor.visit(*this);
116 _visitor.endVisit(*this);
117 }
118
accept(ASTVisitor & _visitor)119 void InheritanceSpecifier::accept(ASTVisitor& _visitor)
120 {
121 if (_visitor.visit(*this))
122 {
123 m_baseName->accept(_visitor);
124 if (m_arguments)
125 listAccept(*m_arguments, _visitor);
126 }
127 _visitor.endVisit(*this);
128 }
129
accept(ASTConstVisitor & _visitor)130 void InheritanceSpecifier::accept(ASTConstVisitor& _visitor) const
131 {
132 if (_visitor.visit(*this))
133 {
134 m_baseName->accept(_visitor);
135 if (m_arguments)
136 listAccept(*m_arguments, _visitor);
137 }
138 _visitor.endVisit(*this);
139 }
140
accept(ASTVisitor & _visitor)141 void EnumDefinition::accept(ASTVisitor& _visitor)
142 {
143 if (_visitor.visit(*this))
144 listAccept(m_members, _visitor);
145 _visitor.endVisit(*this);
146 }
147
accept(ASTConstVisitor & _visitor)148 void EnumDefinition::accept(ASTConstVisitor& _visitor) const
149 {
150 if (_visitor.visit(*this))
151 listAccept(m_members, _visitor);
152 _visitor.endVisit(*this);
153 }
154
accept(ASTVisitor & _visitor)155 void EnumValue::accept(ASTVisitor& _visitor)
156 {
157 _visitor.visit(*this);
158 _visitor.endVisit(*this);
159 }
160
accept(ASTConstVisitor & _visitor)161 void EnumValue::accept(ASTConstVisitor& _visitor) const
162 {
163 _visitor.visit(*this);
164 _visitor.endVisit(*this);
165 }
166
accept(ASTConstVisitor & _visitor)167 void UserDefinedValueTypeDefinition::accept(ASTConstVisitor& _visitor) const
168 {
169 if (_visitor.visit(*this))
170 {
171 if (m_underlyingType)
172 m_underlyingType->accept(_visitor);
173 }
174 _visitor.endVisit(*this);
175 }
176
accept(ASTVisitor & _visitor)177 void UserDefinedValueTypeDefinition::accept(ASTVisitor& _visitor)
178 {
179 if (_visitor.visit(*this))
180 {
181 if (m_underlyingType)
182 m_underlyingType->accept(_visitor);
183 }
184 _visitor.endVisit(*this);
185 }
186
accept(ASTVisitor & _visitor)187 void UsingForDirective::accept(ASTVisitor& _visitor)
188 {
189 if (_visitor.visit(*this))
190 {
191 m_libraryName->accept(_visitor);
192 if (m_typeName)
193 m_typeName->accept(_visitor);
194 }
195 _visitor.endVisit(*this);
196 }
197
accept(ASTConstVisitor & _visitor)198 void UsingForDirective::accept(ASTConstVisitor& _visitor) const
199 {
200 if (_visitor.visit(*this))
201 {
202 m_libraryName->accept(_visitor);
203 if (m_typeName)
204 m_typeName->accept(_visitor);
205 }
206 _visitor.endVisit(*this);
207 }
208
accept(ASTVisitor & _visitor)209 void StructDefinition::accept(ASTVisitor& _visitor)
210 {
211 if (_visitor.visit(*this))
212 listAccept(m_members, _visitor);
213 _visitor.endVisit(*this);
214 }
215
accept(ASTConstVisitor & _visitor)216 void StructDefinition::accept(ASTConstVisitor& _visitor) const
217 {
218 if (_visitor.visit(*this))
219 listAccept(m_members, _visitor);
220 _visitor.endVisit(*this);
221 }
222
accept(ASTVisitor & _visitor)223 void ParameterList::accept(ASTVisitor& _visitor)
224 {
225 if (_visitor.visit(*this))
226 listAccept(m_parameters, _visitor);
227 _visitor.endVisit(*this);
228 }
229
accept(ASTConstVisitor & _visitor)230 void ParameterList::accept(ASTConstVisitor& _visitor) const
231 {
232 if (_visitor.visit(*this))
233 listAccept(m_parameters, _visitor);
234 _visitor.endVisit(*this);
235 }
236
accept(ASTVisitor & _visitor)237 void OverrideSpecifier::accept(ASTVisitor& _visitor)
238 {
239 if (_visitor.visit(*this))
240 listAccept(m_overrides, _visitor);
241 _visitor.endVisit(*this);
242 }
243
accept(ASTConstVisitor & _visitor)244 void OverrideSpecifier::accept(ASTConstVisitor& _visitor) const
245 {
246 if (_visitor.visit(*this))
247 listAccept(m_overrides, _visitor);
248 _visitor.endVisit(*this);
249 }
250
accept(ASTVisitor & _visitor)251 void FunctionDefinition::accept(ASTVisitor& _visitor)
252 {
253 if (_visitor.visit(*this))
254 {
255 if (m_documentation)
256 m_documentation->accept(_visitor);
257 if (m_overrides)
258 m_overrides->accept(_visitor);
259 m_parameters->accept(_visitor);
260 if (m_returnParameters)
261 m_returnParameters->accept(_visitor);
262 listAccept(m_functionModifiers, _visitor);
263 if (m_body)
264 m_body->accept(_visitor);
265 }
266 _visitor.endVisit(*this);
267 }
268
accept(ASTConstVisitor & _visitor)269 void FunctionDefinition::accept(ASTConstVisitor& _visitor) const
270 {
271 if (_visitor.visit(*this))
272 {
273 if (m_documentation)
274 m_documentation->accept(_visitor);
275 if (m_overrides)
276 m_overrides->accept(_visitor);
277 m_parameters->accept(_visitor);
278 if (m_returnParameters)
279 m_returnParameters->accept(_visitor);
280 listAccept(m_functionModifiers, _visitor);
281 if (m_body)
282 m_body->accept(_visitor);
283 }
284 _visitor.endVisit(*this);
285 }
286
accept(ASTVisitor & _visitor)287 void VariableDeclaration::accept(ASTVisitor& _visitor)
288 {
289 if (_visitor.visit(*this))
290 {
291 if (m_typeName)
292 m_typeName->accept(_visitor);
293 if (m_overrides)
294 m_overrides->accept(_visitor);
295 if (m_value)
296 m_value->accept(_visitor);
297 }
298 _visitor.endVisit(*this);
299 }
300
accept(ASTConstVisitor & _visitor)301 void VariableDeclaration::accept(ASTConstVisitor& _visitor) const
302 {
303 if (_visitor.visit(*this))
304 {
305 if (m_typeName)
306 m_typeName->accept(_visitor);
307 if (m_overrides)
308 m_overrides->accept(_visitor);
309 if (m_value)
310 m_value->accept(_visitor);
311 }
312 _visitor.endVisit(*this);
313 }
314
accept(ASTVisitor & _visitor)315 void ModifierDefinition::accept(ASTVisitor& _visitor)
316 {
317 if (_visitor.visit(*this))
318 {
319 if (m_documentation)
320 m_documentation->accept(_visitor);
321 m_parameters->accept(_visitor);
322 if (m_overrides)
323 m_overrides->accept(_visitor);
324 if (m_body)
325 m_body->accept(_visitor);
326 }
327 _visitor.endVisit(*this);
328 }
329
accept(ASTConstVisitor & _visitor)330 void ModifierDefinition::accept(ASTConstVisitor& _visitor) const
331 {
332 if (_visitor.visit(*this))
333 {
334 if (m_documentation)
335 m_documentation->accept(_visitor);
336 m_parameters->accept(_visitor);
337 if (m_overrides)
338 m_overrides->accept(_visitor);
339 if (m_body)
340 m_body->accept(_visitor);
341 }
342 _visitor.endVisit(*this);
343 }
344
accept(ASTVisitor & _visitor)345 void ModifierInvocation::accept(ASTVisitor& _visitor)
346 {
347 if (_visitor.visit(*this))
348 {
349 m_modifierName->accept(_visitor);
350 if (m_arguments)
351 listAccept(*m_arguments, _visitor);
352 }
353 _visitor.endVisit(*this);
354 }
355
accept(ASTConstVisitor & _visitor)356 void ModifierInvocation::accept(ASTConstVisitor& _visitor) const
357 {
358 if (_visitor.visit(*this))
359 {
360 m_modifierName->accept(_visitor);
361 if (m_arguments)
362 listAccept(*m_arguments, _visitor);
363 }
364 _visitor.endVisit(*this);
365 }
366
accept(ASTVisitor & _visitor)367 void EventDefinition::accept(ASTVisitor& _visitor)
368 {
369 if (_visitor.visit(*this))
370 {
371 if (m_documentation)
372 m_documentation->accept(_visitor);
373 m_parameters->accept(_visitor);
374 }
375 _visitor.endVisit(*this);
376 }
377
accept(ASTConstVisitor & _visitor)378 void EventDefinition::accept(ASTConstVisitor& _visitor) const
379 {
380 if (_visitor.visit(*this))
381 {
382 if (m_documentation)
383 m_documentation->accept(_visitor);
384 m_parameters->accept(_visitor);
385 }
386 _visitor.endVisit(*this);
387 }
388
accept(ASTVisitor & _visitor)389 void ErrorDefinition::accept(ASTVisitor& _visitor)
390 {
391 if (_visitor.visit(*this))
392 {
393 if (m_documentation)
394 m_documentation->accept(_visitor);
395 m_parameters->accept(_visitor);
396 }
397 _visitor.endVisit(*this);
398 }
399
accept(ASTConstVisitor & _visitor)400 void ErrorDefinition::accept(ASTConstVisitor& _visitor) const
401 {
402 if (_visitor.visit(*this))
403 {
404 if (m_documentation)
405 m_documentation->accept(_visitor);
406 m_parameters->accept(_visitor);
407 }
408 _visitor.endVisit(*this);
409 }
410
accept(ASTVisitor & _visitor)411 void ElementaryTypeName::accept(ASTVisitor& _visitor)
412 {
413 _visitor.visit(*this);
414 _visitor.endVisit(*this);
415 }
416
accept(ASTConstVisitor & _visitor)417 void ElementaryTypeName::accept(ASTConstVisitor& _visitor) const
418 {
419 _visitor.visit(*this);
420 _visitor.endVisit(*this);
421 }
422
accept(ASTVisitor & _visitor)423 void UserDefinedTypeName::accept(ASTVisitor& _visitor)
424 {
425 if (_visitor.visit(*this))
426 this->pathNode().accept(_visitor);
427 _visitor.endVisit(*this);
428 }
429
accept(ASTConstVisitor & _visitor)430 void UserDefinedTypeName::accept(ASTConstVisitor& _visitor) const
431 {
432 if (_visitor.visit(*this))
433 this->pathNode().accept(_visitor);
434 _visitor.endVisit(*this);
435 }
436
accept(ASTVisitor & _visitor)437 void FunctionTypeName::accept(ASTVisitor& _visitor)
438 {
439 if (_visitor.visit(*this))
440 {
441 m_parameterTypes->accept(_visitor);
442 m_returnTypes->accept(_visitor);
443 }
444 _visitor.endVisit(*this);
445 }
446
accept(ASTConstVisitor & _visitor)447 void FunctionTypeName::accept(ASTConstVisitor& _visitor) const
448 {
449 if (_visitor.visit(*this))
450 {
451 m_parameterTypes->accept(_visitor);
452 m_returnTypes->accept(_visitor);
453 }
454 _visitor.endVisit(*this);
455 }
456
accept(ASTVisitor & _visitor)457 void Mapping::accept(ASTVisitor& _visitor)
458 {
459 if (_visitor.visit(*this))
460 {
461 m_keyType->accept(_visitor);
462 m_valueType->accept(_visitor);
463 }
464 _visitor.endVisit(*this);
465 }
466
accept(ASTConstVisitor & _visitor)467 void Mapping::accept(ASTConstVisitor& _visitor) const
468 {
469 if (_visitor.visit(*this))
470 {
471 m_keyType->accept(_visitor);
472 m_valueType->accept(_visitor);
473 }
474 _visitor.endVisit(*this);
475 }
476
accept(ASTVisitor & _visitor)477 void ArrayTypeName::accept(ASTVisitor& _visitor)
478 {
479 if (_visitor.visit(*this))
480 {
481 m_baseType->accept(_visitor);
482 if (m_length)
483 m_length->accept(_visitor);
484 }
485 _visitor.endVisit(*this);
486 }
487
accept(ASTConstVisitor & _visitor)488 void ArrayTypeName::accept(ASTConstVisitor& _visitor) const
489 {
490 if (_visitor.visit(*this))
491 {
492 m_baseType->accept(_visitor);
493 if (m_length)
494 m_length->accept(_visitor);
495 }
496 _visitor.endVisit(*this);
497 }
498
accept(ASTVisitor & _visitor)499 void InlineAssembly::accept(ASTVisitor& _visitor)
500 {
501 _visitor.visit(*this);
502 _visitor.endVisit(*this);
503 }
504
accept(ASTConstVisitor & _visitor)505 void InlineAssembly::accept(ASTConstVisitor& _visitor) const
506 {
507 _visitor.visit(*this);
508 _visitor.endVisit(*this);
509 }
510
accept(ASTVisitor & _visitor)511 void Block::accept(ASTVisitor& _visitor)
512 {
513 if (_visitor.visit(*this))
514 listAccept(m_statements, _visitor);
515 _visitor.endVisit(*this);
516 }
517
accept(ASTConstVisitor & _visitor)518 void Block::accept(ASTConstVisitor& _visitor) const
519 {
520 if (_visitor.visit(*this))
521 listAccept(m_statements, _visitor);
522 _visitor.endVisit(*this);
523 }
524
accept(ASTVisitor & _visitor)525 void PlaceholderStatement::accept(ASTVisitor& _visitor)
526 {
527 _visitor.visit(*this);
528 _visitor.endVisit(*this);
529 }
530
accept(ASTConstVisitor & _visitor)531 void PlaceholderStatement::accept(ASTConstVisitor& _visitor) const
532 {
533 _visitor.visit(*this);
534 _visitor.endVisit(*this);
535 }
536
accept(ASTVisitor & _visitor)537 void IfStatement::accept(ASTVisitor& _visitor)
538 {
539 if (_visitor.visit(*this))
540 {
541 m_condition->accept(_visitor);
542 m_trueBody->accept(_visitor);
543 if (m_falseBody)
544 m_falseBody->accept(_visitor);
545 }
546 _visitor.endVisit(*this);
547 }
548
accept(ASTConstVisitor & _visitor)549 void IfStatement::accept(ASTConstVisitor& _visitor) const
550 {
551 if (_visitor.visit(*this))
552 {
553 m_condition->accept(_visitor);
554 m_trueBody->accept(_visitor);
555 if (m_falseBody)
556 m_falseBody->accept(_visitor);
557 }
558 _visitor.endVisit(*this);
559 }
560
accept(ASTVisitor & _visitor)561 void TryCatchClause::accept(ASTVisitor& _visitor)
562 {
563 if (_visitor.visit(*this))
564 {
565 if (m_parameters)
566 m_parameters->accept(_visitor);
567 m_block->accept(_visitor);
568 }
569 _visitor.endVisit(*this);
570 }
571
accept(ASTConstVisitor & _visitor)572 void TryCatchClause::accept(ASTConstVisitor& _visitor) const
573 {
574 if (_visitor.visit(*this))
575 {
576 if (m_parameters)
577 m_parameters->accept(_visitor);
578 m_block->accept(_visitor);
579 }
580 _visitor.endVisit(*this);
581 }
582
accept(ASTVisitor & _visitor)583 void TryStatement::accept(ASTVisitor& _visitor)
584 {
585 if (_visitor.visit(*this))
586 {
587 m_externalCall->accept(_visitor);
588 listAccept(m_clauses, _visitor);
589 }
590 _visitor.endVisit(*this);
591 }
592
accept(ASTConstVisitor & _visitor)593 void TryStatement::accept(ASTConstVisitor& _visitor) const
594 {
595 if (_visitor.visit(*this))
596 {
597 m_externalCall->accept(_visitor);
598 listAccept(m_clauses, _visitor);
599 }
600 _visitor.endVisit(*this);
601 }
602
accept(ASTVisitor & _visitor)603 void WhileStatement::accept(ASTVisitor& _visitor)
604 {
605 if (_visitor.visit(*this))
606 {
607 m_condition->accept(_visitor);
608 m_body->accept(_visitor);
609 }
610 _visitor.endVisit(*this);
611 }
612
accept(ASTConstVisitor & _visitor)613 void WhileStatement::accept(ASTConstVisitor& _visitor) const
614 {
615 if (_visitor.visit(*this))
616 {
617 m_condition->accept(_visitor);
618 m_body->accept(_visitor);
619 }
620 _visitor.endVisit(*this);
621 }
622
accept(ASTVisitor & _visitor)623 void ForStatement::accept(ASTVisitor& _visitor)
624 {
625 if (_visitor.visit(*this))
626 {
627 if (m_initExpression)
628 m_initExpression->accept(_visitor);
629 if (m_condExpression)
630 m_condExpression->accept(_visitor);
631 if (m_loopExpression)
632 m_loopExpression->accept(_visitor);
633 m_body->accept(_visitor);
634 }
635 _visitor.endVisit(*this);
636 }
637
accept(ASTConstVisitor & _visitor)638 void ForStatement::accept(ASTConstVisitor& _visitor) const
639 {
640 if (_visitor.visit(*this))
641 {
642 if (m_initExpression)
643 m_initExpression->accept(_visitor);
644 if (m_condExpression)
645 m_condExpression->accept(_visitor);
646 if (m_loopExpression)
647 m_loopExpression->accept(_visitor);
648 m_body->accept(_visitor);
649 }
650 _visitor.endVisit(*this);
651 }
652
accept(ASTVisitor & _visitor)653 void Continue::accept(ASTVisitor& _visitor)
654 {
655 _visitor.visit(*this);
656 _visitor.endVisit(*this);
657 }
658
accept(ASTConstVisitor & _visitor)659 void Continue::accept(ASTConstVisitor& _visitor) const
660 {
661 _visitor.visit(*this);
662 _visitor.endVisit(*this);
663 }
664
accept(ASTVisitor & _visitor)665 void Break::accept(ASTVisitor& _visitor)
666 {
667 _visitor.visit(*this);
668 _visitor.endVisit(*this);
669 }
670
accept(ASTConstVisitor & _visitor)671 void Break::accept(ASTConstVisitor& _visitor) const
672 {
673 _visitor.visit(*this);
674 _visitor.endVisit(*this);
675 }
676
accept(ASTVisitor & _visitor)677 void Return::accept(ASTVisitor& _visitor)
678 {
679 if (_visitor.visit(*this))
680 if (m_expression)
681 m_expression->accept(_visitor);
682 _visitor.endVisit(*this);
683 }
684
accept(ASTConstVisitor & _visitor)685 void Return::accept(ASTConstVisitor& _visitor) const
686 {
687 if (_visitor.visit(*this))
688 if (m_expression)
689 m_expression->accept(_visitor);
690 _visitor.endVisit(*this);
691 }
692
accept(ASTVisitor & _visitor)693 void Throw::accept(ASTVisitor& _visitor)
694 {
695 _visitor.visit(*this);
696 _visitor.endVisit(*this);
697 }
698
accept(ASTConstVisitor & _visitor)699 void Throw::accept(ASTConstVisitor& _visitor) const
700 {
701 _visitor.visit(*this);
702 _visitor.endVisit(*this);
703 }
704
accept(ASTVisitor & _visitor)705 void RevertStatement::accept(ASTVisitor& _visitor)
706 {
707 if (_visitor.visit(*this))
708 m_errorCall->accept(_visitor);
709 _visitor.endVisit(*this);
710 }
711
accept(ASTConstVisitor & _visitor)712 void RevertStatement::accept(ASTConstVisitor& _visitor) const
713 {
714 if (_visitor.visit(*this))
715 m_errorCall->accept(_visitor);
716 _visitor.endVisit(*this);
717 }
718
accept(ASTVisitor & _visitor)719 void EmitStatement::accept(ASTVisitor& _visitor)
720 {
721 if (_visitor.visit(*this))
722 m_eventCall->accept(_visitor);
723 _visitor.endVisit(*this);
724 }
725
accept(ASTConstVisitor & _visitor)726 void EmitStatement::accept(ASTConstVisitor& _visitor) const
727 {
728 if (_visitor.visit(*this))
729 m_eventCall->accept(_visitor);
730 _visitor.endVisit(*this);
731 }
732
accept(ASTVisitor & _visitor)733 void ExpressionStatement::accept(ASTVisitor& _visitor)
734 {
735 if (_visitor.visit(*this))
736 if (m_expression)
737 m_expression->accept(_visitor);
738 _visitor.endVisit(*this);
739 }
740
accept(ASTConstVisitor & _visitor)741 void ExpressionStatement::accept(ASTConstVisitor& _visitor) const
742 {
743 if (_visitor.visit(*this))
744 if (m_expression)
745 m_expression->accept(_visitor);
746 _visitor.endVisit(*this);
747 }
748
accept(ASTVisitor & _visitor)749 void VariableDeclarationStatement::accept(ASTVisitor& _visitor)
750 {
751 if (_visitor.visit(*this))
752 {
753 for (ASTPointer<VariableDeclaration> const& var: m_variables)
754 if (var)
755 var->accept(_visitor);
756 if (m_initialValue)
757 m_initialValue->accept(_visitor);
758 }
759 _visitor.endVisit(*this);
760 }
761
accept(ASTConstVisitor & _visitor)762 void VariableDeclarationStatement::accept(ASTConstVisitor& _visitor) const
763 {
764 if (_visitor.visit(*this))
765 {
766 for (ASTPointer<VariableDeclaration> const& var: m_variables)
767 if (var)
768 var->accept(_visitor);
769 if (m_initialValue)
770 m_initialValue->accept(_visitor);
771 }
772 _visitor.endVisit(*this);
773 }
774
accept(ASTVisitor & _visitor)775 void Conditional::accept(ASTVisitor& _visitor)
776 {
777 if (_visitor.visit(*this))
778 {
779 m_condition->accept(_visitor);
780 m_trueExpression->accept(_visitor);
781 m_falseExpression->accept(_visitor);
782 }
783 _visitor.endVisit(*this);
784 }
785
accept(ASTConstVisitor & _visitor)786 void Conditional::accept(ASTConstVisitor& _visitor) const
787 {
788 if (_visitor.visit(*this))
789 {
790 m_condition->accept(_visitor);
791 m_trueExpression->accept(_visitor);
792 m_falseExpression->accept(_visitor);
793 }
794 _visitor.endVisit(*this);
795 }
796
accept(ASTVisitor & _visitor)797 void Assignment::accept(ASTVisitor& _visitor)
798 {
799 if (_visitor.visit(*this))
800 {
801 m_leftHandSide->accept(_visitor);
802 m_rightHandSide->accept(_visitor);
803 }
804 _visitor.endVisit(*this);
805 }
806
accept(ASTConstVisitor & _visitor)807 void Assignment::accept(ASTConstVisitor& _visitor) const
808 {
809 if (_visitor.visit(*this))
810 {
811 m_leftHandSide->accept(_visitor);
812 m_rightHandSide->accept(_visitor);
813 }
814 _visitor.endVisit(*this);
815 }
816
accept(ASTVisitor & _visitor)817 void TupleExpression::accept(ASTVisitor& _visitor)
818 {
819 if (_visitor.visit(*this))
820 for (auto const& component: m_components)
821 if (component)
822 component->accept(_visitor);
823 _visitor.endVisit(*this);
824 }
825
accept(ASTConstVisitor & _visitor)826 void TupleExpression::accept(ASTConstVisitor& _visitor) const
827 {
828 if (_visitor.visit(*this))
829 for (auto const& component: m_components)
830 if (component)
831 component->accept(_visitor);
832 _visitor.endVisit(*this);
833 }
834
accept(ASTVisitor & _visitor)835 void UnaryOperation::accept(ASTVisitor& _visitor)
836 {
837 if (_visitor.visit(*this))
838 m_subExpression->accept(_visitor);
839 _visitor.endVisit(*this);
840 }
841
accept(ASTConstVisitor & _visitor)842 void UnaryOperation::accept(ASTConstVisitor& _visitor) const
843 {
844 if (_visitor.visit(*this))
845 m_subExpression->accept(_visitor);
846 _visitor.endVisit(*this);
847 }
848
accept(ASTVisitor & _visitor)849 void BinaryOperation::accept(ASTVisitor& _visitor)
850 {
851 if (_visitor.visit(*this))
852 {
853 m_left->accept(_visitor);
854 m_right->accept(_visitor);
855 }
856 _visitor.endVisit(*this);
857 }
858
accept(ASTConstVisitor & _visitor)859 void BinaryOperation::accept(ASTConstVisitor& _visitor) const
860 {
861 if (_visitor.visit(*this))
862 {
863 m_left->accept(_visitor);
864 m_right->accept(_visitor);
865 }
866 _visitor.endVisit(*this);
867 }
868
accept(ASTVisitor & _visitor)869 void FunctionCall::accept(ASTVisitor& _visitor)
870 {
871 if (_visitor.visit(*this))
872 {
873 m_expression->accept(_visitor);
874 listAccept(m_arguments, _visitor);
875 }
876 _visitor.endVisit(*this);
877 }
878
accept(ASTConstVisitor & _visitor)879 void FunctionCall::accept(ASTConstVisitor& _visitor) const
880 {
881 if (_visitor.visit(*this))
882 {
883 m_expression->accept(_visitor);
884 listAccept(m_arguments, _visitor);
885 }
886 _visitor.endVisit(*this);
887 }
888
accept(ASTVisitor & _visitor)889 void FunctionCallOptions::accept(ASTVisitor& _visitor)
890 {
891 if (_visitor.visit(*this))
892 {
893 m_expression->accept(_visitor);
894 listAccept(m_options, _visitor);
895 }
896 _visitor.endVisit(*this);
897 }
898
accept(ASTConstVisitor & _visitor)899 void FunctionCallOptions::accept(ASTConstVisitor& _visitor) const
900 {
901 if (_visitor.visit(*this))
902 {
903 m_expression->accept(_visitor);
904 listAccept(m_options, _visitor);
905 }
906 _visitor.endVisit(*this);
907 }
908
accept(ASTVisitor & _visitor)909 void NewExpression::accept(ASTVisitor& _visitor)
910 {
911 if (_visitor.visit(*this))
912 m_typeName->accept(_visitor);
913 _visitor.endVisit(*this);
914 }
915
accept(ASTConstVisitor & _visitor)916 void NewExpression::accept(ASTConstVisitor& _visitor) const
917 {
918 if (_visitor.visit(*this))
919 m_typeName->accept(_visitor);
920 _visitor.endVisit(*this);
921 }
922
accept(ASTVisitor & _visitor)923 void MemberAccess::accept(ASTVisitor& _visitor)
924 {
925 if (_visitor.visit(*this))
926 m_expression->accept(_visitor);
927 _visitor.endVisit(*this);
928 }
929
accept(ASTConstVisitor & _visitor)930 void MemberAccess::accept(ASTConstVisitor& _visitor) const
931 {
932 if (_visitor.visit(*this))
933 m_expression->accept(_visitor);
934 _visitor.endVisit(*this);
935 }
936
accept(ASTVisitor & _visitor)937 void IndexAccess::accept(ASTVisitor& _visitor)
938 {
939 if (_visitor.visit(*this))
940 {
941 m_base->accept(_visitor);
942 if (m_index)
943 m_index->accept(_visitor);
944 }
945 _visitor.endVisit(*this);
946 }
947
accept(ASTConstVisitor & _visitor)948 void IndexAccess::accept(ASTConstVisitor& _visitor) const
949 {
950 if (_visitor.visit(*this))
951 {
952 m_base->accept(_visitor);
953 if (m_index)
954 m_index->accept(_visitor);
955 }
956 _visitor.endVisit(*this);
957 }
958
accept(ASTVisitor & _visitor)959 void IndexRangeAccess::accept(ASTVisitor& _visitor)
960 {
961 if (_visitor.visit(*this))
962 {
963 m_base->accept(_visitor);
964 if (m_start)
965 m_start->accept(_visitor);
966 if (m_end)
967 m_end->accept(_visitor);
968 }
969 _visitor.endVisit(*this);
970 }
971
accept(ASTConstVisitor & _visitor)972 void IndexRangeAccess::accept(ASTConstVisitor& _visitor) const
973 {
974 if (_visitor.visit(*this))
975 {
976 m_base->accept(_visitor);
977 if (m_start)
978 m_start->accept(_visitor);
979 if (m_end)
980 m_end->accept(_visitor);
981 }
982 _visitor.endVisit(*this);
983 }
984
accept(ASTVisitor & _visitor)985 void Identifier::accept(ASTVisitor& _visitor)
986 {
987 _visitor.visit(*this);
988 _visitor.endVisit(*this);
989 }
990
accept(ASTConstVisitor & _visitor)991 void Identifier::accept(ASTConstVisitor& _visitor) const
992 {
993 _visitor.visit(*this);
994 _visitor.endVisit(*this);
995 }
996
accept(ASTVisitor & _visitor)997 void ElementaryTypeNameExpression::accept(ASTVisitor& _visitor)
998 {
999 _visitor.visit(*this);
1000 _visitor.endVisit(*this);
1001 }
1002
accept(ASTConstVisitor & _visitor)1003 void ElementaryTypeNameExpression::accept(ASTConstVisitor& _visitor) const
1004 {
1005 _visitor.visit(*this);
1006 _visitor.endVisit(*this);
1007 }
1008
accept(ASTVisitor & _visitor)1009 void Literal::accept(ASTVisitor& _visitor)
1010 {
1011 _visitor.visit(*this);
1012 _visitor.endVisit(*this);
1013 }
1014
accept(ASTConstVisitor & _visitor)1015 void Literal::accept(ASTConstVisitor& _visitor) const
1016 {
1017 _visitor.visit(*this);
1018 _visitor.endVisit(*this);
1019 }
1020
1021 }
1022