Branch data Line data Source code
1 : : // Copyright (C) 2020-2025 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-path.h"
23 : : #include "rust-token.h"
24 : : #include "rust-expr.h"
25 : : #include "rust-macro.h"
26 : : #include "rust-pattern.h"
27 : : #include "rust-stmt.h"
28 : : #include "rust-type.h"
29 : :
30 : : namespace Rust {
31 : : namespace AST {
32 : :
33 : : void
34 : 33446 : DefaultASTVisitor::visit (AST::Crate &crate)
35 : : {
36 : 33446 : visit_inner_attrs (crate);
37 : 158758 : for (auto &item : crate.items)
38 : 125312 : visit (item);
39 : 33446 : }
40 : :
41 : : void
42 : 223772 : DefaultASTVisitor::visit (AST::Token &tok)
43 : 223772 : {}
44 : :
45 : : void
46 : 43218 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
47 : : {
48 : 313328 : for (auto &token : delim_tok_tree.get_token_trees ())
49 : 270110 : visit (token);
50 : 43218 : }
51 : :
52 : : void
53 : 0 : DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
54 : : {
55 : 0 : for (auto &item : input.get_items ())
56 : 0 : visit (item);
57 : 0 : }
58 : :
59 : : void
60 : 209046 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
61 : : {
62 : 209046 : visit_outer_attrs (ident_expr);
63 : 209046 : }
64 : :
65 : : void
66 : 61968 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
67 : 61968 : {}
68 : :
69 : : void
70 : 3487 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
71 : : {
72 : 3487 : visit_outer_attrs (lifetime_param);
73 : 3487 : visit (lifetime_param.get_lifetime ());
74 : 3505 : for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
75 : 18 : visit (lifetime_bound);
76 : 3487 : }
77 : :
78 : : void
79 : 510 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
80 : : {
81 : 510 : visit_outer_attrs (const_param);
82 : 510 : if (const_param.has_type ())
83 : 510 : visit (const_param.get_type ());
84 : 510 : if (const_param.has_default_value ())
85 : 294 : visit (const_param.get_default_value_unchecked ());
86 : 510 : }
87 : :
88 : : void
89 : 98633 : DefaultASTVisitor::visit (AST::PathInExpression &path)
90 : : {
91 : 98633 : visit_outer_attrs (path);
92 : :
93 : 98633 : if (!path.is_lang_item ())
94 : 230554 : for (auto &segment : path.get_segments ())
95 : 132369 : visit (segment);
96 : 98633 : }
97 : :
98 : : void
99 : 524444 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
100 : 524444 : {}
101 : :
102 : : void
103 : 446 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
104 : : {
105 : 446 : visit (binding.get_type ());
106 : 446 : }
107 : :
108 : : void
109 : 15210 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
110 : : {
111 : 15210 : if (segment.has_generic_args ())
112 : 15195 : visit (segment.get_generic_args ());
113 : 15210 : }
114 : :
115 : : void
116 : 253 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
117 : : {
118 : 544 : for (auto &input : tpf.get_params ())
119 : 291 : visit (input);
120 : 253 : if (tpf.has_return_type ())
121 : 215 : visit (tpf.get_return_type ());
122 : 253 : }
123 : :
124 : : void
125 : 150144 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
126 : 150144 : {}
127 : :
128 : : void
129 : 253 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
130 : : {
131 : 253 : visit (segment.get_type_path_function ());
132 : 253 : visit (segment.get_ident_segment ());
133 : 253 : }
134 : :
135 : : void
136 : 19957 : DefaultASTVisitor::visit (AST::GenericArgs &args)
137 : : {
138 : 20339 : for (auto &lifetime : args.get_lifetime_args ())
139 : 382 : visit (lifetime);
140 : :
141 : 41075 : for (auto &generic : args.get_generic_args ())
142 : 21118 : visit (generic);
143 : :
144 : 20389 : for (auto &binding : args.get_binding_args ())
145 : 432 : visit (binding);
146 : 19957 : }
147 : :
148 : : void
149 : 149891 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
150 : : {
151 : 149891 : visit (segment.get_ident_segment ());
152 : 149891 : if (segment.has_generic_args ())
153 : 5368 : visit (segment.get_generic_args ());
154 : 149891 : }
155 : : void
156 : 534598 : DefaultASTVisitor::visit (AST::TypePath &path)
157 : : {
158 : 1084751 : for (auto &segment : path.get_segments ())
159 : 550153 : visit (segment);
160 : 534598 : }
161 : :
162 : : void
163 : 1048 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
164 : : {
165 : 1048 : visit_outer_attrs (path);
166 : 1048 : visit (path.get_qualified_path_type ());
167 : :
168 : 2096 : for (auto &segment : path.get_segments ())
169 : 1048 : visit (segment);
170 : 1048 : }
171 : :
172 : : void
173 : 5189 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
174 : : {
175 : 5189 : visit (path.get_type ());
176 : 5189 : if (path.has_as_clause ())
177 : 4810 : visit (path.get_as_type_path ());
178 : 5189 : }
179 : :
180 : : void
181 : 4141 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
182 : : {
183 : 4141 : visit (path.get_qualified_path_type ());
184 : 4141 : visit (path.get_associated_segment ());
185 : :
186 : 4141 : for (auto &segment : path.get_segments ())
187 : 0 : visit (segment);
188 : 4141 : }
189 : :
190 : : void
191 : 1147037 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
192 : : {
193 : 1147037 : visit_outer_attrs (expr);
194 : 1147037 : }
195 : :
196 : : void
197 : 0 : DefaultASTVisitor::visit (AST::AttrInputLiteral &attr_input)
198 : : {
199 : 0 : visit (attr_input.get_literal ());
200 : 0 : }
201 : :
202 : : void
203 : 0 : DefaultASTVisitor::visit (AST::AttrInputMacro &attr_input)
204 : : {
205 : 0 : visit (attr_input.get_macro ());
206 : 0 : }
207 : :
208 : : void
209 : 0 : DefaultASTVisitor::visit (AST::MetaItemLitExpr &meta_item)
210 : : {
211 : 0 : visit (meta_item.get_literal ());
212 : 0 : }
213 : :
214 : : void
215 : 7754 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
216 : 7754 : {}
217 : :
218 : : void
219 : 330258 : DefaultASTVisitor::visit (AST::SimplePath &path)
220 : : {
221 : 338012 : for (auto &segment : path.get_segments ())
222 : 7754 : visit (segment);
223 : 330258 : }
224 : :
225 : : void
226 : 0 : DefaultASTVisitor::visit (AST::MetaItemPathLit &meta_item)
227 : : {
228 : 0 : visit (meta_item.get_path ());
229 : 0 : visit (meta_item.get_literal ());
230 : 0 : }
231 : :
232 : : void
233 : 17332 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
234 : : {
235 : 17332 : visit_outer_attrs (expr);
236 : 17332 : visit (expr.get_borrowed_expr ());
237 : 17332 : }
238 : :
239 : : void
240 : 15180 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
241 : : {
242 : 15180 : visit_outer_attrs (expr);
243 : 15180 : visit (expr.get_dereferenced_expr ());
244 : 15180 : }
245 : :
246 : : void
247 : 15 : DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
248 : : {
249 : 15 : visit_outer_attrs (expr);
250 : 15 : }
251 : :
252 : : void
253 : 3952 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
254 : : {
255 : 3952 : visit_outer_attrs (expr);
256 : 3952 : visit (expr.get_negated_expr ());
257 : 3952 : }
258 : :
259 : : void
260 : 2658843 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
261 : : {
262 : 2658843 : visit_outer_attrs (expr);
263 : 2658843 : visit (expr.get_left_expr ());
264 : 2658843 : visit (expr.get_right_expr ());
265 : 2658843 : }
266 : :
267 : : void
268 : 10430 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
269 : : {
270 : 10430 : visit_outer_attrs (expr);
271 : 10430 : visit (expr.get_left_expr ());
272 : 10430 : visit (expr.get_right_expr ());
273 : 10430 : }
274 : :
275 : : void
276 : 2917 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
277 : : {
278 : 2917 : visit_outer_attrs (expr);
279 : 2917 : visit (expr.get_left_expr ());
280 : 2917 : visit (expr.get_right_expr ());
281 : 2917 : }
282 : :
283 : : void
284 : 67412 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
285 : : {
286 : 67412 : visit_outer_attrs (expr);
287 : 67412 : visit (expr.get_casted_expr ());
288 : 67412 : visit (expr.get_type_to_cast_to ());
289 : 67412 : }
290 : :
291 : : void
292 : 19156 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
293 : : {
294 : 19156 : visit_outer_attrs (expr);
295 : 19156 : visit (expr.get_left_expr ());
296 : 19156 : visit (expr.get_right_expr ());
297 : 19156 : }
298 : :
299 : : void
300 : 2744 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
301 : : {
302 : 2744 : visit_outer_attrs (expr);
303 : 2744 : visit (expr.get_left_expr ());
304 : 2744 : visit (expr.get_right_expr ());
305 : 2744 : }
306 : :
307 : : void
308 : 2542 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
309 : : {
310 : 2542 : visit_outer_attrs (expr);
311 : 2542 : visit_inner_attrs (expr);
312 : 2542 : visit (expr.get_expr_in_parens ());
313 : 2542 : }
314 : :
315 : : void
316 : 2171 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
317 : : {
318 : 11959 : for (auto &value : elems.get_values ())
319 : 9788 : visit (value);
320 : 2171 : }
321 : :
322 : : void
323 : 1313 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
324 : : {
325 : 1313 : visit (elems.get_elem_to_copy ());
326 : 1313 : visit (elems.get_num_copies ());
327 : 1313 : }
328 : :
329 : : void
330 : 4174 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
331 : : {
332 : 4174 : visit_outer_attrs (expr);
333 : 4174 : visit_inner_attrs (expr);
334 : 4174 : visit (expr.get_array_elems ());
335 : 4174 : }
336 : :
337 : : void
338 : 2483 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
339 : : {
340 : 2483 : visit_outer_attrs (expr);
341 : 2483 : visit (expr.get_array_expr ());
342 : 2483 : visit (expr.get_index_expr ());
343 : 2483 : }
344 : :
345 : : void
346 : 4748 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
347 : : {
348 : 4748 : visit_outer_attrs (expr);
349 : 4748 : visit_inner_attrs (expr);
350 : 12373 : for (auto &elem : expr.get_tuple_elems ())
351 : 7625 : visit (elem);
352 : 4748 : }
353 : :
354 : : void
355 : 9843 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
356 : : {
357 : 9843 : visit_outer_attrs (expr);
358 : 9843 : visit (expr.get_tuple_expr ());
359 : 9843 : }
360 : :
361 : : void
362 : 349 : DefaultASTVisitor::visit (AST::StructExprStruct &expr)
363 : : {
364 : 349 : visit_outer_attrs (expr);
365 : 349 : visit_inner_attrs (expr);
366 : 349 : visit (expr.get_struct_name ());
367 : 349 : }
368 : :
369 : : void
370 : 1905 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
371 : 1905 : {}
372 : :
373 : : void
374 : 17174 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
375 : : {
376 : 17174 : visit (field.get_value ());
377 : 17174 : }
378 : :
379 : : void
380 : 524 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
381 : : {
382 : 524 : visit (field.get_value ());
383 : 524 : }
384 : :
385 : : void
386 : 711 : DefaultASTVisitor::visit (AST::StructBase &base)
387 : : {
388 : 711 : visit (base.get_base_struct ());
389 : 711 : }
390 : :
391 : : void
392 : 10744 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
393 : : {
394 : 10744 : visit_outer_attrs (expr);
395 : 10744 : visit_inner_attrs (expr);
396 : 10744 : visit (expr.get_struct_name ());
397 : 10744 : if (expr.has_struct_base ())
398 : 702 : visit (expr.get_struct_base ());
399 : 30293 : for (auto &field : expr.get_fields ())
400 : 19549 : visit (field);
401 : 10744 : }
402 : :
403 : : void
404 : 0 : DefaultASTVisitor::visit (AST::StructExprStructBase &expr)
405 : : {
406 : 0 : visit_outer_attrs (expr);
407 : 0 : visit_inner_attrs (expr);
408 : 0 : visit (expr.get_struct_name ());
409 : 0 : visit (expr.get_struct_base ());
410 : 0 : }
411 : :
412 : : void
413 : 105783 : DefaultASTVisitor::visit (AST::CallExpr &expr)
414 : : {
415 : 105783 : visit_outer_attrs (expr);
416 : 105783 : visit (expr.get_function_expr ());
417 : 234176 : for (auto ¶m : expr.get_params ())
418 : 128393 : visit (param);
419 : 105783 : }
420 : :
421 : : void
422 : 16474 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
423 : : {
424 : 16474 : visit_outer_attrs (expr);
425 : 16474 : visit (expr.get_receiver_expr ());
426 : 16474 : visit (expr.get_method_name ());
427 : 24929 : for (auto ¶m : expr.get_params ())
428 : 8455 : visit (param);
429 : 16474 : }
430 : :
431 : : void
432 : 19913 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
433 : : {
434 : 19913 : visit_outer_attrs (expr);
435 : 19913 : visit (expr.get_receiver_expr ());
436 : 19913 : }
437 : :
438 : : void
439 : 272 : DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
440 : : {
441 : 272 : visit_outer_attrs (expr);
442 : 468 : for (auto ¶m : expr.get_params ())
443 : 196 : visit (param);
444 : 272 : visit (expr.get_definition_expr ());
445 : 272 : }
446 : :
447 : : void
448 : 171247 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
449 : : {
450 : 171247 : visit_outer_attrs (expr);
451 : 171247 : visit_inner_attrs (expr);
452 : 342976 : for (auto &stmt : expr.get_statements ())
453 : 171730 : visit (stmt);
454 : 171246 : if (expr.has_tail_expr ())
455 : 117553 : visit (expr.get_tail_expr ());
456 : 171246 : }
457 : :
458 : : void
459 : 266 : DefaultASTVisitor::visit (AST::ClosureExprInnerTyped &expr)
460 : : {
461 : 266 : visit_outer_attrs (expr);
462 : 588 : for (auto ¶m : expr.get_params ())
463 : 322 : visit (param);
464 : 266 : visit (expr.get_return_type ());
465 : 266 : visit (expr.get_definition_block ());
466 : 266 : }
467 : :
468 : : void
469 : 524 : DefaultASTVisitor::visit (AST::ClosureParam ¶m)
470 : : {
471 : 524 : visit_outer_attrs (param);
472 : 524 : visit (param.get_pattern ());
473 : 524 : if (param.has_type_given ())
474 : 436 : visit (param.get_type ());
475 : 524 : }
476 : :
477 : : void
478 : 90 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
479 : : {
480 : 90 : visit_outer_attrs (expr);
481 : 90 : if (expr.has_label ())
482 : 15 : visit (expr.get_label_unchecked ());
483 : 90 : }
484 : :
485 : : void
486 : 1356 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
487 : : {
488 : 1356 : visit_outer_attrs (expr);
489 : 1356 : if (expr.has_label ())
490 : 382 : visit (expr.get_label_unchecked ());
491 : :
492 : 1356 : if (expr.has_break_expr ())
493 : 410 : visit (expr.get_break_expr ());
494 : 1355 : }
495 : :
496 : : void
497 : 838 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
498 : : {
499 : 838 : visit (expr.get_from_expr ());
500 : 838 : visit (expr.get_to_expr ());
501 : 838 : }
502 : :
503 : : void
504 : 79 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
505 : : {
506 : 79 : visit (expr.get_from_expr ());
507 : 79 : }
508 : :
509 : : void
510 : 79 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
511 : : {
512 : 79 : visit (expr.get_to_expr ());
513 : 79 : }
514 : :
515 : : void
516 : 0 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
517 : 0 : {}
518 : :
519 : : void
520 : 79 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
521 : : {
522 : 79 : visit (expr.get_from_expr ());
523 : 79 : visit (expr.get_to_expr ());
524 : 79 : }
525 : :
526 : : void
527 : 0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
528 : : {
529 : 0 : visit (expr.get_to_expr ());
530 : 0 : }
531 : :
532 : : void
533 : 5874 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
534 : : {
535 : 5874 : visit_outer_attrs (expr);
536 : 5874 : if (expr.has_returned_expr ())
537 : 5536 : visit (expr.get_returned_expr ());
538 : 5874 : }
539 : :
540 : : void
541 : 25 : DefaultASTVisitor::visit (AST::BoxExpr &expr)
542 : : {
543 : 25 : visit_outer_attrs (expr);
544 : 25 : visit (expr.get_boxed_expr ());
545 : 25 : }
546 : :
547 : : void
548 : 37830 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
549 : : {
550 : 37830 : visit_outer_attrs (expr);
551 : 37830 : visit (expr.get_block_expr ());
552 : 37830 : }
553 : :
554 : : void
555 : 732 : DefaultASTVisitor::visit (AST::LoopLabel &label)
556 : : {
557 : 732 : visit (label.get_lifetime ());
558 : 732 : }
559 : :
560 : : void
561 : 1306 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
562 : : {
563 : 1306 : visit_outer_attrs (expr);
564 : 1306 : if (expr.has_loop_label ())
565 : 404 : visit (expr.get_loop_label ());
566 : 1306 : visit (expr.get_loop_block ());
567 : 1306 : }
568 : :
569 : : void
570 : 969 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
571 : : {
572 : 969 : visit_outer_attrs (expr);
573 : 969 : if (expr.has_loop_label ())
574 : 47 : visit (expr.get_loop_label ());
575 : 969 : visit (expr.get_predicate_expr ());
576 : 969 : visit (expr.get_loop_block ());
577 : 969 : }
578 : :
579 : : void
580 : 0 : DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
581 : : {
582 : 0 : visit_outer_attrs (expr);
583 : 0 : for (auto &pattern : expr.get_patterns ())
584 : 0 : visit (pattern);
585 : 0 : visit (expr.get_loop_label ());
586 : 0 : visit (expr.get_scrutinee_expr ());
587 : 0 : visit (expr.get_loop_block ());
588 : 0 : }
589 : :
590 : : void
591 : 188 : DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
592 : : {
593 : 188 : visit_outer_attrs (expr);
594 : 188 : visit (expr.get_pattern ());
595 : 188 : visit (expr.get_iterator_expr ());
596 : 188 : if (expr.has_loop_label ())
597 : 0 : visit (expr.get_loop_label ());
598 : 188 : visit (expr.get_loop_block ());
599 : 188 : }
600 : :
601 : : void
602 : 9394 : DefaultASTVisitor::visit (AST::IfExpr &expr)
603 : : {
604 : 9394 : visit_outer_attrs (expr);
605 : 9394 : visit (expr.get_condition_expr ());
606 : 9394 : visit (expr.get_if_block ());
607 : 9394 : }
608 : :
609 : : void
610 : 5655 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
611 : : {
612 : 5655 : visit (reinterpret_cast<AST::IfExpr &> (expr));
613 : 5655 : visit (expr.get_else_block ());
614 : 5655 : }
615 : :
616 : : void
617 : 277 : DefaultASTVisitor::visit (AST::IfLetExpr &expr)
618 : : {
619 : 277 : visit_outer_attrs (expr);
620 : 554 : for (auto &pattern : expr.get_patterns ())
621 : 277 : visit (pattern);
622 : 277 : visit (expr.get_value_expr ());
623 : 277 : visit (expr.get_if_block ());
624 : 277 : }
625 : :
626 : : void
627 : 141 : DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
628 : : {
629 : 141 : visit (reinterpret_cast<AST::IfLetExpr &> (expr));
630 : 141 : visit (expr.get_else_block ());
631 : 141 : }
632 : :
633 : : void
634 : 7778 : DefaultASTVisitor::visit (AST::MatchArm &arm)
635 : : {
636 : 7778 : visit_outer_attrs (arm);
637 : 15556 : for (auto &pattern : arm.get_patterns ())
638 : 7778 : visit (pattern);
639 : 7778 : if (arm.has_match_arm_guard ())
640 : 18 : visit (arm.get_guard_expr ());
641 : 7778 : }
642 : :
643 : : void
644 : 7918 : DefaultASTVisitor::visit (AST::MatchCase &arm)
645 : : {
646 : 7918 : visit (arm.get_arm ());
647 : 7918 : visit (arm.get_expr ());
648 : 7918 : }
649 : :
650 : : void
651 : 3594 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
652 : : {
653 : 3594 : visit_outer_attrs (expr);
654 : 3594 : visit_inner_attrs (expr);
655 : 3594 : visit (expr.get_scrutinee_expr ());
656 : 11512 : for (auto &arm : expr.get_match_cases ())
657 : 7918 : visit (arm);
658 : 3594 : }
659 : :
660 : : void
661 : 0 : DefaultASTVisitor::visit (AST::AwaitExpr &expr)
662 : : {
663 : 0 : visit_outer_attrs (expr);
664 : 0 : visit (expr.get_awaited_expr ());
665 : 0 : }
666 : :
667 : : void
668 : 0 : DefaultASTVisitor::visit (AST::AsyncBlockExpr &expr)
669 : : {
670 : 0 : visit_outer_attrs (expr);
671 : 0 : visit (expr.get_block_expr ());
672 : 0 : }
673 : :
674 : : void
675 : 368 : DefaultASTVisitor::visit (AST::InlineAsm &expr)
676 : : {
677 : 368 : visit_outer_attrs (expr);
678 : 368 : using RegisterType = AST::InlineAsmOperand::RegisterType;
679 : 702 : for (auto &operand : expr.get_operands ())
680 : : {
681 : 334 : switch (operand.get_register_type ())
682 : : {
683 : 136 : case RegisterType::In: {
684 : 136 : visit (operand.get_in ().expr);
685 : 136 : break;
686 : : }
687 : 198 : case RegisterType::Out: {
688 : 198 : visit (operand.get_out ().expr);
689 : 198 : break;
690 : : }
691 : 0 : case RegisterType::InOut: {
692 : 0 : visit (operand.get_in_out ().expr);
693 : 0 : break;
694 : : }
695 : 0 : case RegisterType::SplitInOut: {
696 : 0 : auto split = operand.get_split_in_out ();
697 : 0 : visit (split.in_expr);
698 : 0 : visit (split.out_expr);
699 : 0 : break;
700 : 0 : }
701 : 0 : case RegisterType::Const: {
702 : 0 : visit (operand.get_const ().anon_const.expr);
703 : 0 : break;
704 : : }
705 : 0 : case RegisterType::Sym: {
706 : 0 : visit (operand.get_sym ().expr);
707 : 0 : break;
708 : : }
709 : 0 : case RegisterType::Label: {
710 : 0 : visit (operand.get_label ().expr);
711 : 0 : break;
712 : : }
713 : : }
714 : 368 : }
715 : 368 : }
716 : :
717 : : void
718 : 22 : DefaultASTVisitor::visit (AST::LlvmInlineAsm &expr)
719 : : {
720 : 22 : for (auto &output : expr.get_outputs ())
721 : 0 : visit (output.expr);
722 : :
723 : 44 : for (auto &input : expr.get_inputs ())
724 : 22 : visit (input.expr);
725 : 22 : }
726 : :
727 : : void
728 : 60855 : DefaultASTVisitor::visit (AST::TypeParam ¶m)
729 : : {
730 : 60855 : visit_outer_attrs (param);
731 : 64760 : for (auto &bound : param.get_type_param_bounds ())
732 : 3905 : visit (bound);
733 : 60855 : if (param.has_type ())
734 : 1597 : visit (param.get_type ());
735 : 60855 : }
736 : :
737 : : void
738 : 12 : DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem &item)
739 : : {
740 : 12 : visit (item.get_lifetime ());
741 : 24 : for (auto &bound : item.get_lifetime_bounds ())
742 : 12 : visit (bound);
743 : 12 : }
744 : :
745 : : void
746 : 978 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
747 : : {
748 : 1065 : for (auto &lifetime : item.get_for_lifetimes ())
749 : 87 : visit (lifetime);
750 : 978 : visit (item.get_type ());
751 : 1956 : for (auto ¶m : item.get_type_param_bounds ())
752 : 978 : visit (param);
753 : 978 : }
754 : :
755 : : void
756 : 325149 : DefaultASTVisitor::visit (AST::Visibility &vis)
757 : : {
758 : 325149 : visit (vis.get_path ());
759 : 325149 : }
760 : :
761 : : void
762 : 159239 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
763 : 159239 : {}
764 : :
765 : : void
766 : 1025 : DefaultASTVisitor::visit (AST::WhereClause &where)
767 : : {
768 : 2103 : for (auto &item : where.get_items ())
769 : 1078 : visit (item);
770 : 1025 : }
771 : : void
772 : 84857 : DefaultASTVisitor::visit (AST::FunctionParam ¶m)
773 : : {
774 : 84857 : visit_outer_attrs (param);
775 : 84857 : if (param.has_name ())
776 : 84857 : visit (param.get_pattern ());
777 : :
778 : 84857 : visit (param.get_type ());
779 : 84857 : }
780 : :
781 : : void
782 : 60067 : DefaultASTVisitor::visit (AST::SelfParam ¶m)
783 : : {
784 : 60067 : visit_outer_attrs (param);
785 : :
786 : 60067 : if (param.has_lifetime ())
787 : 27595 : visit (param.get_lifetime ());
788 : :
789 : 60067 : if (param.has_type ())
790 : 22 : visit (param.get_type ());
791 : 60067 : }
792 : :
793 : : void
794 : 7888 : DefaultASTVisitor::visit (AST::Module &module)
795 : : {
796 : 7888 : visit_outer_attrs (module);
797 : 7888 : visit (module.get_visibility ());
798 : 7888 : visit_inner_attrs (module);
799 : 29158 : for (auto &item : module.get_items ())
800 : 21270 : visit (item);
801 : 7888 : }
802 : :
803 : : void
804 : 156 : DefaultASTVisitor::visit (AST::ExternCrate &crate)
805 : : {
806 : 156 : visit_outer_attrs (crate);
807 : 156 : visit (crate.get_visibility ());
808 : 156 : }
809 : :
810 : : void
811 : 81 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
812 : : {
813 : 81 : visit (use_tree.get_path ());
814 : 81 : }
815 : :
816 : : void
817 : 445 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
818 : : {
819 : 445 : visit (use_tree.get_path ());
820 : 445 : }
821 : :
822 : : void
823 : 1223 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
824 : : {
825 : 1223 : visit (use_tree.get_path ());
826 : 1223 : }
827 : :
828 : : void
829 : 1761 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
830 : : {
831 : 1761 : visit (use_decl.get_visibility ());
832 : 1761 : visit (use_decl.get_tree ());
833 : 1761 : }
834 : :
835 : : void
836 : 155995 : DefaultASTVisitor::visit_function_params (AST::Function &function)
837 : : {
838 : 305523 : for (auto ¶m : function.get_function_params ())
839 : 149528 : visit (param);
840 : 155995 : }
841 : :
842 : : void
843 : 158529 : DefaultASTVisitor::visit (AST::Function &function)
844 : : {
845 : 158529 : visit_outer_attrs (function);
846 : 158529 : visit (function.get_visibility ());
847 : 158529 : visit (function.get_qualifiers ());
848 : 174432 : for (auto &generic : function.get_generic_params ())
849 : 15903 : visit (generic);
850 : :
851 : 158529 : visit_function_params (function);
852 : :
853 : 158529 : if (function.has_return_type ())
854 : 107301 : visit (function.get_return_type ());
855 : 158529 : if (function.has_where_clause ())
856 : 232 : visit (function.get_where_clause ());
857 : 158529 : if (function.has_body ())
858 : 124304 : visit (*function.get_definition ());
859 : 158528 : }
860 : :
861 : : void
862 : 16565 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
863 : : {
864 : 16565 : visit_outer_attrs (type_alias);
865 : 16565 : visit (type_alias.get_visibility ());
866 : 16715 : for (auto &generic : type_alias.get_generic_params ())
867 : 150 : visit (generic);
868 : 16565 : if (type_alias.has_where_clause ())
869 : 0 : visit (type_alias.get_where_clause ());
870 : 16565 : visit (type_alias.get_type_aliased ());
871 : 16565 : }
872 : :
873 : : void
874 : 16840 : DefaultASTVisitor::visit (AST::StructField &field)
875 : : {
876 : 16840 : visit_outer_attrs (field);
877 : 16840 : visit (field.get_visibility ());
878 : 16840 : visit (field.get_field_type ());
879 : 16839 : }
880 : :
881 : : void
882 : 11804 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
883 : : {
884 : 11804 : visit_outer_attrs (struct_item);
885 : 11804 : visit (struct_item.get_visibility ());
886 : 14912 : for (auto &generic : struct_item.get_generic_params ())
887 : 3108 : visit (generic);
888 : 11804 : if (struct_item.has_where_clause ())
889 : 34 : visit (struct_item.get_where_clause ());
890 : 25434 : for (auto &field : struct_item.get_fields ())
891 : 13631 : visit (field);
892 : 11803 : }
893 : :
894 : : void
895 : 18563 : DefaultASTVisitor::visit (AST::TupleField &field)
896 : : {
897 : 18563 : visit_outer_attrs (field);
898 : 18563 : visit (field.get_visibility ());
899 : 18563 : visit (field.get_field_type ());
900 : 18562 : }
901 : :
902 : : void
903 : 8485 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
904 : : {
905 : 8485 : visit_outer_attrs (tuple_struct);
906 : 8485 : visit (tuple_struct.get_visibility ());
907 : 12023 : for (auto &generic : tuple_struct.get_generic_params ())
908 : 3538 : visit (generic);
909 : 8485 : if (tuple_struct.has_where_clause ())
910 : 0 : visit (tuple_struct.get_where_clause ());
911 : 24227 : for (auto &field : tuple_struct.get_fields ())
912 : 15743 : visit (field);
913 : 8484 : }
914 : :
915 : : void
916 : 5463 : DefaultASTVisitor::visit (AST::EnumItem &item)
917 : : {
918 : 5463 : visit_outer_attrs (item);
919 : 5463 : visit (item.get_visibility ());
920 : 5463 : }
921 : :
922 : : void
923 : 2810 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
924 : : {
925 : 2810 : visit (reinterpret_cast<EnumItem &> (item));
926 : 5630 : for (auto &field : item.get_tuple_fields ())
927 : 2820 : visit (field);
928 : 2810 : }
929 : :
930 : : void
931 : 563 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
932 : : {
933 : 563 : visit (reinterpret_cast<EnumItem &> (item));
934 : 1480 : for (auto &field : item.get_struct_fields ())
935 : 917 : visit (field);
936 : 563 : }
937 : :
938 : : void
939 : 396 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
940 : : {
941 : 396 : visit (reinterpret_cast<EnumItem &> (item));
942 : 396 : visit (item.get_expr ());
943 : 396 : }
944 : :
945 : : void
946 : 4515 : DefaultASTVisitor::visit (AST::Enum &enum_item)
947 : : {
948 : 4515 : visit_outer_attrs (enum_item);
949 : 4515 : visit (enum_item.get_visibility ());
950 : 7194 : for (auto &generic : enum_item.get_generic_params ())
951 : 2679 : visit (generic);
952 : 4515 : if (enum_item.has_where_clause ())
953 : 0 : visit (enum_item.get_where_clause ());
954 : 14335 : for (auto &item : enum_item.get_variants ())
955 : 9820 : visit (item);
956 : 4515 : }
957 : :
958 : : void
959 : 822 : DefaultASTVisitor::visit (AST::Union &union_item)
960 : : {
961 : 822 : visit_outer_attrs (union_item);
962 : 822 : visit (union_item.get_visibility ());
963 : 1284 : for (auto &generic : union_item.get_generic_params ())
964 : 462 : visit (generic);
965 : 822 : if (union_item.has_where_clause ())
966 : 0 : visit (union_item.get_where_clause ());
967 : 3114 : for (auto &variant : union_item.get_variants ())
968 : 2292 : visit (variant);
969 : 822 : }
970 : :
971 : : void
972 : 4817 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
973 : : {
974 : 4817 : visit_outer_attrs (const_item);
975 : 4817 : visit (const_item.get_visibility ());
976 : 4817 : visit (const_item.get_type ());
977 : 4817 : if (const_item.has_expr ())
978 : 4781 : visit (const_item.get_expr ());
979 : 4817 : }
980 : :
981 : : void
982 : 608 : DefaultASTVisitor::visit (AST::StaticItem &static_item)
983 : : {
984 : 608 : visit_outer_attrs (static_item);
985 : 608 : visit (static_item.get_visibility ());
986 : 608 : visit (static_item.get_type ());
987 : 608 : visit (static_item.get_expr ());
988 : 608 : }
989 : :
990 : : void
991 : 518 : DefaultASTVisitor::visit (AST::TraitItemConst &item)
992 : : {
993 : 518 : visit_outer_attrs (item);
994 : 518 : visit (item.get_type ());
995 : 518 : if (item.has_expr ())
996 : 144 : visit (item.get_expr ());
997 : 518 : }
998 : :
999 : : void
1000 : 7785 : DefaultASTVisitor::visit (AST::TraitItemType &item)
1001 : : {
1002 : 7785 : visit_outer_attrs (item);
1003 : 8422 : for (auto &bound : item.get_type_param_bounds ())
1004 : 637 : visit (bound);
1005 : 7785 : }
1006 : :
1007 : : void
1008 : 24158 : DefaultASTVisitor::visit (AST::Trait &trait)
1009 : : {
1010 : 24158 : visit_outer_attrs (trait);
1011 : 24158 : visit (trait.get_visibility ());
1012 : :
1013 : 24158 : visit_inner_attrs (trait);
1014 : :
1015 : 24158 : visit (trait.get_implicit_self ());
1016 : :
1017 : 27952 : for (auto &generic : trait.get_generic_params ())
1018 : 3794 : visit (generic);
1019 : :
1020 : 24158 : if (trait.has_where_clause ())
1021 : 64 : visit (trait.get_where_clause ());
1022 : :
1023 : 27071 : for (auto &bound : trait.get_type_param_bounds ())
1024 : 2913 : visit (bound);
1025 : :
1026 : 43588 : for (auto &item : trait.get_trait_items ())
1027 : 19430 : visit (item);
1028 : 24158 : }
1029 : :
1030 : : void
1031 : 8160 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
1032 : : {
1033 : 8160 : visit_outer_attrs (impl);
1034 : 8160 : visit (impl.get_visibility ());
1035 : :
1036 : 10935 : for (auto &generic : impl.get_generic_params ())
1037 : 2775 : visit (generic);
1038 : 8160 : if (impl.has_where_clause ())
1039 : 19 : visit (impl.get_where_clause ());
1040 : 8160 : visit (impl.get_type ());
1041 : 8160 : visit_inner_attrs (impl);
1042 : 29369 : for (auto &item : impl.get_impl_items ())
1043 : 21209 : visit (item);
1044 : 8160 : }
1045 : :
1046 : : void
1047 : 29065 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
1048 : : {
1049 : 29065 : visit_outer_attrs (impl);
1050 : 29065 : visit (impl.get_visibility ());
1051 : :
1052 : 36739 : for (auto &generic : impl.get_generic_params ())
1053 : 7674 : visit (generic);
1054 : 29065 : if (impl.has_where_clause ())
1055 : 676 : visit (impl.get_where_clause ());
1056 : 29065 : visit (impl.get_type ());
1057 : 29065 : visit (impl.get_trait_path ());
1058 : 29065 : visit_inner_attrs (impl);
1059 : 62466 : for (auto &item : impl.get_impl_items ())
1060 : 33401 : visit (item);
1061 : 29065 : }
1062 : :
1063 : : void
1064 : 13 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
1065 : : {
1066 : 13 : visit_outer_attrs (item);
1067 : 13 : visit (item.get_visibility ());
1068 : 13 : }
1069 : :
1070 : : void
1071 : 19 : DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
1072 : : {
1073 : 19 : visit_outer_attrs (item);
1074 : 19 : visit (item.get_visibility ());
1075 : 19 : visit (item.get_type ());
1076 : 19 : }
1077 : :
1078 : : void
1079 : 6918 : DefaultASTVisitor::visit (AST::ExternBlock &block)
1080 : : {
1081 : 6918 : visit_outer_attrs (block);
1082 : 6918 : visit (block.get_visibility ());
1083 : 6918 : visit_inner_attrs (block);
1084 : 18686 : for (auto &item : block.get_extern_items ())
1085 : 11768 : visit (item);
1086 : 6918 : }
1087 : :
1088 : : void
1089 : 7764 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
1090 : 7764 : {}
1091 : :
1092 : : void
1093 : 3667 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
1094 : : {
1095 : 9528 : for (auto &m : match.get_matches ())
1096 : 5861 : visit (m);
1097 : 3667 : }
1098 : :
1099 : : void
1100 : 8427 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
1101 : : {
1102 : 18281 : for (auto &m : matcher.get_matches ())
1103 : 9854 : visit (m);
1104 : 8427 : }
1105 : :
1106 : : void
1107 : 8026 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
1108 : : {
1109 : 8026 : visit (transcriber.get_token_tree ());
1110 : 8026 : }
1111 : :
1112 : : void
1113 : 8026 : DefaultASTVisitor::visit (AST::MacroRule &rule)
1114 : : {
1115 : 8026 : visit (rule.get_matcher ());
1116 : 8026 : visit (rule.get_transcriber ());
1117 : 8026 : }
1118 : : void
1119 : 6304 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
1120 : : {
1121 : 6304 : visit_outer_attrs (rules_def);
1122 : 14330 : for (auto &rule : rules_def.get_macro_rules ())
1123 : 8026 : visit (rule);
1124 : 6304 : }
1125 : :
1126 : : void
1127 : 3360 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
1128 : : {
1129 : 3360 : visit (data.get_path ());
1130 : 3360 : visit (data.get_delim_tok_tree ());
1131 : 3360 : }
1132 : : void
1133 : 3360 : DefaultASTVisitor::visit (AST::MacroInvocation ¯o_invoc)
1134 : : {
1135 : 3360 : visit_outer_attrs (macro_invoc);
1136 : 3360 : visit (macro_invoc.get_invoc_data ());
1137 : 3360 : }
1138 : :
1139 : : void
1140 : 0 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
1141 : : {
1142 : 0 : visit (meta_item.get_path ());
1143 : 0 : }
1144 : :
1145 : : void
1146 : 0 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
1147 : : {
1148 : 0 : visit (meta_item.get_path ());
1149 : 0 : for (auto &inner : meta_item.get_seq ())
1150 : 0 : visit (inner);
1151 : 0 : }
1152 : :
1153 : : void
1154 : 0 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
1155 : 0 : {}
1156 : :
1157 : : void
1158 : 0 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
1159 : 0 : {}
1160 : :
1161 : : void
1162 : 0 : DefaultASTVisitor::visit (AST::MetaListPaths &meta_item)
1163 : : {
1164 : 0 : for (auto &path : meta_item.get_paths ())
1165 : 0 : visit (path);
1166 : 0 : }
1167 : :
1168 : : void
1169 : 0 : DefaultASTVisitor::visit (AST::MetaListNameValueStr &meta_item)
1170 : : {
1171 : 0 : for (auto &str : meta_item.get_values ())
1172 : 0 : visit (str);
1173 : 0 : }
1174 : :
1175 : : void
1176 : 1560 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
1177 : 1560 : {}
1178 : :
1179 : : void
1180 : 162743 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
1181 : : {
1182 : 162743 : if (pattern.has_pattern_to_bind ())
1183 : 0 : visit (pattern.get_pattern_to_bind ());
1184 : 162743 : }
1185 : :
1186 : : void
1187 : 8367 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
1188 : 8367 : {}
1189 : :
1190 : : void
1191 : 0 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
1192 : 0 : {}
1193 : :
1194 : : void
1195 : 164 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
1196 : 164 : {}
1197 : :
1198 : : void
1199 : 105 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
1200 : : {
1201 : 105 : visit (bound.get_path ());
1202 : 105 : }
1203 : :
1204 : : void
1205 : 0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
1206 : : {
1207 : 0 : visit (bound.get_qualified_path ());
1208 : 0 : }
1209 : :
1210 : : void
1211 : 167 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
1212 : : {
1213 : 167 : if (pattern.get_has_lower_bound ())
1214 : 167 : visit (pattern.get_lower_bound ());
1215 : 167 : if (pattern.get_has_upper_bound ())
1216 : 167 : visit (pattern.get_upper_bound ());
1217 : 167 : }
1218 : :
1219 : : void
1220 : 634 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
1221 : : {
1222 : 634 : visit (pattern.get_referenced_pattern ());
1223 : 634 : }
1224 : :
1225 : : void
1226 : 21 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
1227 : : {
1228 : 21 : visit_outer_attrs (field);
1229 : 21 : visit (field.get_index_pattern ());
1230 : 21 : }
1231 : :
1232 : : void
1233 : 465 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
1234 : : {
1235 : 465 : visit_outer_attrs (field);
1236 : 465 : visit (field.get_ident_pattern ());
1237 : 465 : }
1238 : :
1239 : : void
1240 : 617 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
1241 : : {
1242 : 617 : visit_outer_attrs (field);
1243 : 617 : }
1244 : :
1245 : : void
1246 : 743 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
1247 : : {
1248 : 1922 : for (auto &field : spe.get_struct_pattern_fields ())
1249 : 1179 : visit (field);
1250 : 743 : for (auto &attribute : spe.get_etc_outer_attrs ())
1251 : : visit (attribute);
1252 : 743 : }
1253 : :
1254 : : void
1255 : 743 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
1256 : : {
1257 : 743 : visit (pattern.get_path ());
1258 : 743 : visit (pattern.get_struct_pattern_elems ());
1259 : 743 : }
1260 : :
1261 : : void
1262 : 4460 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRange &tuple_items)
1263 : : {
1264 : 9023 : for (auto &pattern : tuple_items.get_patterns ())
1265 : 4563 : visit (pattern);
1266 : 4460 : }
1267 : :
1268 : : void
1269 : 0 : DefaultASTVisitor::visit (AST::TupleStructItemsRange &tuple_items)
1270 : : {
1271 : 0 : for (auto &lower : tuple_items.get_lower_patterns ())
1272 : 0 : visit (lower);
1273 : 0 : for (auto &upper : tuple_items.get_upper_patterns ())
1274 : 0 : visit (upper);
1275 : 0 : }
1276 : :
1277 : : void
1278 : 4024 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
1279 : : {
1280 : 4024 : visit (pattern.get_path ());
1281 : 4024 : visit (pattern.get_items ());
1282 : 4024 : }
1283 : :
1284 : : void
1285 : 6089 : DefaultASTVisitor::visit (AST::TuplePatternItemsMultiple &tuple_items)
1286 : : {
1287 : 18052 : for (auto &pattern : tuple_items.get_patterns ())
1288 : 11963 : visit (pattern);
1289 : 6089 : }
1290 : :
1291 : : void
1292 : 0 : DefaultASTVisitor::visit (AST::TuplePatternItemsRanged &tuple_items)
1293 : : {
1294 : 0 : for (auto &lower : tuple_items.get_lower_patterns ())
1295 : 0 : visit (lower);
1296 : 0 : for (auto &upper : tuple_items.get_upper_patterns ())
1297 : 0 : visit (upper);
1298 : 0 : }
1299 : :
1300 : : void
1301 : 6089 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
1302 : : {
1303 : 6089 : visit (pattern.get_items ());
1304 : 6089 : }
1305 : :
1306 : : void
1307 : 442 : DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
1308 : : {
1309 : 442 : visit (pattern.get_pattern_in_parens ());
1310 : 442 : }
1311 : :
1312 : : void
1313 : 0 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
1314 : : {
1315 : 0 : for (auto &item : pattern.get_items ())
1316 : 0 : visit (item);
1317 : 0 : }
1318 : :
1319 : : void
1320 : 525 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
1321 : : {
1322 : 1734 : for (auto &alt : pattern.get_alts ())
1323 : 1209 : visit (alt);
1324 : 525 : }
1325 : :
1326 : : void
1327 : 847 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
1328 : 847 : {}
1329 : :
1330 : : void
1331 : 126071 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
1332 : : {
1333 : 126071 : visit_outer_attrs (stmt);
1334 : 126071 : visit (stmt.get_pattern ());
1335 : 126071 : if (stmt.has_type ())
1336 : 21666 : visit (stmt.get_type ());
1337 : 126071 : if (stmt.has_init_expr ())
1338 : 115083 : visit (stmt.get_init_expr ());
1339 : 126071 : }
1340 : :
1341 : : void
1342 : 79886 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
1343 : : {
1344 : 79886 : visit (stmt.get_expr ());
1345 : 79885 : }
1346 : :
1347 : : void
1348 : 9624 : DefaultASTVisitor::visit (AST::TraitBound &bound)
1349 : : {
1350 : 9727 : for (auto &lifetime : bound.get_for_lifetimes ())
1351 : 103 : visit (lifetime);
1352 : 9624 : visit (bound.get_type_path ());
1353 : 9624 : }
1354 : :
1355 : : void
1356 : 0 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
1357 : : {
1358 : 0 : for (auto &bound : type.get_type_param_bounds ())
1359 : 0 : visit (bound);
1360 : 0 : }
1361 : :
1362 : : void
1363 : 198 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
1364 : : {
1365 : 764 : for (auto &bound : type.get_type_param_bounds ())
1366 : 566 : visit (bound);
1367 : 198 : }
1368 : :
1369 : : void
1370 : 48 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
1371 : : {
1372 : 48 : visit (type.get_type_in_parens ());
1373 : 48 : }
1374 : :
1375 : : void
1376 : 105 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
1377 : : {
1378 : 105 : visit (type.get_trait_bound ());
1379 : 105 : }
1380 : :
1381 : : void
1382 : 1399 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
1383 : : {
1384 : 1399 : visit (type.get_trait_bound ());
1385 : 1399 : }
1386 : :
1387 : : void
1388 : 5268 : DefaultASTVisitor::visit (AST::TupleType &type)
1389 : : {
1390 : 12846 : for (auto &elem : type.get_elems ())
1391 : 7578 : visit (elem);
1392 : 5268 : }
1393 : :
1394 : : void
1395 : 796 : DefaultASTVisitor::visit (AST::NeverType &type)
1396 : 796 : {}
1397 : :
1398 : : void
1399 : 66665 : DefaultASTVisitor::visit (AST::RawPointerType &type)
1400 : : {
1401 : 66665 : visit (type.get_type_pointed_to ());
1402 : 66665 : }
1403 : :
1404 : : void
1405 : 29533 : DefaultASTVisitor::visit (AST::ReferenceType &type)
1406 : : {
1407 : 29533 : visit (type.get_lifetime ());
1408 : 29533 : visit (type.get_base_type ());
1409 : 29533 : }
1410 : :
1411 : : void
1412 : 8087 : DefaultASTVisitor::visit (AST::ArrayType &type)
1413 : : {
1414 : 8087 : visit (type.get_elem_type ());
1415 : 8087 : visit (type.get_size_expr ());
1416 : 8087 : }
1417 : :
1418 : : void
1419 : 7003 : DefaultASTVisitor::visit (AST::SliceType &type)
1420 : : {
1421 : 7003 : visit (type.get_elem_type ());
1422 : 7003 : }
1423 : :
1424 : : void
1425 : 2453 : DefaultASTVisitor::visit (AST::InferredType &type)
1426 : 2453 : {}
1427 : :
1428 : : void
1429 : 710 : DefaultASTVisitor::visit (AST::MaybeNamedParam ¶m)
1430 : : {
1431 : 710 : visit_outer_attrs (param);
1432 : 710 : visit (param.get_type ());
1433 : 710 : }
1434 : :
1435 : : void
1436 : 710 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
1437 : : {
1438 : 770 : for (auto &lifetime : type.get_for_lifetimes ())
1439 : 60 : visit (lifetime);
1440 : 710 : visit (type.get_function_qualifiers ());
1441 : 1420 : for (auto ¶m : type.get_function_params ())
1442 : 710 : visit (param);
1443 : 710 : if (type.is_variadic ())
1444 : 0 : for (auto attr : type.get_variadic_attr ())
1445 : 0 : visit (attr);
1446 : 710 : if (type.has_return_type ())
1447 : 469 : visit (type.get_return_type ());
1448 : 710 : }
1449 : :
1450 : : void
1451 : 0 : DefaultASTVisitor::visit (AST::FormatArgs &)
1452 : : {
1453 : : // FIXME: Do we have anything to do? any subnodes to visit? Probably, right?
1454 : 0 : }
1455 : :
1456 : : void
1457 : 7743 : DefaultASTVisitor::visit (AST::VariadicParam ¶m)
1458 : : {
1459 : 7743 : if (param.has_pattern ())
1460 : 144 : visit (param.get_pattern ());
1461 : 7743 : }
1462 : :
1463 : : void
1464 : 4937 : ContextualASTVisitor::visit (AST::Crate &crate)
1465 : : {
1466 : 4937 : ctx.enter (Kind::CRATE);
1467 : 4937 : DefaultASTVisitor::visit (crate);
1468 : 4937 : ctx.exit ();
1469 : 4937 : }
1470 : :
1471 : : void
1472 : 1024 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
1473 : : {
1474 : 1024 : ctx.enter (Kind::INHERENT_IMPL);
1475 : 1024 : DefaultASTVisitor::visit (impl);
1476 : 1024 : ctx.exit ();
1477 : 1024 : }
1478 : :
1479 : : void
1480 : 4130 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
1481 : : {
1482 : 4130 : ctx.enter (Kind::TRAIT_IMPL);
1483 : 4130 : DefaultASTVisitor::visit (impl);
1484 : 4130 : ctx.exit ();
1485 : 4130 : }
1486 : :
1487 : : void
1488 : 3256 : ContextualASTVisitor::visit (AST::Trait &trait)
1489 : : {
1490 : 3256 : ctx.enter (Kind::TRAIT);
1491 : 3256 : DefaultASTVisitor::visit (trait);
1492 : 3256 : ctx.exit ();
1493 : 3256 : }
1494 : :
1495 : : } // namespace AST
1496 : : } // namespace Rust
|