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 74445 : DefaultASTVisitor::visit (AST::Crate &crate)
36 : {
37 74445 : visit_inner_attrs (crate);
38 389303 : for (auto &item : crate.items)
39 314859 : visit (item);
40 74444 : }
41 :
42 : void
43 1435051 : DefaultASTVisitor::visit (AST::Token &tok)
44 1435051 : {}
45 :
46 : void
47 291510 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
48 : {
49 1811785 : for (auto &token : delim_tok_tree.get_token_trees ())
50 1520275 : visit (token);
51 291510 : }
52 :
53 : void
54 6469 : DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
55 : {
56 13095 : for (auto &item : input.get_items ())
57 6626 : visit (item);
58 6469 : }
59 :
60 : void
61 455637 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
62 : {
63 455637 : visit_outer_attrs (ident_expr);
64 455637 : }
65 :
66 : void
67 209238 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
68 209238 : {}
69 :
70 : void
71 3687 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
72 : {
73 3687 : visit_outer_attrs (lifetime_param);
74 3687 : visit (lifetime_param.get_lifetime ());
75 3701 : for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
76 14 : visit (lifetime_bound);
77 3687 : }
78 :
79 : void
80 1391 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
81 : {
82 1391 : visit_outer_attrs (const_param);
83 1391 : if (const_param.has_type ())
84 1391 : visit (const_param.get_type ());
85 1391 : if (const_param.has_default_value ())
86 251 : visit (const_param.get_default_value_unchecked ());
87 1391 : }
88 :
89 : void
90 298104 : DefaultASTVisitor::visit (AST::PathInExpression &path)
91 : {
92 298104 : visit_outer_attrs (path);
93 :
94 298104 : if (!path.is_lang_item ())
95 702252 : for (auto &segment : path.get_segments ())
96 405290 : visit (segment);
97 298104 : }
98 :
99 : void
100 1222481 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
101 1222481 : {}
102 :
103 : void
104 924 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
105 : {
106 924 : visit (binding.get_type ());
107 924 : }
108 :
109 : void
110 34775 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
111 : {
112 34775 : if (segment.has_generic_args ())
113 34763 : visit (segment.get_generic_args ());
114 34775 : }
115 :
116 : void
117 409 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
118 : {
119 844 : for (auto &input : tpf.get_params ())
120 435 : visit (input);
121 409 : if (tpf.has_return_type ())
122 383 : visit (tpf.get_return_type ());
123 409 : }
124 :
125 : void
126 584860 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
127 584860 : {}
128 :
129 : void
130 409 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
131 : {
132 409 : visit (segment.get_type_path_function ());
133 409 : visit (segment.get_ident_segment ());
134 409 : }
135 :
136 : void
137 41565 : DefaultASTVisitor::visit (AST::GenericArgs &args)
138 : {
139 42009 : for (auto &lifetime : args.get_lifetime_args ())
140 444 : visit (lifetime);
141 :
142 85078 : for (auto &generic : args.get_generic_args ())
143 43513 : visit (generic);
144 :
145 42417 : for (auto &binding : args.get_binding_args ())
146 852 : visit (binding);
147 41565 : }
148 :
149 : void
150 459399 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
151 : {
152 459399 : visit (segment.get_ident_segment ());
153 459399 : if (segment.has_generic_args ())
154 10475 : visit (segment.get_generic_args ());
155 459399 : }
156 : void
157 933560 : DefaultASTVisitor::visit (AST::TypePath &path)
158 : {
159 1897307 : for (auto &segment : path.get_segments ())
160 963747 : visit (segment);
161 933560 : }
162 :
163 : void
164 1816 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
165 : {
166 1816 : visit_outer_attrs (path);
167 1816 : visit (path.get_qualified_path_type ());
168 :
169 3632 : for (auto &segment : path.get_segments ())
170 1816 : visit (segment);
171 1816 : }
172 :
173 : void
174 6645 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
175 : {
176 6645 : visit (path.get_type ());
177 6645 : if (path.has_as_clause ())
178 6045 : visit (path.get_as_type_path ());
179 6645 : }
180 :
181 : void
182 5867 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
183 : {
184 5867 : visit (path.get_qualified_path_type ());
185 5867 : visit (path.get_associated_segment ());
186 :
187 5867 : for (auto &segment : path.get_segments ())
188 0 : visit (segment);
189 5867 : }
190 :
191 : void
192 2056493 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
193 : {
194 2056493 : visit_outer_attrs (expr);
195 2056493 : }
196 :
197 : void
198 585537 : DefaultASTVisitor::visit (AST::Attribute &attribute)
199 : {
200 585537 : visit (attribute.get_path ());
201 585537 : if (attribute.has_attr_input ())
202 462555 : visit (attribute.get_attr_input ());
203 585537 : }
204 :
205 : void
206 243238 : DefaultASTVisitor::visit (AST::AttrInputLiteral &attr_input)
207 : {
208 243238 : visit (attr_input.get_literal ());
209 243238 : }
210 :
211 : void
212 52 : DefaultASTVisitor::visit (AST::AttrInputExpr &attr_input)
213 : {
214 52 : visit (attr_input.get_expr ());
215 52 : }
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 617422 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
225 617422 : {}
226 :
227 : void
228 603844 : DefaultASTVisitor::visit (AST::SimplePath &path)
229 : {
230 1221266 : for (auto &segment : path.get_segments ())
231 617422 : visit (segment);
232 603844 : }
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 37337 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
243 : {
244 37337 : visit_outer_attrs (expr);
245 37337 : visit (expr.get_borrowed_expr ());
246 37337 : }
247 :
248 : void
249 46321 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
250 : {
251 46321 : visit_outer_attrs (expr);
252 46321 : visit (expr.get_dereferenced_expr ());
253 46321 : }
254 :
255 : void
256 9 : DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
257 : {
258 9 : visit_outer_attrs (expr);
259 9 : visit (expr.get_propagating_expr ());
260 9 : }
261 :
262 : void
263 11782 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
264 : {
265 11782 : visit_outer_attrs (expr);
266 11782 : visit (expr.get_negated_expr ());
267 11782 : }
268 :
269 : void
270 1631930 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
271 : {
272 1631930 : visit_outer_attrs (expr);
273 1631930 : visit (expr.get_left_expr ());
274 1631930 : visit (expr.get_right_expr ());
275 1631930 : }
276 :
277 : void
278 57628 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
279 : {
280 57628 : visit_outer_attrs (expr);
281 57628 : visit (expr.get_left_expr ());
282 57628 : visit (expr.get_right_expr ());
283 57628 : }
284 :
285 : void
286 5761 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
287 : {
288 5761 : visit_outer_attrs (expr);
289 5761 : visit (expr.get_left_expr ());
290 5761 : visit (expr.get_right_expr ());
291 5761 : }
292 :
293 : void
294 110836 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
295 : {
296 110836 : visit_outer_attrs (expr);
297 110836 : visit (expr.get_casted_expr ());
298 110836 : visit (expr.get_type_to_cast_to ());
299 110836 : }
300 :
301 : void
302 41794 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
303 : {
304 41794 : visit_outer_attrs (expr);
305 41794 : visit (expr.get_left_expr ());
306 41794 : visit (expr.get_right_expr ());
307 41794 : }
308 :
309 : void
310 13360 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
311 : {
312 13360 : visit_outer_attrs (expr);
313 13360 : visit (expr.get_left_expr ());
314 13360 : visit (expr.get_right_expr ());
315 13360 : }
316 :
317 : void
318 5835 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
319 : {
320 5835 : visit_outer_attrs (expr);
321 5835 : visit_inner_attrs (expr);
322 5835 : visit (expr.get_expr_in_parens ());
323 5835 : }
324 :
325 : void
326 3317 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
327 : {
328 18971 : for (auto &value : elems.get_values ())
329 15654 : visit (value);
330 3317 : }
331 :
332 : void
333 1817 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
334 : {
335 1817 : visit (elems.get_elem_to_copy ());
336 1817 : visit (elems.get_num_copies ());
337 1817 : }
338 :
339 : void
340 6298 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
341 : {
342 6298 : visit_outer_attrs (expr);
343 6298 : visit_inner_attrs (expr);
344 6298 : visit (expr.get_array_elems ());
345 6298 : }
346 :
347 : void
348 4668 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
349 : {
350 4668 : visit_outer_attrs (expr);
351 4668 : visit (expr.get_array_expr ());
352 4668 : visit (expr.get_index_expr ());
353 4668 : }
354 :
355 : void
356 6276 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
357 : {
358 6276 : visit_outer_attrs (expr);
359 6276 : visit_inner_attrs (expr);
360 17176 : for (auto &elem : expr.get_tuple_elems ())
361 10900 : visit (elem);
362 6276 : }
363 :
364 : void
365 15573 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
366 : {
367 15573 : visit_outer_attrs (expr);
368 15573 : visit (expr.get_tuple_expr ());
369 15573 : }
370 :
371 : void
372 1054 : DefaultASTVisitor::visit (AST::StructExprStruct &expr)
373 : {
374 1054 : visit_outer_attrs (expr);
375 1054 : visit_inner_attrs (expr);
376 1054 : visit (expr.get_struct_name ());
377 1054 : }
378 :
379 : void
380 3905 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
381 3905 : {}
382 :
383 : void
384 32594 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
385 : {
386 32594 : visit (field.get_value ());
387 32594 : }
388 :
389 : void
390 660 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
391 : {
392 660 : visit (field.get_value ());
393 660 : }
394 :
395 : void
396 945 : DefaultASTVisitor::visit (AST::StructBase &base)
397 : {
398 945 : visit (base.get_base_struct ());
399 945 : }
400 :
401 : void
402 26665 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
403 : {
404 26665 : visit_outer_attrs (expr);
405 26665 : visit_inner_attrs (expr);
406 26665 : visit (expr.get_struct_name ());
407 26665 : if (expr.has_struct_base ())
408 1197 : visit (expr.get_struct_base ());
409 73004 : for (auto &field : expr.get_fields ())
410 46339 : visit (field);
411 26665 : }
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 222900 : DefaultASTVisitor::visit (AST::CallExpr &expr)
424 : {
425 222900 : visit_outer_attrs (expr);
426 222900 : visit (expr.get_function_expr ());
427 469965 : for (auto ¶m : expr.get_params ())
428 247065 : visit (param);
429 222900 : }
430 :
431 : void
432 52293 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
433 : {
434 52293 : visit_outer_attrs (expr);
435 52293 : visit (expr.get_receiver_expr ());
436 52293 : visit (expr.get_method_name ());
437 88442 : for (auto ¶m : expr.get_params ())
438 36149 : visit (param);
439 52293 : }
440 :
441 : void
442 88460 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
443 : {
444 88460 : visit_outer_attrs (expr);
445 88460 : visit (expr.get_receiver_expr ());
446 88460 : }
447 :
448 : void
449 316 : DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
450 : {
451 316 : visit_outer_attrs (expr);
452 548 : for (auto ¶m : expr.get_params ())
453 232 : visit (param);
454 316 : visit (expr.get_definition_expr ());
455 316 : }
456 :
457 : void
458 374112 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
459 : {
460 374112 : visit_outer_attrs (expr);
461 374112 : visit_inner_attrs (expr);
462 :
463 374112 : if (expr.has_label ())
464 0 : visit (expr.get_label ());
465 :
466 736160 : for (auto &stmt : expr.get_statements ())
467 362049 : visit (stmt);
468 :
469 374111 : if (expr.has_tail_expr ())
470 269406 : visit (expr.get_tail_expr ());
471 374111 : }
472 :
473 : void
474 257 : DefaultASTVisitor::visit (AST::ConstBlock &expr)
475 : {
476 257 : visit (expr.get_const_expr ());
477 257 : }
478 :
479 : void
480 12751 : DefaultASTVisitor::visit (AST::AnonConst &expr)
481 : {
482 12751 : if (!expr.is_deferred ())
483 12579 : visit (expr.get_inner_expr ());
484 12751 : }
485 :
486 : void
487 270 : DefaultASTVisitor::visit (AST::ClosureExprInnerTyped &expr)
488 : {
489 270 : visit_outer_attrs (expr);
490 603 : for (auto ¶m : expr.get_params ())
491 333 : visit (param);
492 270 : visit (expr.get_return_type ());
493 270 : visit (expr.get_definition_expr ());
494 270 : }
495 :
496 : void
497 943 : DefaultASTVisitor::visit (AST::ClosureParam ¶m)
498 : {
499 943 : visit_outer_attrs (param);
500 943 : visit (param.get_pattern ());
501 943 : if (param.has_type_given ())
502 870 : visit (param.get_type ());
503 943 : }
504 :
505 : void
506 187 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
507 : {
508 187 : visit_outer_attrs (expr);
509 187 : if (expr.has_label ())
510 33 : visit (expr.get_label_unchecked ());
511 187 : }
512 :
513 : void
514 1615 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
515 : {
516 1615 : visit_outer_attrs (expr);
517 1615 : if (expr.has_label ())
518 353 : visit (expr.get_label_unchecked ());
519 :
520 1615 : if (expr.has_break_expr ())
521 490 : visit (expr.get_break_expr_unchecked ());
522 1614 : }
523 :
524 : void
525 1143 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
526 : {
527 1143 : visit (expr.get_from_expr ());
528 1143 : visit (expr.get_to_expr ());
529 1143 : }
530 :
531 : void
532 105 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
533 : {
534 105 : visit (expr.get_from_expr ());
535 105 : }
536 :
537 : void
538 105 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
539 : {
540 105 : visit (expr.get_to_expr ());
541 105 : }
542 :
543 : void
544 0 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
545 0 : {}
546 :
547 : void
548 105 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
549 : {
550 105 : visit (expr.get_from_expr ());
551 105 : visit (expr.get_to_expr ());
552 105 : }
553 :
554 : void
555 0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
556 : {
557 0 : visit (expr.get_to_expr ());
558 0 : }
559 :
560 : void
561 9119 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
562 : {
563 9119 : visit_outer_attrs (expr);
564 9119 : if (expr.has_returned_expr ())
565 8394 : visit (expr.get_returned_expr ());
566 9119 : }
567 :
568 : void
569 9 : DefaultASTVisitor::visit (AST::TryExpr &expr)
570 : {
571 9 : visit_outer_attrs (expr);
572 9 : visit (expr.get_block_expr ());
573 9 : }
574 :
575 : void
576 15 : DefaultASTVisitor::visit (AST::BoxExpr &expr)
577 : {
578 15 : visit_outer_attrs (expr);
579 15 : visit (expr.get_boxed_expr ());
580 15 : }
581 :
582 : void
583 58626 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
584 : {
585 58626 : visit_outer_attrs (expr);
586 58626 : visit (expr.get_block_expr ());
587 58626 : }
588 :
589 : void
590 1070 : DefaultASTVisitor::visit (AST::LoopLabel &label)
591 : {
592 1070 : visit (label.get_lifetime ());
593 1070 : }
594 :
595 : void
596 1716 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
597 : {
598 1716 : visit_outer_attrs (expr);
599 1716 : if (expr.has_loop_label ())
600 500 : visit (expr.get_loop_label ());
601 1716 : visit (expr.get_loop_block ());
602 1716 : }
603 :
604 : void
605 1456 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
606 : {
607 1456 : visit_outer_attrs (expr);
608 1456 : if (expr.has_loop_label ())
609 28 : visit (expr.get_loop_label ());
610 1456 : visit (expr.get_predicate_expr ());
611 1456 : visit (expr.get_loop_block ());
612 1456 : }
613 :
614 : void
615 14 : DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
616 : {
617 14 : visit_outer_attrs (expr);
618 14 : visit (expr.get_pattern ());
619 :
620 14 : if (expr.has_loop_label ())
621 0 : visit (expr.get_loop_label ());
622 :
623 14 : visit (expr.get_scrutinee_expr ());
624 14 : visit (expr.get_loop_block ());
625 14 : }
626 :
627 : void
628 264 : DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
629 : {
630 264 : visit_outer_attrs (expr);
631 264 : visit (expr.get_pattern ());
632 264 : visit (expr.get_iterator_expr ());
633 264 : if (expr.has_loop_label ())
634 0 : visit (expr.get_loop_label ());
635 264 : visit (expr.get_loop_block ());
636 264 : }
637 :
638 : void
639 40414 : DefaultASTVisitor::visit (AST::IfExpr &expr)
640 : {
641 40414 : visit_outer_attrs (expr);
642 40414 : visit (expr.get_condition_expr ());
643 40414 : visit (expr.get_if_block ());
644 40414 : }
645 :
646 : void
647 24953 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
648 : {
649 24953 : visit (reinterpret_cast<AST::IfExpr &> (expr));
650 24953 : visit (expr.get_else_block ());
651 24953 : }
652 :
653 : void
654 252 : DefaultASTVisitor::visit (AST::IfLetExpr &expr)
655 : {
656 252 : visit_outer_attrs (expr);
657 252 : visit (expr.get_pattern ());
658 252 : visit (expr.get_value_expr ());
659 252 : visit (expr.get_if_block ());
660 252 : }
661 :
662 : void
663 126 : DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
664 : {
665 126 : visit (reinterpret_cast<AST::IfLetExpr &> (expr));
666 126 : visit (expr.get_else_block ());
667 126 : }
668 :
669 : void
670 36039 : DefaultASTVisitor::visit (AST::MatchArm &arm)
671 : {
672 36039 : visit_outer_attrs (arm);
673 36039 : visit (arm.get_pattern ());
674 36039 : if (arm.has_match_arm_guard ())
675 12 : visit (arm.get_guard_expr ());
676 36039 : }
677 :
678 : void
679 38545 : DefaultASTVisitor::visit (AST::MatchCase &arm)
680 : {
681 38545 : visit (arm.get_arm ());
682 38545 : visit (arm.get_expr ());
683 38545 : }
684 :
685 : void
686 16627 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
687 : {
688 16627 : visit_outer_attrs (expr);
689 16627 : visit_inner_attrs (expr);
690 16627 : visit (expr.get_scrutinee_expr ());
691 55172 : for (auto &arm : expr.get_match_cases ())
692 38545 : visit (arm);
693 16627 : }
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 318 : DefaultASTVisitor::visit (AST::InlineAsm &expr)
711 : {
712 318 : visit_outer_attrs (expr);
713 318 : using RegisterType = AST::InlineAsmOperand::RegisterType;
714 662 : for (auto &operand : expr.get_operands ())
715 : {
716 344 : switch (operand.get_register_type ())
717 : {
718 120 : case RegisterType::In:
719 120 : {
720 120 : visit (operand.get_in ().expr);
721 120 : break;
722 : }
723 200 : case RegisterType::Out:
724 200 : {
725 200 : visit (operand.get_out ().expr);
726 200 : break;
727 : }
728 0 : case RegisterType::InOut:
729 0 : {
730 0 : visit (operand.get_in_out ().expr);
731 0 : break;
732 : }
733 24 : case RegisterType::SplitInOut:
734 24 : {
735 24 : auto split = operand.get_split_in_out ();
736 24 : visit (split.in_expr);
737 24 : visit (split.out_expr);
738 24 : break;
739 24 : }
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 318 : }
757 318 : }
758 :
759 : void
760 24 : DefaultASTVisitor::visit (AST::LlvmInlineAsm &expr)
761 : {
762 24 : for (auto &output : expr.get_outputs ())
763 0 : visit (output.expr);
764 :
765 48 : for (auto &input : expr.get_inputs ())
766 24 : visit (input.expr);
767 24 : }
768 :
769 : void
770 126419 : DefaultASTVisitor::visit (AST::TypeParam ¶m)
771 : {
772 126419 : visit_outer_attrs (param);
773 138681 : for (auto &bound : param.get_type_param_bounds ())
774 12262 : visit (bound);
775 126419 : if (param.has_type ())
776 5648 : visit (param.get_type ());
777 126419 : }
778 :
779 : void
780 32 : DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem &item)
781 : {
782 32 : visit (item.get_lifetime ());
783 64 : for (auto &bound : item.get_lifetime_bounds ())
784 32 : visit (bound);
785 32 : }
786 :
787 : void
788 5109 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
789 : {
790 5226 : for (auto &lifetime : item.get_for_lifetimes ())
791 117 : visit (lifetime);
792 5109 : visit (item.get_type ());
793 10218 : for (auto ¶m : item.get_type_param_bounds ())
794 5109 : visit (param);
795 5109 : }
796 :
797 : void
798 749834 : DefaultASTVisitor::visit (AST::Visibility &vis)
799 : {
800 749834 : if (vis.has_path ())
801 1269 : visit (vis.get_path ());
802 749834 : }
803 :
804 : void
805 350237 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
806 350237 : {}
807 :
808 : void
809 6079 : DefaultASTVisitor::visit (AST::WhereClause &where)
810 : {
811 12389 : for (auto &item : where.get_items ())
812 6310 : visit (item);
813 6079 : }
814 : void
815 172471 : DefaultASTVisitor::visit (AST::FunctionParam ¶m)
816 : {
817 172471 : visit_outer_attrs (param);
818 172471 : if (param.has_name ())
819 172471 : visit (param.get_pattern ());
820 :
821 172471 : visit (param.get_type ());
822 172471 : }
823 :
824 : void
825 132621 : DefaultASTVisitor::visit (AST::SelfParam ¶m)
826 : {
827 132621 : visit_outer_attrs (param);
828 :
829 132621 : if (param.has_lifetime ())
830 76579 : visit (param.get_lifetime ());
831 :
832 132621 : if (param.has_type ())
833 15 : visit (param.get_type ());
834 132621 : }
835 :
836 : void
837 18118 : DefaultASTVisitor::visit (AST::Module &module)
838 : {
839 18118 : visit_outer_attrs (module);
840 18118 : visit (module.get_visibility ());
841 18118 : visit_inner_attrs (module);
842 78182 : for (auto &item : module.get_items ())
843 60064 : visit (item);
844 18118 : }
845 :
846 : void
847 234 : DefaultASTVisitor::visit (AST::ExternCrate &crate)
848 : {
849 234 : visit_outer_attrs (crate);
850 234 : visit (crate.get_visibility ());
851 234 : }
852 :
853 : void
854 133 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
855 : {
856 133 : visit (use_tree.get_path ());
857 133 : }
858 :
859 : void
860 2146 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
861 : {
862 2146 : visit (use_tree.get_path ());
863 2146 : }
864 :
865 : void
866 6810 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
867 : {
868 6810 : visit (use_tree.get_path ());
869 6810 : }
870 :
871 : void
872 9103 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
873 : {
874 9103 : visit (use_decl.get_visibility ());
875 9103 : visit (use_decl.get_tree ());
876 9103 : }
877 :
878 : void
879 266998 : DefaultASTVisitor::visit_function_params (AST::Function &function)
880 : {
881 563532 : for (auto ¶m : function.get_function_params ())
882 296534 : visit (param);
883 266998 : }
884 :
885 : void
886 285698 : DefaultASTVisitor::visit (AST::Function &function)
887 : {
888 285698 : visit_outer_attrs (function);
889 285698 : visit (function.get_visibility ());
890 285698 : visit (function.get_qualifiers ());
891 312623 : for (auto &generic : function.get_generic_params ())
892 26925 : visit (generic);
893 :
894 285698 : visit_function_params (function);
895 :
896 285698 : if (function.has_return_type ())
897 209329 : visit (function.get_return_type ());
898 285698 : if (function.has_where_clause ())
899 3471 : visit (function.get_where_clause ());
900 285698 : if (function.has_body ())
901 221060 : visit (*function.get_definition ());
902 285697 : }
903 :
904 : void
905 22355 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
906 : {
907 22355 : visit_outer_attrs (type_alias);
908 22355 : visit (type_alias.get_visibility ());
909 22623 : for (auto &generic : type_alias.get_generic_params ())
910 268 : visit (generic);
911 22355 : if (type_alias.has_where_clause ())
912 0 : visit (type_alias.get_where_clause ());
913 22355 : visit (type_alias.get_type_aliased ());
914 22355 : }
915 :
916 : void
917 35274 : DefaultASTVisitor::visit (AST::StructField &field)
918 : {
919 35274 : visit_outer_attrs (field);
920 35274 : visit (field.get_visibility ());
921 35274 : visit (field.get_field_type ());
922 35274 : }
923 :
924 : void
925 30309 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
926 : {
927 30309 : visit_outer_attrs (struct_item);
928 30309 : visit (struct_item.get_visibility ());
929 40135 : for (auto &generic : struct_item.get_generic_params ())
930 9826 : visit (generic);
931 30309 : if (struct_item.has_where_clause ())
932 36 : visit (struct_item.get_where_clause ());
933 65048 : for (auto &field : struct_item.get_fields ())
934 34739 : visit (field);
935 30309 : }
936 :
937 : void
938 31308 : DefaultASTVisitor::visit (AST::TupleField &field)
939 : {
940 31308 : visit_outer_attrs (field);
941 31308 : visit (field.get_visibility ());
942 31308 : visit (field.get_field_type ());
943 31308 : }
944 :
945 : void
946 17347 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
947 : {
948 17347 : visit_outer_attrs (tuple_struct);
949 17347 : visit (tuple_struct.get_visibility ());
950 23640 : for (auto &generic : tuple_struct.get_generic_params ())
951 6293 : visit (generic);
952 17347 : if (tuple_struct.has_where_clause ())
953 0 : visit (tuple_struct.get_where_clause ());
954 47912 : for (auto &field : tuple_struct.get_fields ())
955 30565 : visit (field);
956 17347 : }
957 :
958 : void
959 22060 : DefaultASTVisitor::visit (AST::EnumItem &item)
960 : {
961 22060 : visit_outer_attrs (item);
962 22060 : visit (item.get_visibility ());
963 22060 : }
964 :
965 : void
966 7306 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
967 : {
968 7306 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
969 15060 : for (auto &field : item.get_tuple_fields ())
970 7754 : visit (field);
971 7306 : }
972 :
973 : void
974 1476 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
975 : {
976 1476 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
977 3872 : for (auto &field : item.get_struct_fields ())
978 2396 : visit (field);
979 1476 : }
980 :
981 : void
982 5041 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
983 : {
984 5041 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
985 5041 : visit (item.get_expr ());
986 5041 : }
987 :
988 : void
989 11575 : DefaultASTVisitor::visit (AST::Enum &enum_item)
990 : {
991 11575 : visit_outer_attrs (enum_item);
992 11575 : visit (enum_item.get_visibility ());
993 17777 : for (auto &generic : enum_item.get_generic_params ())
994 6202 : visit (generic);
995 11575 : if (enum_item.has_where_clause ())
996 0 : visit (enum_item.get_where_clause ());
997 38408 : for (auto &item : enum_item.get_variants ())
998 26833 : visit (item);
999 11575 : }
1000 :
1001 : void
1002 1903 : DefaultASTVisitor::visit (AST::Union &union_item)
1003 : {
1004 1903 : visit_outer_attrs (union_item);
1005 1903 : visit (union_item.get_visibility ());
1006 3206 : for (auto &generic : union_item.get_generic_params ())
1007 1303 : visit (generic);
1008 1903 : if (union_item.has_where_clause ())
1009 0 : visit (union_item.get_where_clause ());
1010 7371 : for (auto &variant : union_item.get_variants ())
1011 5468 : visit (variant);
1012 1903 : }
1013 :
1014 : void
1015 8479 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
1016 : {
1017 8479 : visit_outer_attrs (const_item);
1018 8479 : visit (const_item.get_visibility ());
1019 8479 : visit (const_item.get_type ());
1020 8479 : if (const_item.has_expr ())
1021 7950 : visit (const_item.get_expr ());
1022 8479 : }
1023 :
1024 : void
1025 875 : DefaultASTVisitor::visit (AST::StaticItem &static_item)
1026 : {
1027 875 : visit_outer_attrs (static_item);
1028 875 : visit (static_item.get_visibility ());
1029 875 : visit (static_item.get_type ());
1030 875 : visit (static_item.get_expr ());
1031 875 : }
1032 :
1033 : void
1034 17709 : DefaultASTVisitor::visit (AST::TraitItemType &item)
1035 : {
1036 17709 : visit_outer_attrs (item);
1037 17898 : for (auto &generic : item.get_generic_params ())
1038 189 : visit (generic);
1039 18926 : for (auto &bound : item.get_type_param_bounds ())
1040 1217 : visit (bound);
1041 17709 : }
1042 :
1043 : void
1044 36234 : DefaultASTVisitor::visit (AST::Trait &trait)
1045 : {
1046 36234 : visit_outer_attrs (trait);
1047 36234 : visit (trait.get_visibility ());
1048 :
1049 36234 : visit_inner_attrs (trait);
1050 :
1051 36234 : visit (trait.get_implicit_self ());
1052 :
1053 42488 : for (auto &generic : trait.get_generic_params ())
1054 6254 : visit (generic);
1055 :
1056 36234 : if (trait.has_where_clause ())
1057 70 : visit (trait.get_where_clause ());
1058 :
1059 42185 : for (auto &bound : trait.get_type_param_bounds ())
1060 5951 : visit (bound);
1061 :
1062 68094 : for (auto &item : trait.get_trait_items ())
1063 31860 : visit (item);
1064 36234 : }
1065 :
1066 : void
1067 8576 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
1068 : {
1069 8576 : visit_outer_attrs (impl);
1070 8576 : visit (impl.get_visibility ());
1071 :
1072 11623 : for (auto &generic : impl.get_generic_params ())
1073 3047 : visit (generic);
1074 8576 : if (impl.has_where_clause ())
1075 9 : visit (impl.get_where_clause ());
1076 8576 : visit (impl.get_type ());
1077 8576 : visit_inner_attrs (impl);
1078 31644 : for (auto &item : impl.get_impl_items ())
1079 23068 : visit (item);
1080 8576 : }
1081 :
1082 : void
1083 38885 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
1084 : {
1085 38885 : visit_outer_attrs (impl);
1086 38885 : visit (impl.get_visibility ());
1087 :
1088 46277 : for (auto &generic : impl.get_generic_params ())
1089 7392 : visit (generic);
1090 38885 : if (impl.has_where_clause ())
1091 795 : visit (impl.get_where_clause ());
1092 38885 : visit (impl.get_type ());
1093 38885 : visit (impl.get_trait_path ());
1094 38885 : visit_inner_attrs (impl);
1095 85795 : for (auto &item : impl.get_impl_items ())
1096 46910 : visit (item);
1097 38885 : }
1098 :
1099 : void
1100 14 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
1101 : {
1102 14 : visit_outer_attrs (item);
1103 14 : visit (item.get_visibility ());
1104 14 : }
1105 :
1106 : void
1107 14 : DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
1108 : {
1109 14 : visit_outer_attrs (item);
1110 14 : visit (item.get_visibility ());
1111 14 : visit (item.get_type ());
1112 14 : }
1113 :
1114 : void
1115 20128 : DefaultASTVisitor::visit (AST::ExternBlock &block)
1116 : {
1117 20128 : visit_outer_attrs (block);
1118 20128 : visit (block.get_visibility ());
1119 20128 : visit_inner_attrs (block);
1120 52025 : for (auto &item : block.get_extern_items ())
1121 31897 : visit (item);
1122 20128 : }
1123 :
1124 : void
1125 19359 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
1126 19359 : {}
1127 :
1128 : void
1129 9057 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
1130 : {
1131 22102 : for (auto &m : match.get_matches ())
1132 13045 : visit (m);
1133 9057 : }
1134 :
1135 : void
1136 19209 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
1137 : {
1138 43969 : for (auto &m : matcher.get_matches ())
1139 24760 : visit (m);
1140 19209 : }
1141 :
1142 : void
1143 18360 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
1144 : {
1145 18360 : visit (transcriber.get_token_tree ());
1146 18360 : }
1147 :
1148 : void
1149 18360 : DefaultASTVisitor::visit (AST::MacroRule &rule)
1150 : {
1151 18360 : visit (rule.get_matcher ());
1152 18360 : visit (rule.get_transcriber ());
1153 18360 : }
1154 : void
1155 14310 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
1156 : {
1157 14310 : visit_outer_attrs (rules_def);
1158 32670 : for (auto &rule : rules_def.get_macro_rules ())
1159 18360 : visit (rule);
1160 14310 : }
1161 :
1162 : void
1163 7069 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
1164 : {
1165 7069 : visit (data.get_path ());
1166 7069 : visit (data.get_delim_tok_tree ());
1167 7069 : }
1168 : void
1169 7069 : DefaultASTVisitor::visit (AST::MacroInvocation ¯o_invoc)
1170 : {
1171 7069 : visit_outer_attrs (macro_invoc);
1172 7069 : visit (macro_invoc.get_invoc_data ());
1173 7069 : }
1174 :
1175 : void
1176 626 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
1177 : {
1178 626 : visit (meta_item.get_path ());
1179 626 : }
1180 :
1181 : void
1182 253 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
1183 : {
1184 253 : visit (meta_item.get_path ());
1185 601 : for (auto &inner : meta_item.get_seq ())
1186 348 : visit (inner);
1187 253 : }
1188 :
1189 : void
1190 1074 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
1191 1074 : {}
1192 :
1193 : void
1194 6680 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
1195 6680 : {}
1196 :
1197 : void
1198 0 : DefaultASTVisitor::visit (AST::MetaListPaths &meta_item)
1199 : {
1200 0 : for (auto &path : meta_item.get_paths ())
1201 0 : visit (path);
1202 0 : }
1203 :
1204 : void
1205 0 : DefaultASTVisitor::visit (AST::MetaListNameValueStr &meta_item)
1206 : {
1207 0 : for (auto &str : meta_item.get_values ())
1208 0 : visit (str);
1209 0 : }
1210 :
1211 : void
1212 7682 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
1213 7682 : {}
1214 :
1215 : void
1216 224115 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
1217 : {
1218 224115 : if (pattern.has_subpattern ())
1219 232 : visit (pattern.get_subpattern ());
1220 224115 : }
1221 :
1222 : void
1223 23787 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
1224 23787 : {}
1225 :
1226 : void
1227 0 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
1228 0 : {}
1229 :
1230 : void
1231 1735 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
1232 1735 : {}
1233 :
1234 : void
1235 273 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
1236 : {
1237 273 : visit (bound.get_path ());
1238 273 : }
1239 :
1240 : void
1241 0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
1242 : {
1243 0 : visit (bound.get_qualified_path ());
1244 0 : }
1245 :
1246 : void
1247 862 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
1248 : {
1249 862 : if (pattern.get_has_lower_bound ())
1250 862 : visit (pattern.get_lower_bound ());
1251 862 : if (pattern.get_has_upper_bound ())
1252 862 : visit (pattern.get_upper_bound ());
1253 862 : }
1254 :
1255 : void
1256 2758 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
1257 : {
1258 2758 : visit (pattern.get_referenced_pattern ());
1259 2758 : }
1260 :
1261 : void
1262 342 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
1263 : {
1264 342 : visit_outer_attrs (field);
1265 342 : visit (field.get_index_pattern ());
1266 342 : }
1267 :
1268 : void
1269 2085 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
1270 : {
1271 2085 : visit_outer_attrs (field);
1272 2085 : visit (field.get_ident_pattern ());
1273 2085 : }
1274 :
1275 : void
1276 1102 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
1277 : {
1278 1102 : visit_outer_attrs (field);
1279 1102 : }
1280 :
1281 : void
1282 2331 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
1283 : {
1284 6202 : for (auto &field : spe.get_struct_pattern_fields ())
1285 3871 : visit (field);
1286 2331 : for (auto &attribute : spe.get_etc_outer_attrs ())
1287 0 : visit (attribute);
1288 2331 : }
1289 :
1290 : void
1291 2331 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
1292 : {
1293 2331 : visit (pattern.get_path ());
1294 2331 : visit (pattern.get_struct_pattern_elems ());
1295 2331 : }
1296 :
1297 : void
1298 16878 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRest &tuple_items)
1299 : {
1300 35549 : for (auto &pattern : tuple_items.get_patterns ())
1301 18671 : visit (pattern);
1302 16878 : }
1303 :
1304 : void
1305 577 : DefaultASTVisitor::visit (AST::TupleStructItemsHasRest &tuple_items)
1306 : {
1307 1036 : for (auto &lower : tuple_items.get_lower_patterns ())
1308 459 : visit (lower);
1309 852 : for (auto &upper : tuple_items.get_upper_patterns ())
1310 275 : visit (upper);
1311 577 : }
1312 :
1313 : void
1314 21186 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
1315 : {
1316 21186 : visit (pattern.get_path ());
1317 21186 : visit (pattern.get_items ());
1318 21186 : }
1319 :
1320 : void
1321 8808 : DefaultASTVisitor::visit (AST::TuplePatternItemsNoRest &tuple_items)
1322 : {
1323 26638 : for (auto &pattern : tuple_items.get_patterns ())
1324 17830 : visit (pattern);
1325 8808 : }
1326 :
1327 : void
1328 412 : DefaultASTVisitor::visit (AST::TuplePatternItemsHasRest &tuple_items)
1329 : {
1330 837 : for (auto &lower : tuple_items.get_lower_patterns ())
1331 425 : visit (lower);
1332 876 : for (auto &upper : tuple_items.get_upper_patterns ())
1333 464 : visit (upper);
1334 412 : }
1335 :
1336 : void
1337 10903 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
1338 : {
1339 10903 : visit (pattern.get_items ());
1340 10903 : }
1341 :
1342 : void
1343 660 : DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
1344 : {
1345 660 : visit (pattern.get_pattern_in_parens ());
1346 660 : }
1347 :
1348 : void
1349 472 : DefaultASTVisitor::visit (AST::SlicePatternItemsNoRest &items)
1350 : {
1351 1416 : for (auto &item : items.get_patterns ())
1352 944 : visit (item);
1353 472 : }
1354 :
1355 : void
1356 656 : DefaultASTVisitor::visit (AST::SlicePatternItemsHasRest &items)
1357 : {
1358 1299 : for (auto &item : items.get_lower_patterns ())
1359 643 : visit (item);
1360 1299 : for (auto &item : items.get_upper_patterns ())
1361 643 : visit (item);
1362 656 : }
1363 :
1364 : void
1365 1356 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
1366 : {
1367 1356 : visit (pattern.get_items ());
1368 1356 : }
1369 :
1370 : void
1371 3056 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
1372 : {
1373 12540 : for (auto &alt : pattern.get_alts ())
1374 6428 : visit (alt);
1375 3056 : }
1376 :
1377 : void
1378 1312 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
1379 1312 : {}
1380 :
1381 : void
1382 204657 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
1383 : {
1384 204657 : visit_outer_attrs (stmt);
1385 204657 : visit (stmt.get_pattern ());
1386 204657 : if (stmt.has_type ())
1387 31434 : visit (stmt.get_type ());
1388 204657 : if (stmt.has_init_expr ())
1389 188054 : visit (stmt.get_init_expr ());
1390 204657 : }
1391 :
1392 : void
1393 192674 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
1394 : {
1395 192674 : visit (stmt.get_expr ());
1396 192673 : }
1397 :
1398 : void
1399 37604 : DefaultASTVisitor::visit (AST::TraitBound &bound)
1400 : {
1401 37842 : for (auto &lifetime : bound.get_for_lifetimes ())
1402 238 : visit (lifetime);
1403 37604 : visit (bound.get_type_path ());
1404 37604 : }
1405 :
1406 : void
1407 0 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
1408 : {
1409 0 : for (auto &bound : type.get_type_param_bounds ())
1410 0 : visit (bound);
1411 0 : }
1412 :
1413 : void
1414 251 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
1415 : {
1416 890 : for (auto &bound : type.get_type_param_bounds ())
1417 639 : visit (bound);
1418 251 : }
1419 :
1420 : void
1421 109 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
1422 : {
1423 109 : visit (type.get_type_in_parens ());
1424 109 : }
1425 :
1426 : void
1427 1356 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
1428 : {
1429 1356 : visit (type.get_trait_bound ());
1430 1356 : }
1431 :
1432 : void
1433 2372 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
1434 : {
1435 2372 : visit (type.get_trait_bound ());
1436 2372 : }
1437 :
1438 : void
1439 6698 : DefaultASTVisitor::visit (AST::TupleType &type)
1440 : {
1441 16982 : for (auto &elem : type.get_elems ())
1442 10284 : visit (elem);
1443 6698 : }
1444 :
1445 : void
1446 3757 : DefaultASTVisitor::visit (AST::NeverType &type)
1447 3757 : {}
1448 :
1449 : void
1450 123925 : DefaultASTVisitor::visit (AST::RawPointerType &type)
1451 : {
1452 123925 : visit (type.get_type_pointed_to ());
1453 123925 : }
1454 :
1455 : void
1456 85372 : DefaultASTVisitor::visit (AST::ReferenceType &type)
1457 : {
1458 85372 : visit (type.get_lifetime ());
1459 85372 : visit (type.get_base_type ());
1460 85372 : }
1461 :
1462 : void
1463 12555 : DefaultASTVisitor::visit (AST::ArrayType &type)
1464 : {
1465 12555 : visit (type.get_elem_type ());
1466 12555 : visit (type.get_size_expr ());
1467 12555 : }
1468 :
1469 : void
1470 13829 : DefaultASTVisitor::visit (AST::SliceType &type)
1471 : {
1472 13829 : visit (type.get_elem_type ());
1473 13829 : }
1474 :
1475 : void
1476 5880 : DefaultASTVisitor::visit (AST::InferredType &type)
1477 5880 : {}
1478 :
1479 : void
1480 776 : DefaultASTVisitor::visit (AST::MaybeNamedParam ¶m)
1481 : {
1482 776 : visit_outer_attrs (param);
1483 776 : visit (param.get_type ());
1484 776 : }
1485 :
1486 : void
1487 979 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
1488 : {
1489 1022 : for (auto &lifetime : type.get_for_lifetimes ())
1490 43 : visit (lifetime);
1491 979 : visit (type.get_function_qualifiers ());
1492 1755 : for (auto ¶m : type.get_function_params ())
1493 776 : visit (param);
1494 979 : if (type.is_variadic ())
1495 0 : for (auto attr : type.get_variadic_attr ())
1496 0 : visit (attr);
1497 979 : if (type.has_return_type ())
1498 727 : visit (type.get_return_type ());
1499 979 : }
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 155 : DefaultASTVisitor::visit (AST::OffsetOf &offset_of)
1509 : {
1510 155 : visit (offset_of.get_type ());
1511 155 : }
1512 :
1513 : void
1514 11130 : DefaultASTVisitor::visit (AST::VariadicParam ¶m)
1515 : {
1516 11130 : if (param.has_pattern ())
1517 143 : visit (param.get_pattern ());
1518 11130 : }
1519 :
1520 : void
1521 4683 : ContextualASTVisitor::visit (AST::Crate &crate)
1522 : {
1523 4683 : ctx.enter (Kind::CRATE);
1524 4683 : DefaultASTVisitor::visit (crate);
1525 4683 : ctx.exit ();
1526 4683 : }
1527 :
1528 : void
1529 973 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
1530 : {
1531 973 : ctx.enter (Kind::INHERENT_IMPL);
1532 973 : DefaultASTVisitor::visit (impl);
1533 973 : ctx.exit ();
1534 973 : }
1535 :
1536 : void
1537 4742 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
1538 : {
1539 4742 : ctx.enter (Kind::TRAIT_IMPL);
1540 4742 : DefaultASTVisitor::visit (impl);
1541 4742 : ctx.exit ();
1542 4742 : }
1543 :
1544 : void
1545 3895 : ContextualASTVisitor::visit (AST::Trait &trait)
1546 : {
1547 3895 : ctx.enter (Kind::TRAIT);
1548 3895 : DefaultASTVisitor::visit (trait);
1549 3895 : ctx.exit ();
1550 3895 : }
1551 :
1552 : } // namespace AST
1553 : } // namespace Rust
|