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 90541 : DefaultASTVisitor::visit (AST::Crate &crate)
36 : {
37 90541 : visit_inner_attrs (crate);
38 498281 : for (auto &item : crate.items)
39 407742 : visit (item);
40 90539 : }
41 :
42 : void
43 33249015 : DefaultASTVisitor::visit (AST::Token &tok)
44 33249015 : {}
45 :
46 : void
47 4406622 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
48 : {
49 39220492 : for (auto &token : delim_tok_tree.get_token_trees ())
50 34813870 : visit (token);
51 4406622 : }
52 :
53 : void
54 31604 : DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
55 : {
56 64064 : for (auto &item : input.get_items ())
57 32460 : visit (item);
58 31604 : }
59 :
60 : void
61 27488727 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
62 : {
63 27488727 : visit_outer_attrs (ident_expr);
64 27488727 : }
65 :
66 : void
67 3534371 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
68 3534371 : {}
69 :
70 : void
71 183219 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
72 : {
73 183219 : visit_outer_attrs (lifetime_param);
74 183219 : visit (lifetime_param.get_lifetime ());
75 186373 : for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
76 3154 : visit (lifetime_bound);
77 183219 : }
78 :
79 : void
80 13509 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
81 : {
82 13509 : visit_outer_attrs (const_param);
83 13509 : if (const_param.has_type ())
84 13509 : visit (const_param.get_type ());
85 13509 : if (const_param.has_default_value ())
86 319 : visit (const_param.get_default_value_unchecked ());
87 13509 : }
88 :
89 : void
90 8344866 : DefaultASTVisitor::visit (AST::PathInExpression &path)
91 : {
92 8344866 : visit_outer_attrs (path);
93 :
94 8344866 : if (!path.is_lang_item ())
95 17947649 : for (auto &segment : path.get_segments ())
96 9636954 : visit (segment);
97 8344866 : }
98 :
99 : void
100 16449514 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
101 16449514 : {}
102 :
103 : void
104 39825 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
105 : {
106 39825 : visit (binding.get_type ());
107 39825 : }
108 :
109 : void
110 1616884 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
111 : {
112 1616884 : if (segment.has_generic_args ())
113 1616870 : visit (segment.get_generic_args ());
114 1616884 : }
115 :
116 : void
117 100380 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
118 : {
119 243240 : for (auto &input : tpf.get_params ())
120 142860 : visit (input);
121 100380 : if (tpf.has_return_type ())
122 97011 : visit (tpf.get_return_type ());
123 100380 : }
124 :
125 : void
126 21070952 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
127 21070952 : {}
128 :
129 : void
130 100380 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
131 : {
132 100380 : visit (segment.get_type_path_function ());
133 100380 : visit (segment.get_ident_segment ());
134 100380 : }
135 :
136 : void
137 1665956 : DefaultASTVisitor::visit (AST::GenericArgs &args)
138 : {
139 1836455 : for (auto &lifetime : args.get_lifetime_args ())
140 170499 : visit (lifetime);
141 :
142 3308640 : for (auto &generic : args.get_generic_args ())
143 1642684 : visit (generic);
144 :
145 1705352 : for (auto &binding : args.get_binding_args ())
146 39396 : visit (binding);
147 1665956 : }
148 :
149 : void
150 16086083 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
151 : {
152 16086083 : visit (segment.get_ident_segment ());
153 16086083 : if (segment.has_generic_args ())
154 67961 : visit (segment.get_generic_args ());
155 16086083 : }
156 : void
157 13681138 : DefaultASTVisitor::visit (AST::TypePath &path)
158 : {
159 28313138 : for (auto &segment : path.get_segments ())
160 14632000 : visit (segment);
161 13681138 : }
162 :
163 : void
164 25021 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
165 : {
166 25021 : visit_outer_attrs (path);
167 25021 : visit (path.get_qualified_path_type ());
168 :
169 50075 : for (auto &segment : path.get_segments ())
170 25054 : visit (segment);
171 25021 : }
172 :
173 : void
174 565618 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
175 : {
176 565618 : visit (path.get_type ());
177 565618 : if (path.has_as_clause ())
178 546994 : visit (path.get_as_type_path ());
179 565618 : }
180 :
181 : void
182 647294 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
183 : {
184 647294 : visit (path.get_qualified_path_type ());
185 647294 : visit (path.get_associated_segment ());
186 :
187 647294 : for (auto &segment : path.get_segments ())
188 0 : visit (segment);
189 647294 : }
190 :
191 : void
192 34397594 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
193 : {
194 34397594 : visit_outer_attrs (expr);
195 34397594 : }
196 :
197 : void
198 18284540 : DefaultASTVisitor::visit (AST::Attribute &attribute)
199 : {
200 18284540 : visit (attribute.get_path ());
201 18284540 : if (attribute.has_attr_input ())
202 15735575 : visit (attribute.get_attr_input ());
203 18284540 : }
204 :
205 : void
206 9907571 : DefaultASTVisitor::visit (AST::AttrInputLiteral &attr_input)
207 : {
208 9907571 : visit (attr_input.get_literal ());
209 9907571 : }
210 :
211 : void
212 23001 : DefaultASTVisitor::visit (AST::AttrInputExpr &attr_input)
213 : {
214 23001 : visit (attr_input.get_expr ());
215 23001 : }
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 18781912 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
225 18781912 : {}
226 :
227 : void
228 18646315 : DefaultASTVisitor::visit (AST::SimplePath &path)
229 : {
230 37428227 : for (auto &segment : path.get_segments ())
231 18781912 : visit (segment);
232 18646315 : }
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 1233586 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
243 : {
244 1233586 : visit_outer_attrs (expr);
245 1233586 : visit (expr.get_borrowed_expr ());
246 1233586 : }
247 :
248 : void
249 629066 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
250 : {
251 629066 : visit_outer_attrs (expr);
252 629066 : visit (expr.get_dereferenced_expr ());
253 629066 : }
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 190613 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
264 : {
265 190613 : visit_outer_attrs (expr);
266 190613 : visit (expr.get_negated_expr ());
267 190613 : }
268 :
269 : void
270 6339438 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
271 : {
272 6339438 : visit_outer_attrs (expr);
273 6339438 : visit (expr.get_left_expr ());
274 6339438 : visit (expr.get_right_expr ());
275 6339438 : }
276 :
277 : void
278 595906 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
279 : {
280 595906 : visit_outer_attrs (expr);
281 595906 : visit (expr.get_left_expr ());
282 595906 : visit (expr.get_right_expr ());
283 595906 : }
284 :
285 : void
286 146726 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
287 : {
288 146726 : visit_outer_attrs (expr);
289 146726 : visit (expr.get_left_expr ());
290 146726 : visit (expr.get_right_expr ());
291 146726 : }
292 :
293 : void
294 986220 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
295 : {
296 986220 : visit_outer_attrs (expr);
297 986220 : visit (expr.get_casted_expr ());
298 986220 : visit (expr.get_type_to_cast_to ());
299 986220 : }
300 :
301 : void
302 409902 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
303 : {
304 409902 : visit_outer_attrs (expr);
305 409902 : visit (expr.get_left_expr ());
306 409902 : visit (expr.get_right_expr ());
307 409902 : }
308 :
309 : void
310 242943 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
311 : {
312 242943 : visit_outer_attrs (expr);
313 242943 : visit (expr.get_left_expr ());
314 242943 : visit (expr.get_right_expr ());
315 242943 : }
316 :
317 : void
318 1162616 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
319 : {
320 1162616 : visit_outer_attrs (expr);
321 1162616 : visit_inner_attrs (expr);
322 1162616 : visit (expr.get_expr_in_parens ());
323 1162616 : }
324 :
325 : void
326 1303673 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
327 : {
328 13710406 : for (auto &value : elems.get_values ())
329 12406733 : visit (value);
330 1303673 : }
331 :
332 : void
333 11675 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
334 : {
335 11675 : visit (elems.get_elem_to_copy ());
336 11675 : visit (elems.get_num_copies ());
337 11675 : }
338 :
339 : void
340 2521132 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
341 : {
342 2521132 : visit_outer_attrs (expr);
343 2521132 : visit_inner_attrs (expr);
344 2521132 : visit (expr.get_array_elems ());
345 2521132 : }
346 :
347 : void
348 172393 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
349 : {
350 172393 : visit_outer_attrs (expr);
351 172393 : visit (expr.get_array_expr ());
352 172393 : visit (expr.get_index_expr ());
353 172393 : }
354 :
355 : void
356 450391 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
357 : {
358 450391 : visit_outer_attrs (expr);
359 450391 : visit_inner_attrs (expr);
360 1287133 : for (auto &elem : expr.get_tuple_elems ())
361 836742 : visit (elem);
362 450391 : }
363 :
364 : void
365 807086 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
366 : {
367 807086 : visit_outer_attrs (expr);
368 807086 : visit (expr.get_tuple_expr ());
369 807086 : }
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 196147 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
385 : {
386 196147 : visit (field.get_value ());
387 196147 : }
388 :
389 : void
390 748 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
391 : {
392 748 : visit (field.get_value ());
393 748 : }
394 :
395 : void
396 1785 : DefaultASTVisitor::visit (AST::StructBase &base)
397 : {
398 1785 : visit (base.get_base_struct ());
399 1785 : }
400 :
401 : void
402 160006 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
403 : {
404 160006 : visit_outer_attrs (expr);
405 160006 : visit_inner_attrs (expr);
406 160006 : visit (expr.get_struct_name ());
407 160006 : if (expr.has_struct_base ())
408 2261 : visit (expr.get_struct_base ());
409 464475 : for (auto &field : expr.get_fields ())
410 304469 : visit (field);
411 160006 : }
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 10810884 : DefaultASTVisitor::visit (AST::CallExpr &expr)
424 : {
425 10810884 : visit_outer_attrs (expr);
426 10810884 : visit (expr.get_function_expr ());
427 37718431 : for (auto ¶m : expr.get_params ())
428 26907548 : visit (param);
429 10810883 : }
430 :
431 : void
432 6424075 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
433 : {
434 6424075 : visit_outer_attrs (expr);
435 6424075 : visit (expr.get_receiver_expr ());
436 6424075 : visit (expr.get_method_name ());
437 7451999 : for (auto ¶m : expr.get_params ())
438 1027924 : visit (param);
439 6424075 : }
440 :
441 : void
442 1110816 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
443 : {
444 1110816 : visit_outer_attrs (expr);
445 1110816 : visit (expr.get_receiver_expr ());
446 1110816 : }
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 3616754 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
459 : {
460 3616754 : visit_outer_attrs (expr);
461 3616754 : visit_inner_attrs (expr);
462 :
463 3616754 : if (expr.has_label ())
464 51 : visit (expr.get_label ());
465 :
466 5763396 : for (auto &stmt : expr.get_statements ())
467 2146645 : visit (stmt);
468 :
469 3616751 : if (expr.has_tail_expr ())
470 3048839 : visit (expr.get_tail_expr ());
471 3616749 : }
472 :
473 : void
474 280 : DefaultASTVisitor::visit (AST::ConstBlock &expr)
475 : {
476 280 : visit (expr.get_const_expr ());
477 280 : }
478 :
479 : void
480 72604 : DefaultASTVisitor::visit (AST::AnonConst &expr)
481 : {
482 72604 : if (!expr.is_deferred ())
483 72381 : visit (expr.get_inner_expr ());
484 72604 : }
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 99319 : DefaultASTVisitor::visit (AST::ClosureParam ¶m)
498 : {
499 99319 : visit_outer_attrs (param);
500 99319 : visit (param.get_pattern ());
501 99319 : if (param.has_type_given ())
502 5479 : visit (param.get_type ());
503 99319 : }
504 :
505 : void
506 1982 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
507 : {
508 1982 : visit_outer_attrs (expr);
509 1982 : if (expr.has_label ())
510 765 : visit (expr.get_label_unchecked ());
511 1982 : }
512 :
513 : void
514 16021 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
515 : {
516 16021 : visit_outer_attrs (expr);
517 16021 : if (expr.has_label ())
518 831 : visit (expr.get_label_unchecked ());
519 :
520 16021 : if (expr.has_break_expr ())
521 668 : visit (expr.get_break_expr_unchecked ());
522 16020 : }
523 :
524 : void
525 55868 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
526 : {
527 55868 : visit (expr.get_from_expr ());
528 55868 : visit (expr.get_to_expr ());
529 55868 : }
530 :
531 : void
532 22301 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
533 : {
534 22301 : visit (expr.get_from_expr ());
535 22301 : }
536 :
537 : void
538 34428 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
539 : {
540 34428 : visit (expr.get_to_expr ());
541 34428 : }
542 :
543 : void
544 18543 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
545 18543 : {}
546 :
547 : void
548 1493 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
549 : {
550 1493 : visit (expr.get_from_expr ());
551 1493 : visit (expr.get_to_expr ());
552 1493 : }
553 :
554 : void
555 0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
556 : {
557 0 : visit (expr.get_to_expr ());
558 0 : }
559 :
560 : void
561 146069 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
562 : {
563 146069 : visit_outer_attrs (expr);
564 146069 : if (expr.has_returned_expr ())
565 140818 : visit (expr.get_returned_expr ());
566 146069 : }
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 630 : DefaultASTVisitor::visit (AST::BoxExpr &expr)
577 : {
578 630 : visit_outer_attrs (expr);
579 630 : visit (expr.get_boxed_expr ());
580 630 : }
581 :
582 : void
583 313622 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
584 : {
585 313622 : visit_outer_attrs (expr);
586 313622 : visit (expr.get_block_expr ());
587 313622 : }
588 :
589 : void
590 2580 : DefaultASTVisitor::visit (AST::LoopLabel &label)
591 : {
592 2580 : visit (label.get_lifetime ());
593 2580 : }
594 :
595 : void
596 15264 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
597 : {
598 15264 : visit_outer_attrs (expr);
599 15264 : if (expr.has_loop_label ())
600 1146 : visit (expr.get_loop_label ());
601 15264 : visit (expr.get_loop_block ());
602 15263 : }
603 :
604 : void
605 27849 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
606 : {
607 27849 : visit_outer_attrs (expr);
608 27849 : if (expr.has_loop_label ())
609 119 : visit (expr.get_loop_label ());
610 27849 : visit (expr.get_predicate_expr ());
611 27849 : visit (expr.get_loop_block ());
612 27849 : }
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 438464 : DefaultASTVisitor::visit (AST::IfExpr &expr)
640 : {
641 438464 : visit_outer_attrs (expr);
642 438464 : visit (expr.get_condition_expr ());
643 438464 : visit (expr.get_if_block ());
644 438464 : }
645 :
646 : void
647 279806 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
648 : {
649 279806 : visit (reinterpret_cast<AST::IfExpr &> (expr));
650 279806 : visit (expr.get_else_block ());
651 279806 : }
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 7841655 : DefaultASTVisitor::visit (AST::MatchArm &arm)
671 : {
672 7841655 : visit_outer_attrs (arm);
673 7841655 : visit (arm.get_pattern ());
674 7841655 : if (arm.has_match_arm_guard ())
675 6358 : visit (arm.get_guard_expr ());
676 7841655 : }
677 :
678 : void
679 7892823 : DefaultASTVisitor::visit (AST::MatchCase &arm)
680 : {
681 7892823 : visit (arm.get_arm ());
682 7892823 : visit (arm.get_expr ());
683 7892822 : }
684 :
685 : void
686 794801 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
687 : {
688 794801 : visit_outer_attrs (expr);
689 794801 : visit_inner_attrs (expr);
690 794801 : visit (expr.get_scrutinee_expr ());
691 8687622 : for (auto &arm : expr.get_match_cases ())
692 7892823 : visit (arm);
693 794799 : }
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 722489 : DefaultASTVisitor::visit (AST::TypeParam ¶m)
773 : {
774 722489 : visit_outer_attrs (param);
775 933266 : for (auto &bound : param.get_type_param_bounds ())
776 210777 : visit (bound);
777 722489 : if (param.has_type ())
778 6654 : visit (param.get_type ());
779 722489 : }
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 190118 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
791 : {
792 190444 : for (auto &lifetime : item.get_for_lifetimes ())
793 326 : visit (lifetime);
794 190118 : visit (item.get_type ());
795 389194 : for (auto ¶m : item.get_type_param_bounds ())
796 199076 : visit (param);
797 190118 : }
798 :
799 : void
800 6166031 : DefaultASTVisitor::visit (AST::Visibility &vis)
801 : {
802 6166031 : if (vis.has_path ())
803 68159 : visit (vis.get_path ());
804 6166031 : }
805 :
806 : void
807 3090169 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
808 3090169 : {}
809 :
810 : void
811 169936 : DefaultASTVisitor::visit (AST::WhereClause &where)
812 : {
813 401473 : for (auto &item : where.get_items ())
814 231537 : visit (item);
815 169936 : }
816 : void
817 2646666 : DefaultASTVisitor::visit (AST::FunctionParam ¶m)
818 : {
819 2646666 : visit_outer_attrs (param);
820 2646666 : if (param.has_name ())
821 2646666 : visit (param.get_pattern ());
822 :
823 2646666 : visit (param.get_type ());
824 2646666 : }
825 :
826 : void
827 1641811 : DefaultASTVisitor::visit (AST::SelfParam ¶m)
828 : {
829 1641811 : visit_outer_attrs (param);
830 :
831 1641811 : if (param.has_lifetime ())
832 775263 : visit (param.get_lifetime ());
833 :
834 1641811 : if (param.has_type ())
835 2802 : visit (param.get_type ());
836 1641811 : }
837 :
838 : void
839 51333 : DefaultASTVisitor::visit (AST::Module &module)
840 : {
841 51333 : visit_outer_attrs (module);
842 51333 : visit (module.get_visibility ());
843 51333 : visit_inner_attrs (module);
844 1374904 : for (auto &item : module.get_items ())
845 1323571 : visit (item);
846 51333 : }
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 8186 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
857 : {
858 8186 : visit (use_tree.get_path ());
859 8186 : }
860 :
861 : void
862 28447 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
863 : {
864 28447 : visit (use_tree.get_path ());
865 28447 : }
866 :
867 : void
868 59327 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
869 : {
870 59327 : visit (use_tree.get_path ());
871 59327 : }
872 :
873 : void
874 96088 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
875 : {
876 96088 : visit (use_decl.get_visibility ());
877 96088 : visit (use_decl.get_tree ());
878 96088 : }
879 :
880 : void
881 2454921 : DefaultASTVisitor::visit_function_params (AST::Function &function)
882 : {
883 6713140 : for (auto ¶m : function.get_function_params ())
884 4258219 : visit (param);
885 2454921 : }
886 :
887 : void
888 2487806 : DefaultASTVisitor::visit (AST::Function &function)
889 : {
890 2487806 : visit_outer_attrs (function);
891 2487806 : visit (function.get_visibility ());
892 2487806 : visit (function.get_qualifiers ());
893 2790879 : for (auto &generic : function.get_generic_params ())
894 303073 : visit (generic);
895 :
896 2487806 : visit_function_params (function);
897 :
898 2487806 : if (function.has_return_type ())
899 2109807 : visit (function.get_return_type ());
900 2487806 : if (function.has_where_clause ())
901 81777 : visit (function.get_where_clause ());
902 2487806 : if (function.has_body ())
903 2247575 : visit (*function.get_definition ());
904 2487804 : }
905 :
906 : void
907 483688 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
908 : {
909 483688 : visit_outer_attrs (type_alias);
910 483688 : visit (type_alias.get_visibility ());
911 484172 : for (auto &generic : type_alias.get_generic_params ())
912 484 : visit (generic);
913 483688 : if (type_alias.has_where_clause ())
914 0 : visit (type_alias.get_where_clause ());
915 483688 : visit (type_alias.get_type_aliased ());
916 483688 : }
917 :
918 : void
919 114486 : DefaultASTVisitor::visit (AST::StructField &field)
920 : {
921 114486 : visit_outer_attrs (field);
922 114486 : visit (field.get_visibility ());
923 114486 : visit (field.get_field_type ());
924 114486 : }
925 :
926 : void
927 261352 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
928 : {
929 261352 : visit_outer_attrs (struct_item);
930 261352 : visit (struct_item.get_visibility ());
931 345310 : for (auto &generic : struct_item.get_generic_params ())
932 83958 : visit (generic);
933 261352 : if (struct_item.has_where_clause ())
934 2910 : visit (struct_item.get_where_clause ());
935 408445 : for (auto &field : struct_item.get_fields ())
936 147093 : visit (field);
937 261352 : }
938 :
939 : void
940 110997 : DefaultASTVisitor::visit (AST::TupleField &field)
941 : {
942 110997 : visit_outer_attrs (field);
943 110997 : visit (field.get_visibility ());
944 110997 : visit (field.get_field_type ());
945 110997 : }
946 :
947 : void
948 45669 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
949 : {
950 45669 : visit_outer_attrs (tuple_struct);
951 45669 : visit (tuple_struct.get_visibility ());
952 64461 : for (auto &generic : tuple_struct.get_generic_params ())
953 18792 : visit (generic);
954 45669 : if (tuple_struct.has_where_clause ())
955 261 : visit (tuple_struct.get_where_clause ());
956 186388 : for (auto &field : tuple_struct.get_fields ())
957 140719 : visit (field);
958 45669 : }
959 :
960 : void
961 44040 : DefaultASTVisitor::visit (AST::EnumItem &item)
962 : {
963 44040 : visit_outer_attrs (item);
964 44040 : visit (item.get_visibility ());
965 44040 : }
966 :
967 : void
968 16202 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
969 : {
970 16202 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
971 34063 : for (auto &field : item.get_tuple_fields ())
972 17861 : visit (field);
973 16202 : }
974 :
975 : void
976 2031 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
977 : {
978 2031 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
979 5383 : for (auto &field : item.get_struct_fields ())
980 3352 : visit (field);
981 2031 : }
982 :
983 : void
984 6496 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
985 : {
986 6496 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
987 6496 : visit (item.get_expr ());
988 6496 : }
989 :
990 : void
991 21380 : DefaultASTVisitor::visit (AST::Enum &enum_item)
992 : {
993 21380 : visit_outer_attrs (enum_item);
994 21380 : visit (enum_item.get_visibility ());
995 32644 : for (auto &generic : enum_item.get_generic_params ())
996 11264 : visit (generic);
997 21380 : if (enum_item.has_where_clause ())
998 31 : visit (enum_item.get_where_clause ());
999 74551 : for (auto &item : enum_item.get_variants ())
1000 53171 : visit (item);
1001 21380 : }
1002 :
1003 : void
1004 2875 : DefaultASTVisitor::visit (AST::Union &union_item)
1005 : {
1006 2875 : visit_outer_attrs (union_item);
1007 2875 : visit (union_item.get_visibility ());
1008 5011 : for (auto &generic : union_item.get_generic_params ())
1009 2136 : visit (generic);
1010 2875 : if (union_item.has_where_clause ())
1011 0 : visit (union_item.get_where_clause ());
1012 10934 : for (auto &variant : union_item.get_variants ())
1013 8059 : visit (variant);
1014 2875 : }
1015 :
1016 : void
1017 120885 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
1018 : {
1019 120885 : visit_outer_attrs (const_item);
1020 120885 : visit (const_item.get_visibility ());
1021 120885 : visit (const_item.get_type ());
1022 120885 : if (const_item.has_expr ())
1023 116793 : visit (const_item.get_expr ());
1024 120885 : }
1025 :
1026 : void
1027 6256 : DefaultASTVisitor::visit (AST::StaticItem &static_item)
1028 : {
1029 6256 : visit_outer_attrs (static_item);
1030 6256 : visit (static_item.get_visibility ());
1031 6256 : visit (static_item.get_type ());
1032 6256 : visit (static_item.get_expr ());
1033 6256 : }
1034 :
1035 : void
1036 32357 : DefaultASTVisitor::visit (AST::TraitItemType &item)
1037 : {
1038 32357 : visit_outer_attrs (item);
1039 32771 : for (auto &generic : item.get_generic_params ())
1040 414 : visit (generic);
1041 39220 : for (auto &bound : item.get_type_param_bounds ())
1042 6863 : visit (bound);
1043 32357 : }
1044 :
1045 : void
1046 60570 : DefaultASTVisitor::visit (AST::Trait &trait)
1047 : {
1048 60570 : visit_outer_attrs (trait);
1049 60570 : visit (trait.get_visibility ());
1050 :
1051 60570 : visit_inner_attrs (trait);
1052 :
1053 60570 : visit (trait.get_implicit_self ());
1054 :
1055 74430 : for (auto &generic : trait.get_generic_params ())
1056 13860 : visit (generic);
1057 :
1058 60570 : if (trait.has_where_clause ())
1059 91 : visit (trait.get_where_clause ());
1060 :
1061 74562 : for (auto &bound : trait.get_type_param_bounds ())
1062 13992 : visit (bound);
1063 :
1064 135145 : for (auto &item : trait.get_trait_items ())
1065 74575 : visit (item);
1066 60570 : }
1067 :
1068 : void
1069 35794 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
1070 : {
1071 35794 : visit_outer_attrs (impl);
1072 35794 : visit (impl.get_visibility ());
1073 :
1074 64420 : for (auto &generic : impl.get_generic_params ())
1075 28626 : visit (generic);
1076 35794 : if (impl.has_where_clause ())
1077 236 : visit (impl.get_where_clause ());
1078 35794 : visit (impl.get_type ());
1079 35794 : visit_inner_attrs (impl);
1080 240531 : for (auto &item : impl.get_impl_items ())
1081 204737 : visit (item);
1082 35794 : }
1083 :
1084 : void
1085 548285 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
1086 : {
1087 548285 : visit_outer_attrs (impl);
1088 548285 : visit (impl.get_visibility ());
1089 :
1090 1048138 : for (auto &generic : impl.get_generic_params ())
1091 499853 : visit (generic);
1092 548285 : if (impl.has_where_clause ())
1093 28319 : visit (impl.get_where_clause ());
1094 548285 : visit (impl.get_type ());
1095 548285 : visit (impl.get_trait_path ());
1096 548285 : visit_inner_attrs (impl);
1097 1316822 : for (auto &item : impl.get_impl_items ())
1098 768537 : visit (item);
1099 548285 : }
1100 :
1101 : void
1102 211 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
1103 : {
1104 211 : visit_outer_attrs (item);
1105 211 : visit (item.get_visibility ());
1106 211 : }
1107 :
1108 : void
1109 16 : DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
1110 : {
1111 16 : visit_outer_attrs (item);
1112 16 : visit (item.get_visibility ());
1113 16 : visit (item.get_type ());
1114 16 : }
1115 :
1116 : void
1117 30304 : DefaultASTVisitor::visit (AST::ExternBlock &block)
1118 : {
1119 30304 : visit_outer_attrs (block);
1120 30304 : visit (block.get_visibility ());
1121 30304 : visit_inner_attrs (block);
1122 163255 : for (auto &item : block.get_extern_items ())
1123 132951 : visit (item);
1124 30304 : }
1125 :
1126 : void
1127 225229 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
1128 225229 : {}
1129 :
1130 : void
1131 31035 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
1132 : {
1133 75801 : for (auto &m : match.get_matches ())
1134 44766 : visit (m);
1135 31035 : }
1136 :
1137 : void
1138 115553 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
1139 : {
1140 474352 : for (auto &m : matcher.get_matches ())
1141 358799 : visit (m);
1142 115553 : }
1143 :
1144 : void
1145 109865 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
1146 : {
1147 109865 : visit (transcriber.get_token_tree ());
1148 109865 : }
1149 :
1150 : void
1151 109865 : DefaultASTVisitor::visit (AST::MacroRule &rule)
1152 : {
1153 109865 : visit (rule.get_matcher ());
1154 109865 : visit (rule.get_transcriber ());
1155 109865 : }
1156 : void
1157 99923 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
1158 : {
1159 99923 : visit_outer_attrs (rules_def);
1160 209788 : for (auto &rule : rules_def.get_macro_rules ())
1161 109865 : visit (rule);
1162 99923 : }
1163 :
1164 : void
1165 178630 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
1166 : {
1167 178630 : visit (data.get_path ());
1168 178630 : visit (data.get_delim_tok_tree ());
1169 178630 : }
1170 : void
1171 178630 : DefaultASTVisitor::visit (AST::MacroInvocation ¯o_invoc)
1172 : {
1173 178630 : visit_outer_attrs (macro_invoc);
1174 178630 : visit (macro_invoc.get_invoc_data ());
1175 178630 : }
1176 :
1177 : void
1178 2662 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
1179 : {
1180 2662 : visit (meta_item.get_path ());
1181 2662 : }
1182 :
1183 : void
1184 16363 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
1185 : {
1186 16363 : visit (meta_item.get_path ());
1187 37448 : for (auto &inner : meta_item.get_seq ())
1188 21085 : visit (inner);
1189 16363 : }
1190 :
1191 : void
1192 12202 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
1193 12202 : {}
1194 :
1195 : void
1196 30077 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
1197 30077 : {}
1198 :
1199 : void
1200 0 : DefaultASTVisitor::visit (AST::MetaListPaths &meta_item)
1201 : {
1202 0 : for (auto &path : meta_item.get_paths ())
1203 0 : visit (path);
1204 0 : }
1205 :
1206 : void
1207 0 : DefaultASTVisitor::visit (AST::MetaListNameValueStr &meta_item)
1208 : {
1209 0 : for (auto &str : meta_item.get_values ())
1210 0 : visit (str);
1211 0 : }
1212 :
1213 : void
1214 10473502 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
1215 10473502 : {}
1216 :
1217 : void
1218 1871497 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
1219 : {
1220 1871497 : if (pattern.has_subpattern ())
1221 2796 : visit (pattern.get_subpattern ());
1222 1871497 : }
1223 :
1224 : void
1225 1050737 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
1226 1050737 : {}
1227 :
1228 : void
1229 3673 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
1230 3673 : {}
1231 :
1232 : void
1233 47342 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
1234 47342 : {}
1235 :
1236 : void
1237 404 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
1238 : {
1239 404 : visit (bound.get_path ());
1240 404 : }
1241 :
1242 : void
1243 0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
1244 : {
1245 0 : visit (bound.get_qualified_path ());
1246 0 : }
1247 :
1248 : void
1249 18479 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
1250 : {
1251 18479 : if (pattern.get_has_lower_bound ())
1252 18479 : visit (pattern.get_lower_bound ());
1253 18479 : if (pattern.get_has_upper_bound ())
1254 18479 : visit (pattern.get_upper_bound ());
1255 18479 : }
1256 :
1257 : void
1258 48205 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
1259 : {
1260 48205 : visit (pattern.get_referenced_pattern ());
1261 48205 : }
1262 :
1263 : void
1264 527 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
1265 : {
1266 527 : visit_outer_attrs (field);
1267 527 : visit (field.get_index_pattern ());
1268 527 : }
1269 :
1270 : void
1271 10522 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
1272 : {
1273 10522 : visit_outer_attrs (field);
1274 10522 : visit (field.get_ident_pattern ());
1275 10522 : }
1276 :
1277 : void
1278 4610 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
1279 : {
1280 4610 : visit_outer_attrs (field);
1281 4610 : }
1282 :
1283 : void
1284 11939 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
1285 : {
1286 28876 : for (auto &field : spe.get_struct_pattern_fields ())
1287 16937 : visit (field);
1288 11939 : for (auto &attribute : spe.get_etc_outer_attrs ())
1289 0 : visit (attribute);
1290 11939 : }
1291 :
1292 : void
1293 11939 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
1294 : {
1295 11939 : visit (pattern.get_path ());
1296 11939 : visit (pattern.get_struct_pattern_elems ());
1297 11939 : }
1298 :
1299 : void
1300 198220 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRest &tuple_items)
1301 : {
1302 403771 : for (auto &pattern : tuple_items.get_patterns ())
1303 205551 : visit (pattern);
1304 198220 : }
1305 :
1306 : void
1307 2227 : DefaultASTVisitor::visit (AST::TupleStructItemsHasRest &tuple_items)
1308 : {
1309 2853 : for (auto &lower : tuple_items.get_lower_patterns ())
1310 626 : visit (lower);
1311 2610 : for (auto &upper : tuple_items.get_upper_patterns ())
1312 383 : visit (upper);
1313 2227 : }
1314 :
1315 : void
1316 263080 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
1317 : {
1318 263080 : visit (pattern.get_path ());
1319 263080 : visit (pattern.get_items ());
1320 263080 : }
1321 :
1322 : void
1323 507455 : DefaultASTVisitor::visit (AST::TuplePatternItemsNoRest &tuple_items)
1324 : {
1325 1665534 : for (auto &pattern : tuple_items.get_patterns ())
1326 1158079 : visit (pattern);
1327 507455 : }
1328 :
1329 : void
1330 643 : DefaultASTVisitor::visit (AST::TuplePatternItemsHasRest &tuple_items)
1331 : {
1332 1196 : for (auto &lower : tuple_items.get_lower_patterns ())
1333 553 : visit (lower);
1334 1241 : for (auto &upper : tuple_items.get_upper_patterns ())
1335 598 : visit (upper);
1336 643 : }
1337 :
1338 : void
1339 686248 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
1340 : {
1341 686248 : visit (pattern.get_items ());
1342 686248 : }
1343 :
1344 : void
1345 861 : DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
1346 : {
1347 861 : visit (pattern.get_pattern_in_parens ());
1348 861 : }
1349 :
1350 : void
1351 4479 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
1352 : {
1353 14161 : for (auto &pat : pattern.get_patterns ())
1354 9682 : visit (pat);
1355 4479 : }
1356 :
1357 : void
1358 10725 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
1359 : {
1360 37375 : for (auto &alt : pattern.get_alts ())
1361 26650 : visit (alt);
1362 10725 : }
1363 :
1364 : void
1365 1474 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
1366 1474 : {}
1367 :
1368 : void
1369 1120208 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
1370 : {
1371 1120208 : visit_outer_attrs (stmt);
1372 1120208 : visit (stmt.get_pattern ());
1373 1120208 : if (stmt.has_type ())
1374 129875 : visit (stmt.get_type ());
1375 1120208 : if (stmt.has_init_expr ())
1376 1074413 : visit (stmt.get_init_expr ());
1377 1120208 : }
1378 :
1379 : void
1380 1491306 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
1381 : {
1382 1491306 : visit (stmt.get_expr ());
1383 1491304 : }
1384 :
1385 : void
1386 727401 : DefaultASTVisitor::visit (AST::TraitBound &bound)
1387 : {
1388 727717 : for (auto &lifetime : bound.get_for_lifetimes ())
1389 316 : visit (lifetime);
1390 727401 : visit (bound.get_type_path ());
1391 727401 : }
1392 :
1393 : void
1394 18085 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
1395 : {
1396 36836 : for (auto &bound : type.get_type_param_bounds ())
1397 18751 : visit (bound);
1398 18085 : }
1399 :
1400 : void
1401 13028 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
1402 : {
1403 39704 : for (auto &bound : type.get_type_param_bounds ())
1404 26676 : visit (bound);
1405 13028 : }
1406 :
1407 : void
1408 1897 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
1409 : {
1410 1897 : visit (type.get_type_in_parens ());
1411 1897 : }
1412 :
1413 : void
1414 35237 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
1415 : {
1416 35237 : visit (type.get_trait_bound ());
1417 35237 : }
1418 :
1419 : void
1420 9063 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
1421 : {
1422 9063 : visit (type.get_trait_bound ());
1423 9063 : }
1424 :
1425 : void
1426 195345 : DefaultASTVisitor::visit (AST::TupleType &type)
1427 : {
1428 627120 : for (auto &elem : type.get_elems ())
1429 431775 : visit (elem);
1430 195345 : }
1431 :
1432 : void
1433 17293 : DefaultASTVisitor::visit (AST::NeverType &type)
1434 17293 : {}
1435 :
1436 : void
1437 415455 : DefaultASTVisitor::visit (AST::RawPointerType &type)
1438 : {
1439 415455 : visit (type.get_type_pointed_to ());
1440 415455 : }
1441 :
1442 : void
1443 1659901 : DefaultASTVisitor::visit (AST::ReferenceType &type)
1444 : {
1445 1659901 : visit (type.get_lifetime ());
1446 1659901 : visit (type.get_base_type ());
1447 1659901 : }
1448 :
1449 : void
1450 72385 : DefaultASTVisitor::visit (AST::ArrayType &type)
1451 : {
1452 72385 : visit (type.get_elem_type ());
1453 72385 : visit (type.get_size_expr ());
1454 72385 : }
1455 :
1456 : void
1457 139946 : DefaultASTVisitor::visit (AST::SliceType &type)
1458 : {
1459 139946 : visit (type.get_elem_type ());
1460 139946 : }
1461 :
1462 : void
1463 63321 : DefaultASTVisitor::visit (AST::InferredType &type)
1464 63321 : {}
1465 :
1466 : void
1467 460181 : DefaultASTVisitor::visit (AST::MaybeNamedParam ¶m)
1468 : {
1469 460181 : visit_outer_attrs (param);
1470 460181 : visit (param.get_type ());
1471 460181 : }
1472 :
1473 : void
1474 78336 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
1475 : {
1476 78401 : for (auto &lifetime : type.get_for_lifetimes ())
1477 65 : visit (lifetime);
1478 78336 : visit (type.get_function_qualifiers ());
1479 538517 : for (auto ¶m : type.get_function_params ())
1480 460181 : visit (param);
1481 78336 : if (type.is_variadic ())
1482 23352 : for (auto attr : type.get_variadic_attr ())
1483 0 : visit (attr);
1484 78336 : if (type.has_return_type ())
1485 76203 : visit (type.get_return_type ());
1486 78336 : }
1487 :
1488 : void
1489 0 : DefaultASTVisitor::visit (AST::FormatArgs &)
1490 : {
1491 : // FIXME: Do we have anything to do? any subnodes to visit? Probably, right?
1492 0 : }
1493 :
1494 : void
1495 170 : DefaultASTVisitor::visit (AST::OffsetOf &offset_of)
1496 : {
1497 170 : visit (offset_of.get_type ());
1498 170 : }
1499 :
1500 : void
1501 14797 : DefaultASTVisitor::visit (AST::VariadicParam ¶m)
1502 : {
1503 14797 : if (param.has_pattern ())
1504 176 : visit (param.get_pattern ());
1505 14797 : }
1506 :
1507 : void
1508 4975 : ContextualASTVisitor::visit (AST::Crate &crate)
1509 : {
1510 4975 : ctx.enter (Kind::CRATE);
1511 4975 : DefaultASTVisitor::visit (crate);
1512 4975 : ctx.exit ();
1513 4975 : }
1514 :
1515 : void
1516 1535 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
1517 : {
1518 1535 : ctx.enter (Kind::INHERENT_IMPL);
1519 1535 : DefaultASTVisitor::visit (impl);
1520 1535 : ctx.exit ();
1521 1535 : }
1522 :
1523 : void
1524 13160 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
1525 : {
1526 13160 : ctx.enter (Kind::TRAIT_IMPL);
1527 13160 : DefaultASTVisitor::visit (impl);
1528 13160 : ctx.exit ();
1529 13160 : }
1530 :
1531 : void
1532 4466 : ContextualASTVisitor::visit (AST::Trait &trait)
1533 : {
1534 4466 : ctx.enter (Kind::TRAIT);
1535 4466 : DefaultASTVisitor::visit (trait);
1536 4466 : ctx.exit ();
1537 4466 : }
1538 :
1539 : void
1540 34844 : ContextualASTVisitor::visit (AST::Function &function)
1541 : {
1542 34844 : ctx.enter (Kind::FUNCTION);
1543 34844 : DefaultASTVisitor::visit (function);
1544 34844 : ctx.exit ();
1545 34844 : }
1546 :
1547 : } // namespace AST
1548 : } // namespace Rust
|