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