Coverage Report

Created: 2026-06-30 07:08

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/solidity/libsolidity/ast/AST_accept.h
Line
Count
Source
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
33
void SourceUnit::accept(ASTVisitor& _visitor)
34
23.0k
{
35
23.0k
  if (_visitor.visit(*this))
36
23.0k
    listAccept(m_nodes, _visitor);
37
23.0k
  _visitor.endVisit(*this);
38
23.0k
}
39
40
void SourceUnit::accept(ASTConstVisitor& _visitor) const
41
283k
{
42
283k
  if (_visitor.visit(*this))
43
283k
    listAccept(m_nodes, _visitor);
44
283k
  _visitor.endVisit(*this);
45
283k
}
46
47
void PragmaDirective::accept(ASTVisitor& _visitor)
48
27.0k
{
49
27.0k
  _visitor.visit(*this);
50
27.0k
  _visitor.endVisit(*this);
51
27.0k
}
52
53
void PragmaDirective::accept(ASTConstVisitor& _visitor) const
54
360k
{
55
360k
  _visitor.visit(*this);
56
360k
  _visitor.endVisit(*this);
57
360k
}
58
59
void ImportDirective::accept(ASTVisitor& _visitor)
60
1.10k
{
61
1.10k
  if (_visitor.visit(*this))
62
0
    for (SymbolAlias const& symbolAlias: symbolAliases())
63
0
      if (symbolAlias.symbol)
64
0
        symbolAlias.symbol->accept(_visitor);
65
1.10k
  _visitor.endVisit(*this);
66
1.10k
}
67
68
void ImportDirective::accept(ASTConstVisitor& _visitor) const
69
15.9k
{
70
15.9k
  if (_visitor.visit(*this))
71
12.6k
    for (SymbolAlias const& symbolAlias: symbolAliases())
72
4.17k
      if (symbolAlias.symbol)
73
4.17k
        symbolAlias.symbol->accept(_visitor);
74
15.9k
  _visitor.endVisit(*this);
75
15.9k
}
76
77
void StructuredDocumentation::accept(ASTVisitor& _visitor)
78
1.32k
{
79
1.32k
  _visitor.visit(*this);
80
1.32k
  _visitor.endVisit(*this);
81
1.32k
}
82
83
void StructuredDocumentation::accept(ASTConstVisitor& _visitor) const
84
17.7k
{
85
17.7k
  _visitor.visit(*this);
86
17.7k
  _visitor.endVisit(*this);
87
17.7k
}
88
89
void ContractDefinition::accept(ASTVisitor& _visitor)
90
22.8k
{
91
22.8k
  if (_visitor.visit(*this))
92
22.8k
  {
93
22.8k
    if (m_documentation)
94
101
      m_documentation->accept(_visitor);
95
22.8k
    listAccept(m_baseContracts, _visitor);
96
22.8k
    if (m_storageLayoutSpecifier)
97
0
      m_storageLayoutSpecifier->accept(_visitor);
98
22.8k
    listAccept(m_subNodes, _visitor);
99
22.8k
  }
100
22.8k
  _visitor.endVisit(*this);
101
22.8k
}
102
103
void ContractDefinition::accept(ASTConstVisitor& _visitor) const
104
321k
{
105
321k
  if (_visitor.visit(*this))
106
271k
  {
107
271k
    if (m_documentation)
108
1.02k
      m_documentation->accept(_visitor);
109
271k
    listAccept(m_baseContracts, _visitor);
110
271k
    if (m_storageLayoutSpecifier)
111
0
      m_storageLayoutSpecifier->accept(_visitor);
112
271k
    listAccept(m_subNodes, _visitor);
113
271k
  }
114
321k
  _visitor.endVisit(*this);
115
321k
}
116
117
void IdentifierPath::accept(ASTVisitor& _visitor)
118
29.0k
{
119
29.0k
  _visitor.visit(*this);
120
29.0k
  _visitor.endVisit(*this);
121
29.0k
}
122
123
void IdentifierPath::accept(ASTConstVisitor& _visitor) const
124
402k
{
125
402k
  _visitor.visit(*this);
126
402k
  _visitor.endVisit(*this);
127
402k
}
128
129
void InheritanceSpecifier::accept(ASTVisitor& _visitor)
130
4.03k
{
131
4.03k
  if (_visitor.visit(*this))
132
4.03k
  {
133
4.03k
    m_baseName->accept(_visitor);
134
4.03k
    if (m_arguments)
135
144
      listAccept(*m_arguments, _visitor);
136
4.03k
  }
137
4.03k
  _visitor.endVisit(*this);
138
4.03k
}
139
140
void InheritanceSpecifier::accept(ASTConstVisitor& _visitor) const
141
44.6k
{
142
44.6k
  if (_visitor.visit(*this))
143
44.5k
  {
144
44.5k
    m_baseName->accept(_visitor);
145
44.5k
    if (m_arguments)
146
1.42k
      listAccept(*m_arguments, _visitor);
147
44.5k
  }
148
44.6k
  _visitor.endVisit(*this);
149
44.6k
}
150
151
void EnumDefinition::accept(ASTVisitor& _visitor)
152
340
{
153
340
  if (_visitor.visit(*this))
154
340
    listAccept(m_members, _visitor);
155
340
  _visitor.endVisit(*this);
156
340
}
157
158
void EnumDefinition::accept(ASTConstVisitor& _visitor) const
159
4.22k
{
160
4.22k
  if (_visitor.visit(*this))
161
3.90k
    listAccept(m_members, _visitor);
162
4.22k
  _visitor.endVisit(*this);
163
4.22k
}
164
165
void EnumValue::accept(ASTVisitor& _visitor)
166
1.97k
{
167
1.97k
  _visitor.visit(*this);
168
1.97k
  _visitor.endVisit(*this);
169
1.97k
}
170
171
void EnumValue::accept(ASTConstVisitor& _visitor) const
172
19.2k
{
173
19.2k
  _visitor.visit(*this);
174
19.2k
  _visitor.endVisit(*this);
175
19.2k
}
176
177
void UserDefinedValueTypeDefinition::accept(ASTConstVisitor& _visitor) const
178
5.89k
{
179
5.89k
  if (_visitor.visit(*this))
180
5.89k
  {
181
5.89k
    if (m_underlyingType)
182
5.89k
      m_underlyingType->accept(_visitor);
183
5.89k
  }
184
5.89k
  _visitor.endVisit(*this);
185
5.89k
}
186
187
void UserDefinedValueTypeDefinition::accept(ASTVisitor& _visitor)
188
457
{
189
457
  if (_visitor.visit(*this))
190
457
  {
191
457
    if (m_underlyingType)
192
457
      m_underlyingType->accept(_visitor);
193
457
  }
194
457
  _visitor.endVisit(*this);
195
457
}
196
197
void UsingForDirective::accept(ASTVisitor& _visitor)
198
584
{
199
584
  if (_visitor.visit(*this))
200
584
  {
201
584
    listAccept(m_functionsOrLibrary, _visitor);
202
584
    if (m_typeName)
203
476
      m_typeName->accept(_visitor);
204
584
  }
205
584
  _visitor.endVisit(*this);
206
584
}
207
208
void UsingForDirective::accept(ASTConstVisitor& _visitor) const
209
7.41k
{
210
7.41k
  if (_visitor.visit(*this))
211
6.04k
  {
212
6.04k
    listAccept(m_functionsOrLibrary, _visitor);
213
6.04k
    if (m_typeName)
214
4.77k
      m_typeName->accept(_visitor);
215
6.04k
  }
216
7.41k
  _visitor.endVisit(*this);
217
7.41k
}
218
219
void StructDefinition::accept(ASTVisitor& _visitor)
220
9.37k
{
221
9.37k
  if (_visitor.visit(*this))
222
9.37k
    listAccept(m_members, _visitor);
223
9.37k
  _visitor.endVisit(*this);
224
9.37k
}
225
226
void StructDefinition::accept(ASTConstVisitor& _visitor) const
227
133k
{
228
133k
  if (_visitor.visit(*this))
229
115k
    listAccept(m_members, _visitor);
230
133k
  _visitor.endVisit(*this);
231
133k
}
232
233
void ParameterList::accept(ASTVisitor& _visitor)
234
58.3k
{
235
58.3k
  if (_visitor.visit(*this))
236
58.3k
    listAccept(m_parameters, _visitor);
237
58.3k
  _visitor.endVisit(*this);
238
58.3k
}
239
240
void ParameterList::accept(ASTConstVisitor& _visitor) const
241
1.93M
{
242
1.93M
  if (_visitor.visit(*this))
243
1.93M
    listAccept(m_parameters, _visitor);
244
1.93M
  _visitor.endVisit(*this);
245
1.93M
}
246
247
void OverrideSpecifier::accept(ASTVisitor& _visitor)
248
906
{
249
906
  if (_visitor.visit(*this))
250
906
    listAccept(m_overrides, _visitor);
251
906
  _visitor.endVisit(*this);
252
906
}
253
254
void OverrideSpecifier::accept(ASTConstVisitor& _visitor) const
255
18.9k
{
256
18.9k
  if (_visitor.visit(*this))
257
18.9k
    listAccept(m_overrides, _visitor);
258
18.9k
  _visitor.endVisit(*this);
259
18.9k
}
260
261
void FunctionDefinition::accept(ASTVisitor& _visitor)
262
24.8k
{
263
24.8k
  if (_visitor.visit(*this))
264
24.8k
  {
265
24.8k
    if (m_documentation)
266
1.07k
      m_documentation->accept(_visitor);
267
24.8k
    if (m_overrides)
268
544
      m_overrides->accept(_visitor);
269
24.8k
    m_parameters->accept(_visitor);
270
24.8k
    if (m_returnParameters)
271
24.7k
      m_returnParameters->accept(_visitor);
272
24.8k
    if (m_experimentalReturnExpression)
273
4
      m_experimentalReturnExpression->accept(_visitor);
274
24.8k
    listAccept(m_functionModifiers, _visitor);
275
24.8k
    if (m_body)
276
23.3k
      m_body->accept(_visitor);
277
24.8k
  }
278
24.8k
  _visitor.endVisit(*this);
279
24.8k
}
280
281
void FunctionDefinition::accept(ASTConstVisitor& _visitor) const
282
970k
{
283
970k
  if (_visitor.visit(*this))
284
860k
  {
285
860k
    if (m_documentation)
286
14.9k
      m_documentation->accept(_visitor);
287
860k
    if (m_overrides)
288
15.7k
      m_overrides->accept(_visitor);
289
860k
    m_parameters->accept(_visitor);
290
860k
    if (m_returnParameters)
291
860k
      m_returnParameters->accept(_visitor);
292
860k
    if (m_experimentalReturnExpression)
293
16
      m_experimentalReturnExpression->accept(_visitor);
294
860k
    listAccept(m_functionModifiers, _visitor);
295
860k
    if (m_body)
296
843k
      m_body->accept(_visitor);
297
860k
  }
298
970k
  _visitor.endVisit(*this);
299
970k
}
300
301
void VariableDeclaration::accept(ASTVisitor& _visitor)
302
82.8k
{
303
82.8k
  if (_visitor.visit(*this))
304
82.8k
  {
305
82.8k
    if (m_typeName)
306
82.6k
      m_typeName->accept(_visitor);
307
82.8k
    if (m_typeExpression)
308
93
      m_typeExpression->accept(_visitor);
309
82.8k
    if (m_overrides)
310
183
      m_overrides->accept(_visitor);
311
82.8k
    if (m_value)
312
4.48k
      m_value->accept(_visitor);
313
82.8k
  }
314
82.8k
  _visitor.endVisit(*this);
315
82.8k
}
316
317
void VariableDeclaration::accept(ASTConstVisitor& _visitor) const
318
2.00M
{
319
2.00M
  if (_visitor.visit(*this))
320
1.78M
  {
321
1.78M
    if (m_typeName)
322
1.78M
      m_typeName->accept(_visitor);
323
1.78M
    if (m_typeExpression)
324
242
      m_typeExpression->accept(_visitor);
325
1.78M
    if (m_overrides)
326
1.31k
      m_overrides->accept(_visitor);
327
1.78M
    if (m_value)
328
53.1k
      m_value->accept(_visitor);
329
1.78M
  }
330
2.00M
  _visitor.endVisit(*this);
331
2.00M
}
332
333
void ModifierDefinition::accept(ASTVisitor& _visitor)
334
2.38k
{
335
2.38k
  if (_visitor.visit(*this))
336
2.38k
  {
337
2.38k
    if (m_documentation)
338
4
      m_documentation->accept(_visitor);
339
2.38k
    m_parameters->accept(_visitor);
340
2.38k
    if (m_overrides)
341
179
      m_overrides->accept(_visitor);
342
2.38k
    if (m_body)
343
793
      m_body->accept(_visitor);
344
2.38k
  }
345
2.38k
  _visitor.endVisit(*this);
346
2.38k
}
347
348
void ModifierDefinition::accept(ASTConstVisitor& _visitor) const
349
24.9k
{
350
24.9k
  if (_visitor.visit(*this))
351
24.2k
  {
352
24.2k
    if (m_documentation)
353
56
      m_documentation->accept(_visitor);
354
24.2k
    m_parameters->accept(_visitor);
355
24.2k
    if (m_overrides)
356
1.87k
      m_overrides->accept(_visitor);
357
24.2k
    if (m_body)
358
11.4k
      m_body->accept(_visitor);
359
24.2k
  }
360
24.9k
  _visitor.endVisit(*this);
361
24.9k
}
362
363
void ModifierInvocation::accept(ASTVisitor& _visitor)
364
2.16k
{
365
2.16k
  if (_visitor.visit(*this))
366
2.16k
  {
367
2.16k
    m_modifierName->accept(_visitor);
368
2.16k
    if (m_arguments)
369
946
      listAccept(*m_arguments, _visitor);
370
2.16k
  }
371
2.16k
  _visitor.endVisit(*this);
372
2.16k
}
373
374
void ModifierInvocation::accept(ASTConstVisitor& _visitor) const
375
62.7k
{
376
62.7k
  if (_visitor.visit(*this))
377
60.7k
  {
378
60.7k
    m_modifierName->accept(_visitor);
379
60.7k
    if (m_arguments)
380
27.5k
      listAccept(*m_arguments, _visitor);
381
60.7k
  }
382
62.7k
  _visitor.endVisit(*this);
383
62.7k
}
384
385
void EventDefinition::accept(ASTVisitor& _visitor)
386
3.06k
{
387
3.06k
  if (_visitor.visit(*this))
388
3.06k
  {
389
3.06k
    if (m_documentation)
390
17
      m_documentation->accept(_visitor);
391
3.06k
    m_parameters->accept(_visitor);
392
3.06k
  }
393
3.06k
  _visitor.endVisit(*this);
394
3.06k
}
395
396
void EventDefinition::accept(ASTConstVisitor& _visitor) const
397
44.0k
{
398
44.0k
  if (_visitor.visit(*this))
399
44.0k
  {
400
44.0k
    if (m_documentation)
401
219
      m_documentation->accept(_visitor);
402
44.0k
    m_parameters->accept(_visitor);
403
44.0k
  }
404
44.0k
  _visitor.endVisit(*this);
405
44.0k
}
406
407
void ErrorDefinition::accept(ASTVisitor& _visitor)
408
696
{
409
696
  if (_visitor.visit(*this))
410
696
  {
411
696
    if (m_documentation)
412
132
      m_documentation->accept(_visitor);
413
696
    m_parameters->accept(_visitor);
414
696
  }
415
696
  _visitor.endVisit(*this);
416
696
}
417
418
void ErrorDefinition::accept(ASTConstVisitor& _visitor) const
419
8.86k
{
420
8.86k
  if (_visitor.visit(*this))
421
8.86k
  {
422
8.86k
    if (m_documentation)
423
1.46k
      m_documentation->accept(_visitor);
424
8.86k
    m_parameters->accept(_visitor);
425
8.86k
  }
426
8.86k
  _visitor.endVisit(*this);
427
8.86k
}
428
429
void ElementaryTypeName::accept(ASTVisitor& _visitor)
430
65.6k
{
431
65.6k
  _visitor.visit(*this);
432
65.6k
  _visitor.endVisit(*this);
433
65.6k
}
434
435
void ElementaryTypeName::accept(ASTConstVisitor& _visitor) const
436
1.67M
{
437
1.67M
  _visitor.visit(*this);
438
1.67M
  _visitor.endVisit(*this);
439
1.67M
}
440
441
void UserDefinedTypeName::accept(ASTVisitor& _visitor)
442
20.6k
{
443
20.6k
  if (_visitor.visit(*this))
444
20.6k
    this->pathNode().accept(_visitor);
445
20.6k
  _visitor.endVisit(*this);
446
20.6k
}
447
448
void UserDefinedTypeName::accept(ASTConstVisitor& _visitor) const
449
273k
{
450
273k
  if (_visitor.visit(*this))
451
273k
    this->pathNode().accept(_visitor);
452
273k
  _visitor.endVisit(*this);
453
273k
}
454
455
void FunctionTypeName::accept(ASTVisitor& _visitor)
456
1.10k
{
457
1.10k
  if (_visitor.visit(*this))
458
1.10k
  {
459
1.10k
    m_parameterTypes->accept(_visitor);
460
1.10k
    m_returnTypes->accept(_visitor);
461
1.10k
  }
462
1.10k
  _visitor.endVisit(*this);
463
1.10k
}
464
465
void FunctionTypeName::accept(ASTConstVisitor& _visitor) const
466
31.4k
{
467
31.4k
  if (_visitor.visit(*this))
468
29.8k
  {
469
29.8k
    m_parameterTypes->accept(_visitor);
470
29.8k
    m_returnTypes->accept(_visitor);
471
29.8k
  }
472
31.4k
  _visitor.endVisit(*this);
473
31.4k
}
474
475
void Mapping::accept(ASTVisitor& _visitor)
476
946
{
477
946
  if (_visitor.visit(*this))
478
946
  {
479
946
    m_keyType->accept(_visitor);
480
946
    m_valueType->accept(_visitor);
481
946
  }
482
946
  _visitor.endVisit(*this);
483
946
}
484
485
void Mapping::accept(ASTConstVisitor& _visitor) const
486
18.1k
{
487
18.1k
  if (_visitor.visit(*this))
488
18.1k
  {
489
18.1k
    m_keyType->accept(_visitor);
490
18.1k
    m_valueType->accept(_visitor);
491
18.1k
  }
492
18.1k
  _visitor.endVisit(*this);
493
18.1k
}
494
495
void ArrayTypeName::accept(ASTVisitor& _visitor)
496
21.3k
{
497
21.3k
  if (_visitor.visit(*this))
498
21.3k
  {
499
21.3k
    m_baseType->accept(_visitor);
500
21.3k
    if (m_length)
501
6.94k
      m_length->accept(_visitor);
502
21.3k
  }
503
21.3k
  _visitor.endVisit(*this);
504
21.3k
}
505
506
void ArrayTypeName::accept(ASTConstVisitor& _visitor) const
507
513k
{
508
513k
  if (_visitor.visit(*this))
509
513k
  {
510
513k
    m_baseType->accept(_visitor);
511
513k
    if (m_length)
512
90.0k
      m_length->accept(_visitor);
513
513k
  }
514
513k
  _visitor.endVisit(*this);
515
513k
}
516
517
void InlineAssembly::accept(ASTVisitor& _visitor)
518
2.58k
{
519
2.58k
  _visitor.visit(*this);
520
2.58k
  _visitor.endVisit(*this);
521
2.58k
}
522
523
void InlineAssembly::accept(ASTConstVisitor& _visitor) const
524
109k
{
525
109k
  _visitor.visit(*this);
526
109k
  _visitor.endVisit(*this);
527
109k
}
528
529
void Block::accept(ASTVisitor& _visitor)
530
25.7k
{
531
25.7k
  if (_visitor.visit(*this))
532
25.7k
    listAccept(m_statements, _visitor);
533
25.7k
  _visitor.endVisit(*this);
534
25.7k
}
535
536
void Block::accept(ASTConstVisitor& _visitor) const
537
1.07M
{
538
1.07M
  if (_visitor.visit(*this))
539
1.05M
    listAccept(m_statements, _visitor);
540
1.07M
  _visitor.endVisit(*this);
541
1.07M
}
542
543
void PlaceholderStatement::accept(ASTVisitor& _visitor)
544
810
{
545
810
  _visitor.visit(*this);
546
810
  _visitor.endVisit(*this);
547
810
}
548
549
void PlaceholderStatement::accept(ASTConstVisitor& _visitor) const
550
36.7k
{
551
36.7k
  _visitor.visit(*this);
552
36.7k
  _visitor.endVisit(*this);
553
36.7k
}
554
555
void IfStatement::accept(ASTVisitor& _visitor)
556
37.7k
{
557
37.7k
  if (_visitor.visit(*this))
558
37.7k
  {
559
37.7k
    m_condition->accept(_visitor);
560
37.7k
    m_trueBody->accept(_visitor);
561
37.7k
    if (m_falseBody)
562
358
      m_falseBody->accept(_visitor);
563
37.7k
  }
564
37.7k
  _visitor.endVisit(*this);
565
37.7k
}
566
567
void IfStatement::accept(ASTConstVisitor& _visitor) const
568
629k
{
569
629k
  if (_visitor.visit(*this))
570
514k
  {
571
514k
    m_condition->accept(_visitor);
572
514k
    m_trueBody->accept(_visitor);
573
514k
    if (m_falseBody)
574
11.5k
      m_falseBody->accept(_visitor);
575
514k
  }
576
629k
  _visitor.endVisit(*this);
577
629k
}
578
579
void TryCatchClause::accept(ASTVisitor& _visitor)
580
632
{
581
632
  if (_visitor.visit(*this))
582
632
  {
583
632
    if (m_parameters)
584
275
      m_parameters->accept(_visitor);
585
632
    m_block->accept(_visitor);
586
632
  }
587
632
  _visitor.endVisit(*this);
588
632
}
589
590
void TryCatchClause::accept(ASTConstVisitor& _visitor) const
591
27.9k
{
592
27.9k
  if (_visitor.visit(*this))
593
27.7k
  {
594
27.7k
    if (m_parameters)
595
6.59k
      m_parameters->accept(_visitor);
596
27.7k
    m_block->accept(_visitor);
597
27.7k
  }
598
27.9k
  _visitor.endVisit(*this);
599
27.9k
}
600
601
void TryStatement::accept(ASTVisitor& _visitor)
602
241
{
603
241
  if (_visitor.visit(*this))
604
241
  {
605
241
    m_externalCall->accept(_visitor);
606
241
    listAccept(m_clauses, _visitor);
607
241
  }
608
241
  _visitor.endVisit(*this);
609
241
}
610
611
void TryStatement::accept(ASTConstVisitor& _visitor) const
612
13.4k
{
613
13.4k
  if (_visitor.visit(*this))
614
12.8k
  {
615
12.8k
    m_externalCall->accept(_visitor);
616
12.8k
    listAccept(m_clauses, _visitor);
617
12.8k
  }
618
13.4k
  _visitor.endVisit(*this);
619
13.4k
}
620
621
void WhileStatement::accept(ASTVisitor& _visitor)
622
207
{
623
207
  if (_visitor.visit(*this))
624
207
  {
625
207
    m_condition->accept(_visitor);
626
207
    m_body->accept(_visitor);
627
207
  }
628
207
  _visitor.endVisit(*this);
629
207
}
630
631
void WhileStatement::accept(ASTConstVisitor& _visitor) const
632
19.2k
{
633
19.2k
  if (_visitor.visit(*this))
634
18.3k
  {
635
18.3k
    m_condition->accept(_visitor);
636
18.3k
    m_body->accept(_visitor);
637
18.3k
  }
638
19.2k
  _visitor.endVisit(*this);
639
19.2k
}
640
641
void ForStatement::accept(ASTVisitor& _visitor)
642
3.09k
{
643
3.09k
  if (_visitor.visit(*this))
644
3.09k
  {
645
3.09k
    if (m_initExpression)
646
3.00k
      m_initExpression->accept(_visitor);
647
3.09k
    if (m_condExpression)
648
3.02k
      m_condExpression->accept(_visitor);
649
3.09k
    if (m_loopExpression)
650
3.00k
      m_loopExpression->accept(_visitor);
651
3.09k
    m_body->accept(_visitor);
652
3.09k
  }
653
3.09k
  _visitor.endVisit(*this);
654
3.09k
}
655
656
void ForStatement::accept(ASTConstVisitor& _visitor) const
657
118k
{
658
118k
  if (_visitor.visit(*this))
659
107k
  {
660
107k
    if (m_initExpression)
661
103k
      m_initExpression->accept(_visitor);
662
107k
    if (m_condExpression)
663
105k
      m_condExpression->accept(_visitor);
664
107k
    if (m_loopExpression)
665
103k
      m_loopExpression->accept(_visitor);
666
107k
    m_body->accept(_visitor);
667
107k
  }
668
118k
  _visitor.endVisit(*this);
669
118k
}
670
671
void Continue::accept(ASTVisitor& _visitor)
672
87
{
673
87
  _visitor.visit(*this);
674
87
  _visitor.endVisit(*this);
675
87
}
676
677
void Continue::accept(ASTConstVisitor& _visitor) const
678
9.32k
{
679
9.32k
  _visitor.visit(*this);
680
9.32k
  _visitor.endVisit(*this);
681
9.32k
}
682
683
void Break::accept(ASTVisitor& _visitor)
684
105
{
685
105
  _visitor.visit(*this);
686
105
  _visitor.endVisit(*this);
687
105
}
688
689
void Break::accept(ASTConstVisitor& _visitor) const
690
11.2k
{
691
11.2k
  _visitor.visit(*this);
692
11.2k
  _visitor.endVisit(*this);
693
11.2k
}
694
695
void Return::accept(ASTVisitor& _visitor)
696
45.1k
{
697
45.1k
  if (_visitor.visit(*this))
698
45.1k
    if (m_expression)
699
44.9k
      m_expression->accept(_visitor);
700
45.1k
  _visitor.endVisit(*this);
701
45.1k
}
702
703
void Return::accept(ASTConstVisitor& _visitor) const
704
915k
{
705
915k
  if (_visitor.visit(*this))
706
827k
    if (m_expression)
707
794k
      m_expression->accept(_visitor);
708
915k
  _visitor.endVisit(*this);
709
915k
}
710
711
void Throw::accept(ASTVisitor& _visitor)
712
3
{
713
3
  _visitor.visit(*this);
714
3
  _visitor.endVisit(*this);
715
3
}
716
717
void Throw::accept(ASTConstVisitor& _visitor) const
718
17
{
719
17
  _visitor.visit(*this);
720
17
  _visitor.endVisit(*this);
721
17
}
722
723
void RevertStatement::accept(ASTVisitor& _visitor)
724
75
{
725
75
  if (_visitor.visit(*this))
726
75
    m_errorCall->accept(_visitor);
727
75
  _visitor.endVisit(*this);
728
75
}
729
730
void RevertStatement::accept(ASTConstVisitor& _visitor) const
731
3.36k
{
732
3.36k
  if (_visitor.visit(*this))
733
3.26k
    m_errorCall->accept(_visitor);
734
3.36k
  _visitor.endVisit(*this);
735
3.36k
}
736
737
void EmitStatement::accept(ASTVisitor& _visitor)
738
1.34k
{
739
1.34k
  if (_visitor.visit(*this))
740
1.34k
    m_eventCall->accept(_visitor);
741
1.34k
  _visitor.endVisit(*this);
742
1.34k
}
743
744
void EmitStatement::accept(ASTConstVisitor& _visitor) const
745
78.6k
{
746
78.6k
  if (_visitor.visit(*this))
747
78.2k
    m_eventCall->accept(_visitor);
748
78.6k
  _visitor.endVisit(*this);
749
78.6k
}
750
751
void ExpressionStatement::accept(ASTVisitor& _visitor)
752
47.9k
{
753
47.9k
  if (_visitor.visit(*this))
754
47.9k
    if (m_expression)
755
47.9k
      m_expression->accept(_visitor);
756
47.9k
  _visitor.endVisit(*this);
757
47.9k
}
758
759
void ExpressionStatement::accept(ASTConstVisitor& _visitor) const
760
1.67M
{
761
1.67M
  if (_visitor.visit(*this))
762
1.63M
    if (m_expression)
763
1.63M
      m_expression->accept(_visitor);
764
1.67M
  _visitor.endVisit(*this);
765
1.67M
}
766
767
void VariableDeclarationStatement::accept(ASTVisitor& _visitor)
768
10.7k
{
769
10.7k
  if (_visitor.visit(*this))
770
10.7k
  {
771
10.7k
    for (ASTPointer<VariableDeclaration> const& var: m_variables)
772
11.7k
      if (var)
773
11.4k
        var->accept(_visitor);
774
10.7k
    if (m_initialValue)
775
7.58k
      m_initialValue->accept(_visitor);
776
10.7k
  }
777
10.7k
  _visitor.endVisit(*this);
778
10.7k
}
779
780
void VariableDeclarationStatement::accept(ASTConstVisitor& _visitor) const
781
373k
{
782
373k
  if (_visitor.visit(*this))
783
348k
  {
784
348k
    for (ASTPointer<VariableDeclaration> const& var: m_variables)
785
368k
      if (var)
786
361k
        var->accept(_visitor);
787
348k
    if (m_initialValue)
788
257k
      m_initialValue->accept(_visitor);
789
348k
  }
790
373k
  _visitor.endVisit(*this);
791
373k
}
792
793
void Conditional::accept(ASTVisitor& _visitor)
794
850
{
795
850
  if (_visitor.visit(*this))
796
850
  {
797
850
    m_condition->accept(_visitor);
798
850
    m_trueExpression->accept(_visitor);
799
850
    m_falseExpression->accept(_visitor);
800
850
  }
801
850
  _visitor.endVisit(*this);
802
850
}
803
804
void Conditional::accept(ASTConstVisitor& _visitor) const
805
38.3k
{
806
38.3k
  if (_visitor.visit(*this))
807
35.1k
  {
808
35.1k
    m_condition->accept(_visitor);
809
35.1k
    m_trueExpression->accept(_visitor);
810
35.1k
    m_falseExpression->accept(_visitor);
811
35.1k
  }
812
38.3k
  _visitor.endVisit(*this);
813
38.3k
}
814
815
void Assignment::accept(ASTVisitor& _visitor)
816
33.0k
{
817
33.0k
  if (_visitor.visit(*this))
818
33.0k
  {
819
33.0k
    m_leftHandSide->accept(_visitor);
820
33.0k
    m_rightHandSide->accept(_visitor);
821
33.0k
  }
822
33.0k
  _visitor.endVisit(*this);
823
33.0k
}
824
825
void Assignment::accept(ASTConstVisitor& _visitor) const
826
864k
{
827
864k
  if (_visitor.visit(*this))
828
783k
  {
829
783k
    m_leftHandSide->accept(_visitor);
830
783k
    m_rightHandSide->accept(_visitor);
831
783k
  }
832
864k
  _visitor.endVisit(*this);
833
864k
}
834
835
void TupleExpression::accept(ASTVisitor& _visitor)
836
7.73k
{
837
7.73k
  if (_visitor.visit(*this))
838
7.73k
    for (auto const& component: m_components)
839
11.9k
      if (component)
840
11.4k
        component->accept(_visitor);
841
7.73k
  _visitor.endVisit(*this);
842
7.73k
}
843
844
void TupleExpression::accept(ASTConstVisitor& _visitor) const
845
356k
{
846
356k
  if (_visitor.visit(*this))
847
344k
    for (auto const& component: m_components)
848
532k
      if (component)
849
524k
        component->accept(_visitor);
850
356k
  _visitor.endVisit(*this);
851
356k
}
852
853
void UnaryOperation::accept(ASTVisitor& _visitor)
854
35.7k
{
855
35.7k
  if (_visitor.visit(*this))
856
35.7k
    m_subExpression->accept(_visitor);
857
35.7k
  _visitor.endVisit(*this);
858
35.7k
}
859
860
void UnaryOperation::accept(ASTConstVisitor& _visitor) const
861
4.58M
{
862
4.58M
  if (_visitor.visit(*this))
863
4.53M
    m_subExpression->accept(_visitor);
864
4.58M
  _visitor.endVisit(*this);
865
4.58M
}
866
867
void BinaryOperation::accept(ASTVisitor& _visitor)
868
84.7k
{
869
84.7k
  if (_visitor.visit(*this))
870
84.7k
  {
871
84.7k
    m_left->accept(_visitor);
872
84.7k
    m_right->accept(_visitor);
873
84.7k
  }
874
84.7k
  _visitor.endVisit(*this);
875
84.7k
}
876
877
void BinaryOperation::accept(ASTConstVisitor& _visitor) const
878
2.30M
{
879
2.30M
  if (_visitor.visit(*this))
880
2.25M
  {
881
2.25M
    m_left->accept(_visitor);
882
2.25M
    m_right->accept(_visitor);
883
2.25M
  }
884
2.30M
  _visitor.endVisit(*this);
885
2.30M
}
886
887
void FunctionCall::accept(ASTVisitor& _visitor)
888
36.0k
{
889
36.0k
  if (_visitor.visit(*this))
890
36.0k
  {
891
36.0k
    m_expression->accept(_visitor);
892
36.0k
    listAccept(m_arguments, _visitor);
893
36.0k
  }
894
36.0k
  _visitor.endVisit(*this);
895
36.0k
}
896
897
void FunctionCall::accept(ASTConstVisitor& _visitor) const
898
1.13M
{
899
1.13M
  if (_visitor.visit(*this))
900
1.06M
  {
901
1.06M
    m_expression->accept(_visitor);
902
1.06M
    listAccept(m_arguments, _visitor);
903
1.06M
  }
904
1.13M
  _visitor.endVisit(*this);
905
1.13M
}
906
907
void FunctionCallOptions::accept(ASTVisitor& _visitor)
908
277
{
909
277
  if (_visitor.visit(*this))
910
277
  {
911
277
    m_expression->accept(_visitor);
912
277
    listAccept(m_options, _visitor);
913
277
  }
914
277
  _visitor.endVisit(*this);
915
277
}
916
917
void FunctionCallOptions::accept(ASTConstVisitor& _visitor) const
918
9.20k
{
919
9.20k
  if (_visitor.visit(*this))
920
8.85k
  {
921
8.85k
    m_expression->accept(_visitor);
922
8.85k
    listAccept(m_options, _visitor);
923
8.85k
  }
924
9.20k
  _visitor.endVisit(*this);
925
9.20k
}
926
927
void NewExpression::accept(ASTVisitor& _visitor)
928
2.86k
{
929
2.86k
  if (_visitor.visit(*this))
930
2.86k
    m_typeName->accept(_visitor);
931
2.86k
  _visitor.endVisit(*this);
932
2.86k
}
933
934
void NewExpression::accept(ASTConstVisitor& _visitor) const
935
96.3k
{
936
96.3k
  if (_visitor.visit(*this))
937
94.4k
    m_typeName->accept(_visitor);
938
96.3k
  _visitor.endVisit(*this);
939
96.3k
}
940
941
void MemberAccess::accept(ASTVisitor& _visitor)
942
164k
{
943
164k
  if (_visitor.visit(*this))
944
164k
    m_expression->accept(_visitor);
945
164k
  _visitor.endVisit(*this);
946
164k
}
947
948
void MemberAccess::accept(ASTConstVisitor& _visitor) const
949
2.80M
{
950
2.80M
  if (_visitor.visit(*this))
951
2.47M
    m_expression->accept(_visitor);
952
2.80M
  _visitor.endVisit(*this);
953
2.80M
}
954
955
void IndexAccess::accept(ASTVisitor& _visitor)
956
120k
{
957
120k
  if (_visitor.visit(*this))
958
120k
  {
959
120k
    m_base->accept(_visitor);
960
120k
    if (m_index)
961
119k
      m_index->accept(_visitor);
962
120k
  }
963
120k
  _visitor.endVisit(*this);
964
120k
}
965
966
void IndexAccess::accept(ASTConstVisitor& _visitor) const
967
2.79M
{
968
2.79M
  if (_visitor.visit(*this))
969
2.56M
  {
970
2.56M
    m_base->accept(_visitor);
971
2.56M
    if (m_index)
972
2.56M
      m_index->accept(_visitor);
973
2.56M
  }
974
2.79M
  _visitor.endVisit(*this);
975
2.79M
}
976
977
void IndexRangeAccess::accept(ASTVisitor& _visitor)
978
842
{
979
842
  if (_visitor.visit(*this))
980
842
  {
981
842
    m_base->accept(_visitor);
982
842
    if (m_start)
983
573
      m_start->accept(_visitor);
984
842
    if (m_end)
985
426
      m_end->accept(_visitor);
986
842
  }
987
842
  _visitor.endVisit(*this);
988
842
}
989
990
void IndexRangeAccess::accept(ASTConstVisitor& _visitor) const
991
27.7k
{
992
27.7k
  if (_visitor.visit(*this))
993
26.7k
  {
994
26.7k
    m_base->accept(_visitor);
995
26.7k
    if (m_start)
996
22.2k
      m_start->accept(_visitor);
997
26.7k
    if (m_end)
998
15.3k
      m_end->accept(_visitor);
999
26.7k
  }
1000
27.7k
  _visitor.endVisit(*this);
1001
27.7k
}
1002
1003
void Identifier::accept(ASTVisitor& _visitor)
1004
143k
{
1005
143k
  _visitor.visit(*this);
1006
143k
  _visitor.endVisit(*this);
1007
143k
}
1008
1009
void Identifier::accept(ASTConstVisitor& _visitor) const
1010
4.70M
{
1011
4.70M
  _visitor.visit(*this);
1012
4.70M
  _visitor.endVisit(*this);
1013
4.70M
}
1014
1015
void ElementaryTypeNameExpression::accept(ASTVisitor& _visitor)
1016
10.3k
{
1017
10.3k
  _visitor.visit(*this);
1018
10.3k
  _visitor.endVisit(*this);
1019
10.3k
}
1020
1021
void ElementaryTypeNameExpression::accept(ASTConstVisitor& _visitor) const
1022
281k
{
1023
281k
  _visitor.visit(*this);
1024
281k
  _visitor.endVisit(*this);
1025
281k
}
1026
1027
void Literal::accept(ASTVisitor& _visitor)
1028
286k
{
1029
286k
  _visitor.visit(*this);
1030
286k
  _visitor.endVisit(*this);
1031
286k
}
1032
1033
void Literal::accept(ASTConstVisitor& _visitor) const
1034
6.60M
{
1035
6.60M
  _visitor.visit(*this);
1036
6.60M
  _visitor.endVisit(*this);
1037
6.60M
}
1038
1039
/// Experimental Solidity nodes
1040
/// @{
1041
void TypeClassDefinition::accept(ASTVisitor& _visitor)
1042
12
{
1043
12
  if (_visitor.visit(*this))
1044
12
  {
1045
12
    m_typeVariable->accept(_visitor);
1046
12
    if (m_documentation)
1047
0
      m_documentation->accept(_visitor);
1048
12
    listAccept(m_subNodes, _visitor);
1049
12
  }
1050
12
  _visitor.endVisit(*this);
1051
12
}
1052
1053
void TypeClassDefinition::accept(ASTConstVisitor& _visitor) const
1054
59
{
1055
59
  if (_visitor.visit(*this))
1056
48
  {
1057
48
    m_typeVariable->accept(_visitor);
1058
48
    if (m_documentation)
1059
0
      m_documentation->accept(_visitor);
1060
48
    listAccept(m_subNodes, _visitor);
1061
48
  }
1062
59
  _visitor.endVisit(*this);
1063
59
}
1064
1065
void TypeClassInstantiation::accept(ASTVisitor& _visitor)
1066
11
{
1067
11
  if (_visitor.visit(*this))
1068
11
  {
1069
11
    m_typeConstructor->accept(_visitor);
1070
11
    if (m_argumentSorts)
1071
3
      m_argumentSorts->accept(_visitor);
1072
11
    m_class->accept(_visitor);
1073
11
    listAccept(m_subNodes, _visitor);
1074
11
  }
1075
11
  _visitor.endVisit(*this);
1076
11
}
1077
1078
void TypeClassInstantiation::accept(ASTConstVisitor& _visitor) const
1079
54
{
1080
54
  if (_visitor.visit(*this))
1081
44
  {
1082
44
    m_typeConstructor->accept(_visitor);
1083
44
    if (m_argumentSorts)
1084
11
      m_argumentSorts->accept(_visitor);
1085
44
    m_class->accept(_visitor);
1086
44
    listAccept(m_subNodes, _visitor);
1087
44
  }
1088
54
  _visitor.endVisit(*this);
1089
54
}
1090
1091
void TypeDefinition::accept(ASTVisitor& _visitor)
1092
75
{
1093
75
  if (_visitor.visit(*this))
1094
75
  {
1095
75
    if (m_arguments)
1096
17
      m_arguments->accept(_visitor);
1097
75
    if (m_typeExpression)
1098
25
      m_typeExpression->accept(_visitor);
1099
75
  }
1100
75
  _visitor.endVisit(*this);
1101
75
}
1102
1103
void TypeDefinition::accept(ASTConstVisitor& _visitor) const
1104
351
{
1105
351
  if (_visitor.visit(*this))
1106
295
  {
1107
295
    if (m_arguments)
1108
68
      m_arguments->accept(_visitor);
1109
295
    if (m_typeExpression)
1110
96
      m_typeExpression->accept(_visitor);
1111
295
  }
1112
351
  _visitor.endVisit(*this);
1113
351
}
1114
1115
1116
void TypeClassName::accept(ASTVisitor& _visitor)
1117
11
{
1118
11
  if (_visitor.visit(*this))
1119
11
  {
1120
11
    if (auto* path = std::get_if<ASTPointer<IdentifierPath>>(&m_name))
1121
11
      (*path)->accept(_visitor);
1122
11
  }
1123
11
  _visitor.endVisit(*this);
1124
11
}
1125
1126
void TypeClassName::accept(ASTConstVisitor& _visitor) const
1127
43
{
1128
43
  if (_visitor.visit(*this))
1129
43
  {
1130
43
    if (auto* path = std::get_if<ASTPointer<IdentifierPath>>(&m_name))
1131
43
      (*path)->accept(_visitor);
1132
43
  }
1133
43
  _visitor.endVisit(*this);
1134
43
}
1135
1136
void Builtin::accept(ASTVisitor& _visitor)
1137
19
{
1138
19
  _visitor.visit(*this);
1139
19
  _visitor.endVisit(*this);
1140
19
}
1141
1142
void Builtin::accept(ASTConstVisitor& _visitor) const
1143
74
{
1144
74
  _visitor.visit(*this);
1145
74
  _visitor.endVisit(*this);
1146
74
}
1147
1148
void ForAllQuantifier::accept(ASTVisitor& _visitor)
1149
8
{
1150
8
  if (_visitor.visit(*this))
1151
8
  {
1152
8
    m_typeVariableDeclarations->accept(_visitor);
1153
8
    m_quantifiedDeclaration->accept(_visitor);
1154
8
  }
1155
8
  _visitor.endVisit(*this);
1156
8
}
1157
1158
void ForAllQuantifier::accept(ASTConstVisitor& _visitor) const
1159
37
{
1160
37
  if (_visitor.visit(*this))
1161
32
  {
1162
32
    m_typeVariableDeclarations->accept(_visitor);
1163
32
    m_quantifiedDeclaration->accept(_visitor);
1164
32
  }
1165
37
  _visitor.endVisit(*this);
1166
37
}
1167
1168
void StorageLayoutSpecifier::accept(ASTVisitor& _visitor)
1169
0
{
1170
0
  if (_visitor.visit(*this))
1171
0
    m_baseSlotExpression->accept(_visitor);
1172
1173
0
  _visitor.endVisit(*this);
1174
0
}
1175
1176
void StorageLayoutSpecifier::accept(ASTConstVisitor& _visitor) const
1177
0
{
1178
0
  if (_visitor.visit(*this))
1179
0
    m_baseSlotExpression->accept(_visitor);
1180
1181
0
  _visitor.endVisit(*this);
1182
0
}
1183
/// @}
1184
1185
}