Line data Source code
1 : // Copyright (C) 2020-2026 Free Software Foundation, Inc.
2 :
3 : // This file is part of GCC.
4 :
5 : // GCC is free software; you can redistribute it and/or modify it under
6 : // the terms of the GNU General Public License as published by the Free
7 : // Software Foundation; either version 3, or (at your option) any later
8 : // version.
9 :
10 : // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11 : // WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 : // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 : // for more details.
14 :
15 : // You should have received a copy of the GNU General Public License
16 : // along with GCC; see the file COPYING3. If not see
17 : // <http://www.gnu.org/licenses/>.
18 :
19 : #include "rust-ast-visitor.h"
20 : #include "rust-ast-full-decls.h"
21 : #include "rust-ast.h"
22 : #include "rust-builtin-ast-nodes.h"
23 : #include "rust-path.h"
24 : #include "rust-token.h"
25 : #include "rust-expr.h"
26 : #include "rust-macro.h"
27 : #include "rust-pattern.h"
28 : #include "rust-stmt.h"
29 : #include "rust-type.h"
30 :
31 : namespace Rust {
32 : namespace AST {
33 :
34 : void
35 91780 : DefaultASTVisitor::visit (AST::Crate &crate)
36 : {
37 91780 : visit_inner_attrs (crate);
38 505698 : for (auto &item : crate.items)
39 413920 : visit (item);
40 91778 : }
41 :
42 : void
43 33266345 : DefaultASTVisitor::visit (AST::Token &tok)
44 33266345 : {}
45 :
46 : void
47 4409651 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
48 : {
49 39240783 : for (auto &token : delim_tok_tree.get_token_trees ())
50 34831132 : visit (token);
51 4409651 : }
52 :
53 : void
54 31634 : DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
55 : {
56 64124 : for (auto &item : input.get_items ())
57 32490 : visit (item);
58 31634 : }
59 :
60 : void
61 27492770 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
62 : {
63 27492770 : visit_outer_attrs (ident_expr);
64 27492770 : }
65 :
66 : void
67 3540017 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
68 3540017 : {}
69 :
70 : void
71 183910 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
72 : {
73 183910 : visit_outer_attrs (lifetime_param);
74 183910 : visit (lifetime_param.get_lifetime ());
75 187070 : for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
76 3160 : visit (lifetime_bound);
77 183910 : }
78 :
79 : void
80 13556 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
81 : {
82 13556 : visit_outer_attrs (const_param);
83 13556 : if (const_param.has_type ())
84 13556 : visit (const_param.get_type ());
85 13556 : if (const_param.has_default_value ())
86 319 : visit (const_param.get_default_value_unchecked ());
87 13556 : }
88 :
89 : void
90 8355147 : DefaultASTVisitor::visit (AST::PathInExpression &path)
91 : {
92 8355147 : visit_outer_attrs (path);
93 :
94 8355147 : if (!path.is_lang_item ())
95 17970840 : for (auto &segment : path.get_segments ())
96 9650321 : visit (segment);
97 8355147 : }
98 :
99 : void
100 16473927 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
101 16473927 : {}
102 :
103 : void
104 39977 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
105 : {
106 39977 : visit (binding.get_type ());
107 39977 : }
108 :
109 : void
110 1620614 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
111 : {
112 1620614 : if (segment.has_generic_args ())
113 1620600 : visit (segment.get_generic_args ());
114 1620614 : }
115 :
116 : void
117 100587 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
118 : {
119 243670 : for (auto &input : tpf.get_params ())
120 143083 : visit (input);
121 100587 : if (tpf.has_return_type ())
122 97215 : visit (tpf.get_return_type ());
123 100587 : }
124 :
125 : void
126 21089606 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
127 21089606 : {}
128 :
129 : void
130 100587 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
131 : {
132 100587 : visit (segment.get_type_path_function ());
133 100587 : visit (segment.get_ident_segment ());
134 100587 : }
135 :
136 : void
137 1666623 : DefaultASTVisitor::visit (AST::GenericArgs &args)
138 : {
139 1837291 : for (auto &lifetime : args.get_lifetime_args ())
140 170668 : visit (lifetime);
141 :
142 3309908 : for (auto &generic : args.get_generic_args ())
143 1643285 : visit (generic);
144 :
145 1706084 : for (auto &binding : args.get_binding_args ())
146 39461 : visit (binding);
147 1666623 : }
148 :
149 : void
150 16102942 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
151 : {
152 16102942 : visit (segment.get_ident_segment ());
153 16102942 : if (segment.has_generic_args ())
154 68063 : visit (segment.get_generic_args ());
155 16102942 : }
156 : void
157 13704204 : DefaultASTVisitor::visit (AST::TypePath &path)
158 : {
159 28361483 : for (auto &segment : path.get_segments ())
160 14657279 : visit (segment);
161 13704204 : }
162 :
163 : void
164 25040 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
165 : {
166 25040 : visit_outer_attrs (path);
167 25040 : visit (path.get_qualified_path_type ());
168 :
169 50114 : for (auto &segment : path.get_segments ())
170 25074 : visit (segment);
171 25040 : }
172 :
173 : void
174 565689 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
175 : {
176 565689 : visit (path.get_type ());
177 565689 : if (path.has_as_clause ())
178 547063 : visit (path.get_as_type_path ());
179 565689 : }
180 :
181 : void
182 647352 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
183 : {
184 647352 : visit (path.get_qualified_path_type ());
185 647352 : visit (path.get_associated_segment ());
186 :
187 647352 : for (auto &segment : path.get_segments ())
188 0 : visit (segment);
189 647352 : }
190 :
191 : void
192 34422149 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
193 : {
194 34422149 : visit_outer_attrs (expr);
195 34422149 : }
196 :
197 : void
198 18303586 : DefaultASTVisitor::visit (AST::Attribute &attribute)
199 : {
200 18303586 : visit (attribute.get_path ());
201 18303586 : if (attribute.has_attr_input ())
202 15752449 : visit (attribute.get_attr_input ());
203 18303586 : }
204 :
205 : void
206 9920963 : DefaultASTVisitor::visit (AST::AttrInputLiteral &attr_input)
207 : {
208 9920963 : visit (attr_input.get_literal ());
209 9920963 : }
210 :
211 : void
212 22980 : DefaultASTVisitor::visit (AST::AttrInputExpr &attr_input)
213 : {
214 22980 : visit (attr_input.get_expr ());
215 22980 : }
216 :
217 : void
218 0 : DefaultASTVisitor::visit (AST::MetaItemLitExpr &meta_item)
219 : {
220 0 : visit (meta_item.get_literal ());
221 0 : }
222 :
223 : void
224 18802129 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
225 18802129 : {}
226 :
227 : void
228 18665840 : DefaultASTVisitor::visit (AST::SimplePath &path)
229 : {
230 37467969 : for (auto &segment : path.get_segments ())
231 18802129 : visit (segment);
232 18665840 : }
233 :
234 : void
235 1 : DefaultASTVisitor::visit (AST::MetaItemPathExpr &meta_item)
236 : {
237 1 : visit (meta_item.get_path ());
238 1 : visit (meta_item.get_expr ());
239 1 : }
240 :
241 : void
242 1234363 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
243 : {
244 1234363 : visit_outer_attrs (expr);
245 1234363 : visit (expr.get_borrowed_expr ());
246 1234363 : }
247 :
248 : void
249 629590 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
250 : {
251 629590 : visit_outer_attrs (expr);
252 629590 : visit (expr.get_dereferenced_expr ());
253 629590 : }
254 :
255 : void
256 85182 : DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
257 : {
258 85182 : visit_outer_attrs (expr);
259 85182 : visit (expr.get_propagating_expr ());
260 85182 : }
261 :
262 : void
263 190872 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
264 : {
265 190872 : visit_outer_attrs (expr);
266 190872 : visit (expr.get_negated_expr ());
267 190872 : }
268 :
269 : void
270 6341323 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
271 : {
272 6341323 : visit_outer_attrs (expr);
273 6341323 : visit (expr.get_left_expr ());
274 6341323 : visit (expr.get_right_expr ());
275 6341323 : }
276 :
277 : void
278 599031 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
279 : {
280 599031 : visit_outer_attrs (expr);
281 599031 : visit (expr.get_left_expr ());
282 599031 : visit (expr.get_right_expr ());
283 599031 : }
284 :
285 : void
286 147755 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
287 : {
288 147755 : visit_outer_attrs (expr);
289 147755 : visit (expr.get_left_expr ());
290 147755 : visit (expr.get_right_expr ());
291 147755 : }
292 :
293 : void
294 986575 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
295 : {
296 986575 : visit_outer_attrs (expr);
297 986575 : visit (expr.get_casted_expr ());
298 986575 : visit (expr.get_type_to_cast_to ());
299 986575 : }
300 :
301 : void
302 410782 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
303 : {
304 410782 : visit_outer_attrs (expr);
305 410782 : visit (expr.get_left_expr ());
306 410782 : visit (expr.get_right_expr ());
307 410782 : }
308 :
309 : void
310 243295 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
311 : {
312 243295 : visit_outer_attrs (expr);
313 243295 : visit (expr.get_left_expr ());
314 243295 : visit (expr.get_right_expr ());
315 243295 : }
316 :
317 : void
318 1162780 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
319 : {
320 1162780 : visit_outer_attrs (expr);
321 1162780 : visit_inner_attrs (expr);
322 1162780 : visit (expr.get_expr_in_parens ());
323 1162780 : }
324 :
325 : void
326 1303680 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
327 : {
328 13710421 : for (auto &value : elems.get_values ())
329 12406741 : visit (value);
330 1303680 : }
331 :
332 : void
333 11694 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
334 : {
335 11694 : visit (elems.get_elem_to_copy ());
336 11694 : visit (elems.get_num_copies ());
337 11694 : }
338 :
339 : void
340 2521158 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
341 : {
342 2521158 : visit_outer_attrs (expr);
343 2521158 : visit_inner_attrs (expr);
344 2521158 : visit (expr.get_array_elems ());
345 2521158 : }
346 :
347 : void
348 172582 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
349 : {
350 172582 : visit_outer_attrs (expr);
351 172582 : visit (expr.get_array_expr ());
352 172582 : visit (expr.get_index_expr ());
353 172582 : }
354 :
355 : void
356 450888 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
357 : {
358 450888 : visit_outer_attrs (expr);
359 450888 : visit_inner_attrs (expr);
360 1288488 : for (auto &elem : expr.get_tuple_elems ())
361 837600 : visit (elem);
362 450888 : }
363 :
364 : void
365 807435 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
366 : {
367 807435 : visit_outer_attrs (expr);
368 807435 : visit (expr.get_tuple_expr ());
369 807435 : }
370 :
371 : void
372 4950 : DefaultASTVisitor::visit (AST::StructExprStruct &expr)
373 : {
374 4950 : visit_outer_attrs (expr);
375 4950 : visit_inner_attrs (expr);
376 4950 : visit (expr.get_struct_name ());
377 4950 : }
378 :
379 : void
380 52246 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
381 52246 : {}
382 :
383 : void
384 196797 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
385 : {
386 196797 : visit (field.get_value ());
387 196797 : }
388 :
389 : void
390 748 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
391 : {
392 748 : visit (field.get_value ());
393 748 : }
394 :
395 : void
396 1787 : DefaultASTVisitor::visit (AST::StructBase &base)
397 : {
398 1787 : visit (base.get_base_struct ());
399 1787 : }
400 :
401 : void
402 160136 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
403 : {
404 160136 : visit_outer_attrs (expr);
405 160136 : visit_inner_attrs (expr);
406 160136 : visit (expr.get_struct_name ());
407 160136 : if (expr.has_struct_base ())
408 2261 : visit (expr.get_struct_base ());
409 464840 : for (auto &field : expr.get_fields ())
410 304704 : visit (field);
411 160136 : }
412 :
413 : void
414 0 : DefaultASTVisitor::visit (AST::StructExprStructBase &expr)
415 : {
416 0 : visit_outer_attrs (expr);
417 0 : visit_inner_attrs (expr);
418 0 : visit (expr.get_struct_name ());
419 0 : visit (expr.get_struct_base ());
420 0 : }
421 :
422 : void
423 10817072 : DefaultASTVisitor::visit (AST::CallExpr &expr)
424 : {
425 10817072 : visit_outer_attrs (expr);
426 10817072 : visit (expr.get_function_expr ());
427 37730639 : for (auto ¶m : expr.get_params ())
428 26913568 : visit (param);
429 10817071 : }
430 :
431 : void
432 6427547 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
433 : {
434 6427547 : visit_outer_attrs (expr);
435 6427547 : visit (expr.get_receiver_expr ());
436 6427547 : visit (expr.get_method_name ());
437 7457131 : for (auto ¶m : expr.get_params ())
438 1029584 : visit (param);
439 6427547 : }
440 :
441 : void
442 1112685 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
443 : {
444 1112685 : visit_outer_attrs (expr);
445 1112685 : visit (expr.get_receiver_expr ());
446 1112685 : }
447 :
448 : void
449 61922 : DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
450 : {
451 61922 : visit_outer_attrs (expr);
452 133470 : for (auto ¶m : expr.get_params ())
453 71548 : visit (param);
454 61922 : visit (expr.get_definition_expr ());
455 61922 : }
456 :
457 : void
458 3624849 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
459 : {
460 3624849 : visit_outer_attrs (expr);
461 3624849 : visit_inner_attrs (expr);
462 :
463 3624849 : if (expr.has_label ())
464 51 : visit (expr.get_label ());
465 :
466 5778241 : for (auto &stmt : expr.get_statements ())
467 2153395 : visit (stmt);
468 :
469 3624846 : if (expr.has_tail_expr ())
470 3054362 : visit (expr.get_tail_expr ());
471 3624844 : }
472 :
473 : void
474 280 : DefaultASTVisitor::visit (AST::ConstBlock &expr)
475 : {
476 280 : visit (expr.get_const_expr ());
477 280 : }
478 :
479 : void
480 72714 : DefaultASTVisitor::visit (AST::AnonConst &expr)
481 : {
482 72714 : if (!expr.is_deferred ())
483 72491 : visit (expr.get_inner_expr ());
484 72714 : }
485 :
486 : void
487 439 : DefaultASTVisitor::visit (AST::ClosureExprInnerTyped &expr)
488 : {
489 439 : visit_outer_attrs (expr);
490 955 : for (auto ¶m : expr.get_params ())
491 516 : visit (param);
492 439 : visit (expr.get_return_type ());
493 439 : visit (expr.get_definition_expr ());
494 439 : }
495 :
496 : void
497 99476 : DefaultASTVisitor::visit (AST::ClosureParam ¶m)
498 : {
499 99476 : visit_outer_attrs (param);
500 99476 : visit (param.get_pattern ());
501 99476 : if (param.has_type_given ())
502 5485 : visit (param.get_type ());
503 99476 : }
504 :
505 : void
506 1984 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
507 : {
508 1984 : visit_outer_attrs (expr);
509 1984 : if (expr.has_label ())
510 765 : visit (expr.get_label_unchecked ());
511 1984 : }
512 :
513 : void
514 16092 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
515 : {
516 16092 : visit_outer_attrs (expr);
517 16092 : if (expr.has_label ())
518 831 : visit (expr.get_label_unchecked ());
519 :
520 16092 : if (expr.has_break_expr ())
521 668 : visit (expr.get_break_expr_unchecked ());
522 16091 : }
523 :
524 : void
525 55904 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
526 : {
527 55904 : visit (expr.get_from_expr ());
528 55904 : visit (expr.get_to_expr ());
529 55904 : }
530 :
531 : void
532 22306 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
533 : {
534 22306 : visit (expr.get_from_expr ());
535 22306 : }
536 :
537 : void
538 34434 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
539 : {
540 34434 : visit (expr.get_to_expr ());
541 34434 : }
542 :
543 : void
544 18665 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
545 18665 : {}
546 :
547 : void
548 1498 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
549 : {
550 1498 : visit (expr.get_from_expr ());
551 1498 : visit (expr.get_to_expr ());
552 1498 : }
553 :
554 : void
555 0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
556 : {
557 0 : visit (expr.get_to_expr ());
558 0 : }
559 :
560 : void
561 147664 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
562 : {
563 147664 : visit_outer_attrs (expr);
564 147664 : if (expr.has_returned_expr ())
565 142394 : visit (expr.get_returned_expr ());
566 147664 : }
567 :
568 : void
569 7081 : DefaultASTVisitor::visit (AST::TryExpr &expr)
570 : {
571 7081 : visit_outer_attrs (expr);
572 7081 : visit (expr.get_block_expr ());
573 7081 : }
574 :
575 : void
576 642 : DefaultASTVisitor::visit (AST::BoxExpr &expr)
577 : {
578 642 : visit_outer_attrs (expr);
579 642 : visit (expr.get_boxed_expr ());
580 642 : }
581 :
582 : void
583 314891 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
584 : {
585 314891 : visit_outer_attrs (expr);
586 314891 : visit (expr.get_block_expr ());
587 314891 : }
588 :
589 : void
590 2580 : DefaultASTVisitor::visit (AST::LoopLabel &label)
591 : {
592 2580 : visit (label.get_lifetime ());
593 2580 : }
594 :
595 : void
596 15502 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
597 : {
598 15502 : visit_outer_attrs (expr);
599 15502 : if (expr.has_loop_label ())
600 1146 : visit (expr.get_loop_label ());
601 15502 : visit (expr.get_loop_block ());
602 15501 : }
603 :
604 : void
605 27872 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
606 : {
607 27872 : visit_outer_attrs (expr);
608 27872 : if (expr.has_loop_label ())
609 119 : visit (expr.get_loop_label ());
610 27872 : visit (expr.get_predicate_expr ());
611 27872 : visit (expr.get_loop_block ());
612 27872 : }
613 :
614 : void
615 5978 : DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
616 : {
617 5978 : visit_outer_attrs (expr);
618 5978 : visit (expr.get_pattern ());
619 :
620 5978 : if (expr.has_loop_label ())
621 9 : visit (expr.get_loop_label ());
622 :
623 5978 : visit (expr.get_scrutinee_expr ());
624 5978 : visit (expr.get_loop_block ());
625 5978 : }
626 :
627 : void
628 28020 : DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
629 : {
630 28020 : visit_outer_attrs (expr);
631 28020 : visit (expr.get_pattern ());
632 28020 : visit (expr.get_iterator_expr ());
633 28020 : if (expr.has_loop_label ())
634 0 : visit (expr.get_loop_label ());
635 28020 : visit (expr.get_loop_block ());
636 28020 : }
637 :
638 : void
639 439800 : DefaultASTVisitor::visit (AST::IfExpr &expr)
640 : {
641 439800 : visit_outer_attrs (expr);
642 439800 : visit (expr.get_condition_expr ());
643 439800 : visit (expr.get_if_block ());
644 439800 : }
645 :
646 : void
647 279933 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
648 : {
649 279933 : visit (reinterpret_cast<AST::IfExpr &> (expr));
650 279933 : visit (expr.get_else_block ());
651 279933 : }
652 :
653 : void
654 15427 : DefaultASTVisitor::visit (AST::IfLetExpr &expr)
655 : {
656 15427 : visit_outer_attrs (expr);
657 15427 : visit (expr.get_pattern ());
658 15427 : visit (expr.get_value_expr ());
659 15427 : visit (expr.get_if_block ());
660 15427 : }
661 :
662 : void
663 5821 : DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
664 : {
665 5821 : visit (reinterpret_cast<AST::IfLetExpr &> (expr));
666 5821 : visit (expr.get_else_block ());
667 5821 : }
668 :
669 : void
670 7843779 : DefaultASTVisitor::visit (AST::MatchArm &arm)
671 : {
672 7843779 : visit_outer_attrs (arm);
673 7843779 : visit (arm.get_pattern ());
674 7843779 : if (arm.has_match_arm_guard ())
675 7293 : visit (arm.get_guard_expr ());
676 7843779 : }
677 :
678 : void
679 7895811 : DefaultASTVisitor::visit (AST::MatchCase &arm)
680 : {
681 7895811 : visit (arm.get_arm ());
682 7895811 : visit (arm.get_expr ());
683 7895810 : }
684 :
685 : void
686 795899 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
687 : {
688 795899 : visit_outer_attrs (expr);
689 795899 : visit_inner_attrs (expr);
690 795899 : visit (expr.get_scrutinee_expr ());
691 8691708 : for (auto &arm : expr.get_match_cases ())
692 7895811 : visit (arm);
693 795897 : }
694 :
695 : void
696 0 : DefaultASTVisitor::visit (AST::AwaitExpr &expr)
697 : {
698 0 : visit_outer_attrs (expr);
699 0 : visit (expr.get_awaited_expr ());
700 0 : }
701 :
702 : void
703 0 : DefaultASTVisitor::visit (AST::AsyncBlockExpr &expr)
704 : {
705 0 : visit_outer_attrs (expr);
706 0 : visit (expr.get_block_expr ());
707 0 : }
708 :
709 : void
710 345 : DefaultASTVisitor::visit (AST::InlineAsm &expr)
711 : {
712 345 : visit_outer_attrs (expr);
713 345 : using RegisterType = AST::InlineAsmOperand::RegisterType;
714 718 : for (auto &operand : expr.get_operands ())
715 : {
716 373 : switch (operand.get_register_type ())
717 : {
718 130 : case RegisterType::In:
719 130 : {
720 130 : visit (operand.get_in ().expr);
721 130 : break;
722 : }
723 217 : case RegisterType::Out:
724 217 : {
725 217 : visit (operand.get_out ().expr);
726 217 : break;
727 : }
728 0 : case RegisterType::InOut:
729 0 : {
730 0 : visit (operand.get_in_out ().expr);
731 0 : break;
732 : }
733 26 : case RegisterType::SplitInOut:
734 26 : {
735 26 : auto split = operand.get_split_in_out ();
736 26 : visit (split.in_expr);
737 26 : visit (split.out_expr);
738 26 : break;
739 26 : }
740 0 : case RegisterType::Const:
741 0 : {
742 0 : visit (operand.get_const ().anon_const.get_inner_expr ());
743 0 : break;
744 : }
745 0 : case RegisterType::Sym:
746 0 : {
747 0 : visit (operand.get_sym ().expr);
748 0 : break;
749 : }
750 0 : case RegisterType::Label:
751 0 : {
752 0 : visit (operand.get_label ().expr);
753 0 : break;
754 : }
755 : }
756 345 : }
757 345 : }
758 :
759 : void
760 2219 : DefaultASTVisitor::visit (AST::LlvmInlineAsm &expr)
761 : {
762 2219 : visit_outer_attrs (expr);
763 :
764 5227 : for (auto &output : expr.get_outputs ())
765 3008 : visit (output.expr);
766 :
767 4616 : for (auto &input : expr.get_inputs ())
768 2397 : visit (input.expr);
769 2219 : }
770 :
771 : void
772 724191 : DefaultASTVisitor::visit (AST::TypeParam ¶m)
773 : {
774 724191 : visit_outer_attrs (param);
775 935177 : for (auto &bound : param.get_type_param_bounds ())
776 210986 : visit (bound);
777 724191 : if (param.has_type ())
778 6774 : visit (param.get_type ());
779 724191 : }
780 :
781 : void
782 256 : DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem &item)
783 : {
784 256 : visit (item.get_lifetime ());
785 512 : for (auto &bound : item.get_lifetime_bounds ())
786 256 : visit (bound);
787 256 : }
788 :
789 : void
790 190532 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
791 : {
792 190858 : for (auto &lifetime : item.get_for_lifetimes ())
793 326 : visit (lifetime);
794 190532 : visit (item.get_type ());
795 390050 : for (auto ¶m : item.get_type_param_bounds ())
796 199518 : visit (param);
797 190532 : }
798 :
799 : void
800 6177418 : DefaultASTVisitor::visit (AST::Visibility &vis)
801 : {
802 6177418 : if (vis.has_path ())
803 68159 : visit (vis.get_path ());
804 6177418 : }
805 :
806 : void
807 3095938 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
808 3095938 : {}
809 :
810 : void
811 170313 : DefaultASTVisitor::visit (AST::WhereClause &where)
812 : {
813 402309 : for (auto &item : where.get_items ())
814 231996 : visit (item);
815 170313 : }
816 : void
817 2622129 : DefaultASTVisitor::visit (AST::FunctionParam ¶m)
818 : {
819 2622129 : visit_outer_attrs (param);
820 2622129 : if (param.has_name ())
821 2622129 : visit (param.get_pattern ());
822 :
823 2622129 : visit (param.get_type ());
824 2622129 : }
825 :
826 : void
827 1644171 : DefaultASTVisitor::visit (AST::SelfParam ¶m)
828 : {
829 1644171 : visit_outer_attrs (param);
830 :
831 1644171 : if (param.has_lifetime ())
832 776838 : visit (param.get_lifetime ());
833 :
834 1644171 : if (param.has_type ())
835 2814 : visit (param.get_type ());
836 1644171 : }
837 :
838 : void
839 51479 : DefaultASTVisitor::visit (AST::Module &module)
840 : {
841 51479 : visit_outer_attrs (module);
842 51479 : visit (module.get_visibility ());
843 51479 : visit_inner_attrs (module);
844 1377259 : for (auto &item : module.get_items ())
845 1325780 : visit (item);
846 51479 : }
847 :
848 : void
849 556 : DefaultASTVisitor::visit (AST::ExternCrate &crate)
850 : {
851 556 : visit_outer_attrs (crate);
852 556 : visit (crate.get_visibility ());
853 556 : }
854 :
855 : void
856 8228 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
857 : {
858 8228 : visit (use_tree.get_path ());
859 8228 : }
860 :
861 : void
862 28607 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
863 : {
864 28607 : visit (use_tree.get_path ());
865 28607 : }
866 :
867 : void
868 59590 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
869 : {
870 59590 : visit (use_tree.get_path ());
871 59590 : }
872 :
873 : void
874 96553 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
875 : {
876 96553 : visit (use_decl.get_visibility ());
877 96553 : visit (use_decl.get_tree ());
878 96553 : }
879 :
880 : void
881 2457953 : DefaultASTVisitor::visit_function_params (AST::Function &function)
882 : {
883 6719345 : for (auto ¶m : function.get_function_params ())
884 4261392 : visit (param);
885 2457953 : }
886 :
887 : void
888 2492950 : DefaultASTVisitor::visit (AST::Function &function)
889 : {
890 2492950 : visit_outer_attrs (function);
891 2492950 : visit (function.get_visibility ());
892 2492950 : visit (function.get_qualifiers ());
893 2796793 : for (auto &generic : function.get_generic_params ())
894 303843 : visit (generic);
895 :
896 2492950 : visit_function_params (function);
897 :
898 2492950 : if (function.has_return_type ())
899 2114029 : visit (function.get_return_type ());
900 2492950 : if (function.has_where_clause ())
901 81919 : visit (function.get_where_clause ());
902 2492950 : if (function.has_body ())
903 2251768 : visit (*function.get_definition ());
904 2492948 : }
905 :
906 : void
907 484117 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
908 : {
909 484117 : visit_outer_attrs (type_alias);
910 484117 : visit (type_alias.get_visibility ());
911 484617 : for (auto &generic : type_alias.get_generic_params ())
912 500 : visit (generic);
913 484117 : if (type_alias.has_where_clause ())
914 0 : visit (type_alias.get_where_clause ());
915 484117 : visit (type_alias.get_type_aliased ());
916 484117 : }
917 :
918 : void
919 44 : DefaultASTVisitor::visit (AST::TraitAlias &trait_alias)
920 : {
921 44 : visit_outer_attrs (trait_alias);
922 44 : visit (trait_alias.get_visibility ());
923 44 : for (auto &generic : trait_alias.get_generic_params ())
924 0 : visit (generic);
925 44 : if (trait_alias.has_where_clause ())
926 0 : visit (trait_alias.get_where_clause ());
927 88 : for (auto &bound : trait_alias.get_alias_bounds ())
928 44 : visit (bound);
929 44 : }
930 :
931 : void
932 115646 : DefaultASTVisitor::visit (AST::StructField &field)
933 : {
934 115646 : visit_outer_attrs (field);
935 115646 : visit (field.get_visibility ());
936 115646 : visit (field.get_field_type ());
937 115646 : }
938 :
939 : void
940 262494 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
941 : {
942 262494 : visit_outer_attrs (struct_item);
943 262494 : visit (struct_item.get_visibility ());
944 347201 : for (auto &generic : struct_item.get_generic_params ())
945 84707 : visit (generic);
946 262494 : if (struct_item.has_where_clause ())
947 2968 : visit (struct_item.get_where_clause ());
948 410962 : for (auto &field : struct_item.get_fields ())
949 148468 : visit (field);
950 262494 : }
951 :
952 : void
953 111851 : DefaultASTVisitor::visit (AST::TupleField &field)
954 : {
955 111851 : visit_outer_attrs (field);
956 111851 : visit (field.get_visibility ());
957 111851 : visit (field.get_field_type ());
958 111851 : }
959 :
960 : void
961 46129 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
962 : {
963 46129 : visit_outer_attrs (tuple_struct);
964 46129 : visit (tuple_struct.get_visibility ());
965 65196 : for (auto &generic : tuple_struct.get_generic_params ())
966 19067 : visit (generic);
967 46129 : if (tuple_struct.has_where_clause ())
968 262 : visit (tuple_struct.get_where_clause ());
969 187399 : for (auto &field : tuple_struct.get_fields ())
970 141270 : visit (field);
971 46129 : }
972 :
973 : void
974 44760 : DefaultASTVisitor::visit (AST::EnumItem &item)
975 : {
976 44760 : visit_outer_attrs (item);
977 44760 : visit (item.get_visibility ());
978 44760 : }
979 :
980 : void
981 16672 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
982 : {
983 16672 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
984 35102 : for (auto &field : item.get_tuple_fields ())
985 18430 : visit (field);
986 16672 : }
987 :
988 : void
989 2036 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
990 : {
991 2036 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
992 5398 : for (auto &field : item.get_struct_fields ())
993 3362 : visit (field);
994 2036 : }
995 :
996 : void
997 6499 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
998 : {
999 6499 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
1000 6499 : visit (item.get_expr ());
1001 6499 : }
1002 :
1003 : void
1004 21705 : DefaultASTVisitor::visit (AST::Enum &enum_item)
1005 : {
1006 21705 : visit_outer_attrs (enum_item);
1007 21705 : visit (enum_item.get_visibility ());
1008 33045 : for (auto &generic : enum_item.get_generic_params ())
1009 11340 : visit (generic);
1010 21705 : if (enum_item.has_where_clause ())
1011 32 : visit (enum_item.get_where_clause ());
1012 75694 : for (auto &item : enum_item.get_variants ())
1013 53989 : visit (item);
1014 21705 : }
1015 :
1016 : void
1017 2877 : DefaultASTVisitor::visit (AST::Union &union_item)
1018 : {
1019 2877 : visit_outer_attrs (union_item);
1020 2877 : visit (union_item.get_visibility ());
1021 5015 : for (auto &generic : union_item.get_generic_params ())
1022 2138 : visit (generic);
1023 2877 : if (union_item.has_where_clause ())
1024 0 : visit (union_item.get_where_clause ());
1025 10941 : for (auto &variant : union_item.get_variants ())
1026 8064 : visit (variant);
1027 2877 : }
1028 :
1029 : void
1030 121163 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
1031 : {
1032 121163 : visit_outer_attrs (const_item);
1033 121163 : visit (const_item.get_visibility ());
1034 121163 : visit (const_item.get_type ());
1035 121163 : if (const_item.has_expr ())
1036 117071 : visit (const_item.get_expr ());
1037 121163 : }
1038 :
1039 : void
1040 6672 : DefaultASTVisitor::visit (AST::StaticItem &static_item)
1041 : {
1042 6672 : visit_outer_attrs (static_item);
1043 6672 : visit (static_item.get_visibility ());
1044 6672 : visit (static_item.get_type ());
1045 6672 : visit (static_item.get_expr ());
1046 6672 : }
1047 :
1048 : void
1049 32874 : DefaultASTVisitor::visit (AST::TraitItemType &item)
1050 : {
1051 32874 : visit_outer_attrs (item);
1052 33288 : for (auto &generic : item.get_generic_params ())
1053 414 : visit (generic);
1054 39836 : for (auto &bound : item.get_type_param_bounds ())
1055 6962 : visit (bound);
1056 32874 : }
1057 :
1058 : void
1059 61457 : DefaultASTVisitor::visit (AST::Trait &trait)
1060 : {
1061 61457 : visit_outer_attrs (trait);
1062 61457 : visit (trait.get_visibility ());
1063 :
1064 61457 : visit_inner_attrs (trait);
1065 :
1066 61457 : visit (trait.get_implicit_self ());
1067 :
1068 75543 : for (auto &generic : trait.get_generic_params ())
1069 14086 : visit (generic);
1070 :
1071 61457 : if (trait.has_where_clause ())
1072 91 : visit (trait.get_where_clause ());
1073 :
1074 75530 : for (auto &bound : trait.get_type_param_bounds ())
1075 14073 : visit (bound);
1076 :
1077 136590 : for (auto &item : trait.get_trait_items ())
1078 75133 : visit (item);
1079 61457 : }
1080 :
1081 : void
1082 35893 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
1083 : {
1084 35893 : visit_outer_attrs (impl);
1085 35893 : visit (impl.get_visibility ());
1086 :
1087 64541 : for (auto &generic : impl.get_generic_params ())
1088 28648 : visit (generic);
1089 35893 : if (impl.has_where_clause ())
1090 236 : visit (impl.get_where_clause ());
1091 35893 : visit (impl.get_type ());
1092 35893 : visit_inner_attrs (impl);
1093 240718 : for (auto &item : impl.get_impl_items ())
1094 204825 : visit (item);
1095 35893 : }
1096 :
1097 : void
1098 548525 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
1099 : {
1100 548525 : visit_outer_attrs (impl);
1101 548525 : visit (impl.get_visibility ());
1102 :
1103 1048649 : for (auto &generic : impl.get_generic_params ())
1104 500124 : visit (generic);
1105 548525 : if (impl.has_where_clause ())
1106 28374 : visit (impl.get_where_clause ());
1107 548525 : visit (impl.get_type ());
1108 548525 : visit (impl.get_trait_path ());
1109 548525 : visit_inner_attrs (impl);
1110 1317414 : for (auto &item : impl.get_impl_items ())
1111 768889 : visit (item);
1112 548525 : }
1113 :
1114 : void
1115 216 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
1116 : {
1117 216 : visit_outer_attrs (item);
1118 216 : visit (item.get_visibility ());
1119 216 : }
1120 :
1121 : void
1122 16 : DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
1123 : {
1124 16 : visit_outer_attrs (item);
1125 16 : visit (item.get_visibility ());
1126 16 : visit (item.get_type ());
1127 16 : }
1128 :
1129 : void
1130 30448 : DefaultASTVisitor::visit (AST::ExternBlock &block)
1131 : {
1132 30448 : visit_outer_attrs (block);
1133 30448 : visit (block.get_visibility ());
1134 30448 : visit_inner_attrs (block);
1135 163681 : for (auto &item : block.get_extern_items ())
1136 133233 : visit (item);
1137 30448 : }
1138 :
1139 : void
1140 225241 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
1141 225241 : {}
1142 :
1143 : void
1144 31034 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
1145 : {
1146 75783 : for (auto &m : match.get_matches ())
1147 44749 : visit (m);
1148 31034 : }
1149 :
1150 : void
1151 115493 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
1152 : {
1153 474287 : for (auto &m : matcher.get_matches ())
1154 358794 : visit (m);
1155 115493 : }
1156 :
1157 : void
1158 109821 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
1159 : {
1160 109821 : visit (transcriber.get_token_tree ());
1161 109821 : }
1162 :
1163 : void
1164 109821 : DefaultASTVisitor::visit (AST::MacroRule &rule)
1165 : {
1166 109821 : visit (rule.get_matcher ());
1167 109821 : visit (rule.get_transcriber ());
1168 109821 : }
1169 : void
1170 99877 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
1171 : {
1172 99877 : visit_outer_attrs (rules_def);
1173 209698 : for (auto &rule : rules_def.get_macro_rules ())
1174 109821 : visit (rule);
1175 99877 : }
1176 :
1177 : void
1178 178613 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
1179 : {
1180 178613 : visit (data.get_path ());
1181 178613 : visit (data.get_delim_tok_tree ());
1182 178613 : }
1183 : void
1184 178613 : DefaultASTVisitor::visit (AST::MacroInvocation ¯o_invoc)
1185 : {
1186 178613 : visit_outer_attrs (macro_invoc);
1187 178613 : visit (macro_invoc.get_invoc_data ());
1188 178613 : }
1189 :
1190 : void
1191 2670 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
1192 : {
1193 2670 : visit (meta_item.get_path ());
1194 2670 : }
1195 :
1196 : void
1197 16386 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
1198 : {
1199 16386 : visit (meta_item.get_path ());
1200 37497 : for (auto &inner : meta_item.get_seq ())
1201 21111 : visit (inner);
1202 16386 : }
1203 :
1204 : void
1205 12227 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
1206 12227 : {}
1207 :
1208 : void
1209 30081 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
1210 30081 : {}
1211 :
1212 : void
1213 0 : DefaultASTVisitor::visit (AST::MetaListPaths &meta_item)
1214 : {
1215 0 : for (auto &path : meta_item.get_paths ())
1216 0 : visit (path);
1217 0 : }
1218 :
1219 : void
1220 0 : DefaultASTVisitor::visit (AST::MetaListNameValueStr &meta_item)
1221 : {
1222 0 : for (auto &str : meta_item.get_values ())
1223 0 : visit (str);
1224 0 : }
1225 :
1226 : void
1227 10474928 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
1228 10474928 : {}
1229 :
1230 : void
1231 1871822 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
1232 : {
1233 1871822 : if (pattern.has_subpattern ())
1234 2830 : visit (pattern.get_subpattern ());
1235 1871822 : }
1236 :
1237 : void
1238 1052433 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
1239 1052433 : {}
1240 :
1241 : void
1242 3673 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
1243 3673 : {}
1244 :
1245 : void
1246 47343 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
1247 47343 : {}
1248 :
1249 : void
1250 405 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
1251 : {
1252 405 : visit (bound.get_path ());
1253 405 : }
1254 :
1255 : void
1256 0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
1257 : {
1258 0 : visit (bound.get_qualified_path ());
1259 0 : }
1260 :
1261 : void
1262 18480 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
1263 : {
1264 18480 : if (pattern.get_has_lower_bound ())
1265 18480 : visit (pattern.get_lower_bound ());
1266 18480 : if (pattern.get_has_upper_bound ())
1267 18480 : visit (pattern.get_upper_bound ());
1268 18480 : }
1269 :
1270 : void
1271 48305 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
1272 : {
1273 48305 : visit (pattern.get_referenced_pattern ());
1274 48305 : }
1275 :
1276 : void
1277 527 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
1278 : {
1279 527 : visit_outer_attrs (field);
1280 527 : visit (field.get_index_pattern ());
1281 527 : }
1282 :
1283 : void
1284 10529 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
1285 : {
1286 10529 : visit_outer_attrs (field);
1287 10529 : visit (field.get_ident_pattern ());
1288 10529 : }
1289 :
1290 : void
1291 4610 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
1292 : {
1293 4610 : visit_outer_attrs (field);
1294 4610 : }
1295 :
1296 : void
1297 11965 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
1298 : {
1299 28954 : for (auto &field : spe.get_struct_pattern_fields ())
1300 16989 : visit (field);
1301 11965 : for (auto &attribute : spe.get_etc_outer_attrs ())
1302 0 : visit (attribute);
1303 11965 : }
1304 :
1305 : void
1306 11965 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
1307 : {
1308 11965 : visit (pattern.get_path ());
1309 11965 : visit (pattern.get_struct_pattern_elems ());
1310 11965 : }
1311 :
1312 : void
1313 199614 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRest &tuple_items)
1314 : {
1315 406869 : for (auto &pattern : tuple_items.get_patterns ())
1316 207255 : visit (pattern);
1317 199614 : }
1318 :
1319 : void
1320 2229 : DefaultASTVisitor::visit (AST::TupleStructItemsHasRest &tuple_items)
1321 : {
1322 2855 : for (auto &lower : tuple_items.get_lower_patterns ())
1323 626 : visit (lower);
1324 2612 : for (auto &upper : tuple_items.get_upper_patterns ())
1325 383 : visit (upper);
1326 2229 : }
1327 :
1328 : void
1329 264751 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
1330 : {
1331 264751 : visit (pattern.get_path ());
1332 264751 : visit (pattern.get_items ());
1333 264751 : }
1334 :
1335 : void
1336 508229 : DefaultASTVisitor::visit (AST::TuplePatternItemsNoRest &tuple_items)
1337 : {
1338 1667866 : for (auto &pattern : tuple_items.get_patterns ())
1339 1159637 : visit (pattern);
1340 508229 : }
1341 :
1342 : void
1343 643 : DefaultASTVisitor::visit (AST::TuplePatternItemsHasRest &tuple_items)
1344 : {
1345 1196 : for (auto &lower : tuple_items.get_lower_patterns ())
1346 553 : visit (lower);
1347 1241 : for (auto &upper : tuple_items.get_upper_patterns ())
1348 598 : visit (upper);
1349 643 : }
1350 :
1351 : void
1352 687177 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
1353 : {
1354 687177 : visit (pattern.get_items ());
1355 687177 : }
1356 :
1357 : void
1358 899 : DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
1359 : {
1360 899 : visit (pattern.get_pattern_in_parens ());
1361 899 : }
1362 :
1363 : void
1364 4500 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
1365 : {
1366 14230 : for (auto &pat : pattern.get_patterns ())
1367 9730 : visit (pat);
1368 4500 : }
1369 :
1370 : void
1371 10830 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
1372 : {
1373 37690 : for (auto &alt : pattern.get_alts ())
1374 26860 : visit (alt);
1375 10830 : }
1376 :
1377 : void
1378 1474 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
1379 1474 : {}
1380 :
1381 : void
1382 1121080 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
1383 : {
1384 1121080 : visit_outer_attrs (stmt);
1385 1121080 : visit (stmt.get_pattern ());
1386 1121080 : if (stmt.has_type ())
1387 130051 : visit (stmt.get_type ());
1388 1121080 : if (stmt.has_init_expr ())
1389 1075269 : visit (stmt.get_init_expr ());
1390 1121080 : }
1391 :
1392 : void
1393 1496255 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
1394 : {
1395 1496255 : visit (stmt.get_expr ());
1396 1496253 : }
1397 :
1398 : void
1399 729532 : DefaultASTVisitor::visit (AST::TraitBound &bound)
1400 : {
1401 729848 : for (auto &lifetime : bound.get_for_lifetimes ())
1402 316 : visit (lifetime);
1403 729532 : visit (bound.get_type_path ());
1404 729532 : }
1405 :
1406 : void
1407 18175 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
1408 : {
1409 37058 : for (auto &bound : type.get_type_param_bounds ())
1410 18883 : visit (bound);
1411 18175 : }
1412 :
1413 : void
1414 13032 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
1415 : {
1416 39717 : for (auto &bound : type.get_type_param_bounds ())
1417 26685 : visit (bound);
1418 13032 : }
1419 :
1420 : void
1421 1899 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
1422 : {
1423 1899 : visit (type.get_type_in_parens ());
1424 1899 : }
1425 :
1426 : void
1427 35239 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
1428 : {
1429 35239 : visit (type.get_trait_bound ());
1430 35239 : }
1431 :
1432 : void
1433 9068 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
1434 : {
1435 9068 : visit (type.get_trait_bound ());
1436 9068 : }
1437 :
1438 : void
1439 195816 : DefaultASTVisitor::visit (AST::TupleType &type)
1440 : {
1441 628271 : for (auto &elem : type.get_elems ())
1442 432455 : visit (elem);
1443 195816 : }
1444 :
1445 : void
1446 17356 : DefaultASTVisitor::visit (AST::NeverType &type)
1447 17356 : {}
1448 :
1449 : void
1450 416076 : DefaultASTVisitor::visit (AST::RawPointerType &type)
1451 : {
1452 416076 : visit (type.get_type_pointed_to ());
1453 416076 : }
1454 :
1455 : void
1456 1661894 : DefaultASTVisitor::visit (AST::ReferenceType &type)
1457 : {
1458 1661894 : visit (type.get_lifetime ());
1459 1661894 : visit (type.get_base_type ());
1460 1661894 : }
1461 :
1462 : void
1463 72495 : DefaultASTVisitor::visit (AST::ArrayType &type)
1464 : {
1465 72495 : visit (type.get_elem_type ());
1466 72495 : visit (type.get_size_expr ());
1467 72495 : }
1468 :
1469 : void
1470 140406 : DefaultASTVisitor::visit (AST::SliceType &type)
1471 : {
1472 140406 : visit (type.get_elem_type ());
1473 140406 : }
1474 :
1475 : void
1476 63358 : DefaultASTVisitor::visit (AST::InferredType &type)
1477 63358 : {}
1478 :
1479 : void
1480 460206 : DefaultASTVisitor::visit (AST::MaybeNamedParam ¶m)
1481 : {
1482 460206 : visit_outer_attrs (param);
1483 460206 : visit (param.get_type ());
1484 460206 : }
1485 :
1486 : void
1487 78360 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
1488 : {
1489 78425 : for (auto &lifetime : type.get_for_lifetimes ())
1490 65 : visit (lifetime);
1491 78360 : visit (type.get_function_qualifiers ());
1492 538566 : for (auto ¶m : type.get_function_params ())
1493 460206 : visit (param);
1494 78360 : if (type.is_variadic ())
1495 23352 : for (auto attr : type.get_variadic_attr ())
1496 0 : visit (attr);
1497 78360 : if (type.has_return_type ())
1498 76224 : visit (type.get_return_type ());
1499 78360 : }
1500 :
1501 : void
1502 0 : DefaultASTVisitor::visit (AST::FormatArgs &)
1503 : {
1504 : // FIXME: Do we have anything to do? any subnodes to visit? Probably, right?
1505 0 : }
1506 :
1507 : void
1508 170 : DefaultASTVisitor::visit (AST::OffsetOf &offset_of)
1509 : {
1510 170 : visit (offset_of.get_type ());
1511 170 : }
1512 :
1513 : void
1514 14797 : DefaultASTVisitor::visit (AST::VariadicParam ¶m)
1515 : {
1516 14797 : if (param.has_pattern ())
1517 176 : visit (param.get_pattern ());
1518 14797 : }
1519 :
1520 : void
1521 5049 : ContextualASTVisitor::visit (AST::Crate &crate)
1522 : {
1523 5049 : ctx.enter (Kind::CRATE);
1524 5049 : DefaultASTVisitor::visit (crate);
1525 5049 : ctx.exit ();
1526 5049 : }
1527 :
1528 : void
1529 1544 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
1530 : {
1531 1544 : ctx.enter (Kind::INHERENT_IMPL);
1532 1544 : DefaultASTVisitor::visit (impl);
1533 1544 : ctx.exit ();
1534 1544 : }
1535 :
1536 : void
1537 13182 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
1538 : {
1539 13182 : ctx.enter (Kind::TRAIT_IMPL);
1540 13182 : DefaultASTVisitor::visit (impl);
1541 13182 : ctx.exit ();
1542 13182 : }
1543 :
1544 : void
1545 4546 : ContextualASTVisitor::visit (AST::Trait &trait)
1546 : {
1547 4546 : ctx.enter (Kind::TRAIT);
1548 4546 : DefaultASTVisitor::visit (trait);
1549 4546 : ctx.exit ();
1550 4546 : }
1551 :
1552 : void
1553 35043 : ContextualASTVisitor::visit (AST::Function &function)
1554 : {
1555 35043 : ctx.enter (Kind::FUNCTION);
1556 35043 : DefaultASTVisitor::visit (function);
1557 35043 : ctx.exit ();
1558 35043 : }
1559 :
1560 : } // namespace AST
1561 : } // namespace Rust
|