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-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 : 59910 : DefaultASTVisitor::visit (AST::Crate &crate)
36 : : {
37 : 59910 : visit_inner_attrs (crate);
38 : 321899 : for (auto &item : crate.items)
39 : 261990 : visit (item);
40 : 59909 : }
41 : :
42 : : void
43 : 349365 : DefaultASTVisitor::visit (AST::Token &tok)
44 : 349365 : {}
45 : :
46 : : void
47 : 62386 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
48 : : {
49 : 468729 : for (auto &token : delim_tok_tree.get_token_trees ())
50 : 406343 : visit (token);
51 : 62386 : }
52 : :
53 : : void
54 : 0 : DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
55 : : {
56 : 0 : for (auto &item : input.get_items ())
57 : 0 : visit (item);
58 : 0 : }
59 : :
60 : : void
61 : 423611 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
62 : : {
63 : 423611 : visit_outer_attrs (ident_expr);
64 : 423611 : }
65 : :
66 : : void
67 : 166934 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
68 : 166934 : {}
69 : :
70 : : void
71 : 3277 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
72 : : {
73 : 3277 : visit_outer_attrs (lifetime_param);
74 : 3277 : visit (lifetime_param.get_lifetime ());
75 : 3290 : for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
76 : 13 : visit (lifetime_bound);
77 : 3277 : }
78 : :
79 : : void
80 : 596 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
81 : : {
82 : 596 : visit_outer_attrs (const_param);
83 : 596 : if (const_param.has_type ())
84 : 596 : visit (const_param.get_type ());
85 : 596 : if (const_param.has_default_value ())
86 : 233 : visit (const_param.get_default_value_unchecked ());
87 : 596 : }
88 : :
89 : : void
90 : 253308 : DefaultASTVisitor::visit (AST::PathInExpression &path)
91 : : {
92 : 253308 : visit_outer_attrs (path);
93 : :
94 : 253308 : if (!path.is_lang_item ())
95 : 603174 : for (auto &segment : path.get_segments ())
96 : 350864 : visit (segment);
97 : 253308 : }
98 : :
99 : : void
100 : 971152 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
101 : 971152 : {}
102 : :
103 : : void
104 : 851 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
105 : : {
106 : 851 : visit (binding.get_type ());
107 : 851 : }
108 : :
109 : : void
110 : 31295 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
111 : : {
112 : 31295 : if (segment.has_generic_args ())
113 : 31284 : visit (segment.get_generic_args ());
114 : 31295 : }
115 : :
116 : : void
117 : 379 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
118 : : {
119 : 782 : for (auto &input : tpf.get_params ())
120 : 403 : visit (input);
121 : 379 : if (tpf.has_return_type ())
122 : 355 : visit (tpf.get_return_type ());
123 : 379 : }
124 : :
125 : : void
126 : 402068 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
127 : 402068 : {}
128 : :
129 : : void
130 : 379 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
131 : : {
132 : 379 : visit (segment.get_type_path_function ());
133 : 379 : visit (segment.get_ident_segment ());
134 : 379 : }
135 : :
136 : : void
137 : 36830 : DefaultASTVisitor::visit (AST::GenericArgs &args)
138 : : {
139 : 37162 : for (auto &lifetime : args.get_lifetime_args ())
140 : 332 : visit (lifetime);
141 : :
142 : 75463 : for (auto &generic : args.get_generic_args ())
143 : 38633 : visit (generic);
144 : :
145 : 37609 : for (auto &binding : args.get_binding_args ())
146 : 779 : visit (binding);
147 : 36830 : }
148 : :
149 : : void
150 : 401689 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
151 : : {
152 : 401689 : visit (segment.get_ident_segment ());
153 : 401689 : if (segment.has_generic_args ())
154 : 9123 : visit (segment.get_generic_args ());
155 : 401689 : }
156 : : void
157 : 985801 : DefaultASTVisitor::visit (AST::TypePath &path)
158 : : {
159 : 2004459 : for (auto &segment : path.get_segments ())
160 : 1018658 : visit (segment);
161 : 985801 : }
162 : :
163 : : void
164 : 1674 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
165 : : {
166 : 1674 : visit_outer_attrs (path);
167 : 1674 : visit (path.get_qualified_path_type ());
168 : :
169 : 3348 : for (auto &segment : path.get_segments ())
170 : 1674 : visit (segment);
171 : 1674 : }
172 : :
173 : : void
174 : 6083 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
175 : : {
176 : 6083 : visit (path.get_type ());
177 : 6083 : if (path.has_as_clause ())
178 : 5518 : visit (path.get_as_type_path ());
179 : 6083 : }
180 : :
181 : : void
182 : 4409 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
183 : : {
184 : 4409 : visit (path.get_qualified_path_type ());
185 : 4409 : visit (path.get_associated_segment ());
186 : :
187 : 4409 : for (auto &segment : path.get_segments ())
188 : 0 : visit (segment);
189 : 4409 : }
190 : :
191 : : void
192 : 1230598 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
193 : : {
194 : 1230598 : visit_outer_attrs (expr);
195 : 1230598 : }
196 : :
197 : : void
198 : 0 : DefaultASTVisitor::visit (AST::AttrInputLiteral &attr_input)
199 : : {
200 : 0 : visit (attr_input.get_literal ());
201 : 0 : }
202 : :
203 : : void
204 : 0 : DefaultASTVisitor::visit (AST::AttrInputMacro &attr_input)
205 : : {
206 : 0 : visit (attr_input.get_macro ());
207 : 0 : }
208 : :
209 : : void
210 : 0 : DefaultASTVisitor::visit (AST::MetaItemLitExpr &meta_item)
211 : : {
212 : 0 : visit (meta_item.get_literal ());
213 : 0 : }
214 : :
215 : : void
216 : 19294 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
217 : 19294 : {}
218 : :
219 : : void
220 : 10702 : DefaultASTVisitor::visit (AST::SimplePath &path)
221 : : {
222 : 29996 : for (auto &segment : path.get_segments ())
223 : 19294 : visit (segment);
224 : 10702 : }
225 : :
226 : : void
227 : 0 : DefaultASTVisitor::visit (AST::MetaItemPathExpr &meta_item)
228 : : {
229 : 0 : visit (meta_item.get_path ());
230 : 0 : visit (meta_item.get_expr ());
231 : 0 : }
232 : :
233 : : void
234 : 40036 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
235 : : {
236 : 40036 : visit_outer_attrs (expr);
237 : 40036 : visit (expr.get_borrowed_expr ());
238 : 40036 : }
239 : :
240 : : void
241 : 52174 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
242 : : {
243 : 52174 : visit_outer_attrs (expr);
244 : 52174 : visit (expr.get_dereferenced_expr ());
245 : 52174 : }
246 : :
247 : : void
248 : 9 : DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
249 : : {
250 : 9 : visit_outer_attrs (expr);
251 : 9 : }
252 : :
253 : : void
254 : 8824 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
255 : : {
256 : 8824 : visit_outer_attrs (expr);
257 : 8824 : visit (expr.get_negated_expr ());
258 : 8824 : }
259 : :
260 : : void
261 : 1625553 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
262 : : {
263 : 1625553 : visit_outer_attrs (expr);
264 : 1625553 : visit (expr.get_left_expr ());
265 : 1625553 : visit (expr.get_right_expr ());
266 : 1625553 : }
267 : :
268 : : void
269 : 41811 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
270 : : {
271 : 41811 : visit_outer_attrs (expr);
272 : 41811 : visit (expr.get_left_expr ());
273 : 41811 : visit (expr.get_right_expr ());
274 : 41811 : }
275 : :
276 : : void
277 : 5363 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
278 : : {
279 : 5363 : visit_outer_attrs (expr);
280 : 5363 : visit (expr.get_left_expr ());
281 : 5363 : visit (expr.get_right_expr ());
282 : 5363 : }
283 : :
284 : : void
285 : 112800 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
286 : : {
287 : 112800 : visit_outer_attrs (expr);
288 : 112800 : visit (expr.get_casted_expr ());
289 : 112800 : visit (expr.get_type_to_cast_to ());
290 : 112800 : }
291 : :
292 : : void
293 : 38918 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
294 : : {
295 : 38918 : visit_outer_attrs (expr);
296 : 38918 : visit (expr.get_left_expr ());
297 : 38918 : visit (expr.get_right_expr ());
298 : 38918 : }
299 : :
300 : : void
301 : 11802 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
302 : : {
303 : 11802 : visit_outer_attrs (expr);
304 : 11802 : visit (expr.get_left_expr ());
305 : 11802 : visit (expr.get_right_expr ());
306 : 11802 : }
307 : :
308 : : void
309 : 5235 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
310 : : {
311 : 5235 : visit_outer_attrs (expr);
312 : 5235 : visit_inner_attrs (expr);
313 : 5235 : visit (expr.get_expr_in_parens ());
314 : 5235 : }
315 : :
316 : : void
317 : 3015 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
318 : : {
319 : 17124 : for (auto &value : elems.get_values ())
320 : 14109 : visit (value);
321 : 3015 : }
322 : :
323 : : void
324 : 1844 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
325 : : {
326 : 1844 : visit (elems.get_elem_to_copy ());
327 : 1844 : visit (elems.get_num_copies ());
328 : 1844 : }
329 : :
330 : : void
331 : 5827 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
332 : : {
333 : 5827 : visit_outer_attrs (expr);
334 : 5827 : visit_inner_attrs (expr);
335 : 5827 : visit (expr.get_array_elems ());
336 : 5827 : }
337 : :
338 : : void
339 : 3578 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
340 : : {
341 : 3578 : visit_outer_attrs (expr);
342 : 3578 : visit (expr.get_array_expr ());
343 : 3578 : visit (expr.get_index_expr ());
344 : 3578 : }
345 : :
346 : : void
347 : 6667 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
348 : : {
349 : 6667 : visit_outer_attrs (expr);
350 : 6667 : visit_inner_attrs (expr);
351 : 18303 : for (auto &elem : expr.get_tuple_elems ())
352 : 11636 : visit (elem);
353 : 6667 : }
354 : :
355 : : void
356 : 16524 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
357 : : {
358 : 16524 : visit_outer_attrs (expr);
359 : 16524 : visit (expr.get_tuple_expr ());
360 : 16524 : }
361 : :
362 : : void
363 : 609 : DefaultASTVisitor::visit (AST::StructExprStruct &expr)
364 : : {
365 : 609 : visit_outer_attrs (expr);
366 : 609 : visit_inner_attrs (expr);
367 : 609 : visit (expr.get_struct_name ());
368 : 609 : }
369 : :
370 : : void
371 : 3041 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
372 : 3041 : {}
373 : :
374 : : void
375 : 34877 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
376 : : {
377 : 34877 : visit (field.get_value ());
378 : 34877 : }
379 : :
380 : : void
381 : 704 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
382 : : {
383 : 704 : visit (field.get_value ());
384 : 704 : }
385 : :
386 : : void
387 : 1008 : DefaultASTVisitor::visit (AST::StructBase &base)
388 : : {
389 : 1008 : visit (base.get_base_struct ());
390 : 1008 : }
391 : :
392 : : void
393 : 20940 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
394 : : {
395 : 20940 : visit_outer_attrs (expr);
396 : 20940 : visit_inner_attrs (expr);
397 : 20940 : visit (expr.get_struct_name ());
398 : 20940 : if (expr.has_struct_base ())
399 : 945 : visit (expr.get_struct_base ());
400 : 57497 : for (auto &field : expr.get_fields ())
401 : 36557 : visit (field);
402 : 20940 : }
403 : :
404 : : void
405 : 0 : DefaultASTVisitor::visit (AST::StructExprStructBase &expr)
406 : : {
407 : 0 : visit_outer_attrs (expr);
408 : 0 : visit_inner_attrs (expr);
409 : 0 : visit (expr.get_struct_name ());
410 : 0 : visit (expr.get_struct_base ());
411 : 0 : }
412 : :
413 : : void
414 : 181605 : DefaultASTVisitor::visit (AST::CallExpr &expr)
415 : : {
416 : 181605 : visit_outer_attrs (expr);
417 : 181605 : visit (expr.get_function_expr ());
418 : 400872 : for (auto ¶m : expr.get_params ())
419 : 219267 : visit (param);
420 : 181605 : }
421 : :
422 : : void
423 : 49151 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
424 : : {
425 : 49151 : visit_outer_attrs (expr);
426 : 49151 : visit (expr.get_receiver_expr ());
427 : 49151 : visit (expr.get_method_name ());
428 : 83213 : for (auto ¶m : expr.get_params ())
429 : 34062 : visit (param);
430 : 49151 : }
431 : :
432 : : void
433 : 91347 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
434 : : {
435 : 91347 : visit_outer_attrs (expr);
436 : 91347 : visit (expr.get_receiver_expr ());
437 : 91347 : }
438 : :
439 : : void
440 : 260 : DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
441 : : {
442 : 260 : visit_outer_attrs (expr);
443 : 460 : for (auto ¶m : expr.get_params ())
444 : 200 : visit (param);
445 : 260 : visit (expr.get_definition_expr ());
446 : 260 : }
447 : :
448 : : void
449 : 326150 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
450 : : {
451 : 326150 : visit_outer_attrs (expr);
452 : 326150 : visit_inner_attrs (expr);
453 : :
454 : 326150 : if (expr.has_label ())
455 : 0 : visit (expr.get_label ());
456 : :
457 : 634983 : for (auto &stmt : expr.get_statements ())
458 : 308834 : visit (stmt);
459 : :
460 : 326149 : if (expr.has_tail_expr ())
461 : 243038 : visit (expr.get_tail_expr ());
462 : 326149 : }
463 : :
464 : : void
465 : 105 : DefaultASTVisitor::visit (AST::ConstBlock &expr)
466 : : {
467 : 105 : visit (expr.get_const_expr ());
468 : 105 : }
469 : :
470 : : void
471 : 12407 : DefaultASTVisitor::visit (AST::AnonConst &expr)
472 : : {
473 : 12407 : if (!expr.is_deferred ())
474 : 12343 : visit (expr.get_inner_expr ());
475 : 12407 : }
476 : :
477 : : void
478 : 240 : DefaultASTVisitor::visit (AST::ClosureExprInnerTyped &expr)
479 : : {
480 : 240 : visit_outer_attrs (expr);
481 : 536 : for (auto ¶m : expr.get_params ())
482 : 296 : visit (param);
483 : 240 : visit (expr.get_return_type ());
484 : 240 : visit (expr.get_definition_expr ());
485 : 240 : }
486 : :
487 : : void
488 : 868 : DefaultASTVisitor::visit (AST::ClosureParam ¶m)
489 : : {
490 : 868 : visit_outer_attrs (param);
491 : 868 : visit (param.get_pattern ());
492 : 868 : if (param.has_type_given ())
493 : 812 : visit (param.get_type ());
494 : 868 : }
495 : :
496 : : void
497 : 100 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
498 : : {
499 : 100 : visit_outer_attrs (expr);
500 : 100 : if (expr.has_label ())
501 : 10 : visit (expr.get_label_unchecked ());
502 : 100 : }
503 : :
504 : : void
505 : 1484 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
506 : : {
507 : 1484 : visit_outer_attrs (expr);
508 : 1484 : if (expr.has_label ())
509 : 346 : visit (expr.get_label_unchecked ());
510 : :
511 : 1484 : if (expr.has_break_expr ())
512 : 452 : visit (expr.get_break_expr ());
513 : 1483 : }
514 : :
515 : : void
516 : 1257 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
517 : : {
518 : 1257 : visit (expr.get_from_expr ());
519 : 1257 : visit (expr.get_to_expr ());
520 : 1257 : }
521 : :
522 : : void
523 : 112 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
524 : : {
525 : 112 : visit (expr.get_from_expr ());
526 : 112 : }
527 : :
528 : : void
529 : 112 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
530 : : {
531 : 112 : visit (expr.get_to_expr ());
532 : 112 : }
533 : :
534 : : void
535 : 0 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
536 : 0 : {}
537 : :
538 : : void
539 : 112 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
540 : : {
541 : 112 : visit (expr.get_from_expr ());
542 : 112 : visit (expr.get_to_expr ());
543 : 112 : }
544 : :
545 : : void
546 : 0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
547 : : {
548 : 0 : visit (expr.get_to_expr ());
549 : 0 : }
550 : :
551 : : void
552 : 8676 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
553 : : {
554 : 8676 : visit_outer_attrs (expr);
555 : 8676 : if (expr.has_returned_expr ())
556 : 7927 : visit (expr.get_returned_expr ());
557 : 8676 : }
558 : :
559 : : void
560 : 11 : DefaultASTVisitor::visit (AST::TryExpr &expr)
561 : : {
562 : 11 : visit_outer_attrs (expr);
563 : 11 : visit (expr.get_block_expr ());
564 : 11 : }
565 : :
566 : : void
567 : 16 : DefaultASTVisitor::visit (AST::BoxExpr &expr)
568 : : {
569 : 16 : visit_outer_attrs (expr);
570 : 16 : visit (expr.get_boxed_expr ());
571 : 16 : }
572 : :
573 : : void
574 : 60581 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
575 : : {
576 : 60581 : visit_outer_attrs (expr);
577 : 60581 : visit (expr.get_block_expr ());
578 : 60581 : }
579 : :
580 : : void
581 : 720 : DefaultASTVisitor::visit (AST::LoopLabel &label)
582 : : {
583 : 720 : visit (label.get_lifetime ());
584 : 720 : }
585 : :
586 : : void
587 : 1629 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
588 : : {
589 : 1629 : visit_outer_attrs (expr);
590 : 1629 : if (expr.has_loop_label ())
591 : 454 : visit (expr.get_loop_label ());
592 : 1629 : visit (expr.get_loop_block ());
593 : 1629 : }
594 : :
595 : : void
596 : 1379 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
597 : : {
598 : 1379 : visit_outer_attrs (expr);
599 : 1379 : if (expr.has_loop_label ())
600 : 30 : visit (expr.get_loop_label ());
601 : 1379 : visit (expr.get_predicate_expr ());
602 : 1379 : visit (expr.get_loop_block ());
603 : 1379 : }
604 : :
605 : : void
606 : 18 : DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
607 : : {
608 : 18 : visit_outer_attrs (expr);
609 : 36 : for (auto &pattern : expr.get_patterns ())
610 : 18 : visit (pattern);
611 : :
612 : 18 : if (expr.has_loop_label ())
613 : 0 : visit (expr.get_loop_label ());
614 : :
615 : 18 : visit (expr.get_scrutinee_expr ());
616 : 18 : visit (expr.get_loop_block ());
617 : 18 : }
618 : :
619 : : void
620 : 328 : DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
621 : : {
622 : 328 : visit_outer_attrs (expr);
623 : 328 : visit (expr.get_pattern ());
624 : 328 : visit (expr.get_iterator_expr ());
625 : 328 : if (expr.has_loop_label ())
626 : 0 : visit (expr.get_loop_label ());
627 : 328 : visit (expr.get_loop_block ());
628 : 328 : }
629 : :
630 : : void
631 : 25774 : DefaultASTVisitor::visit (AST::IfExpr &expr)
632 : : {
633 : 25774 : visit_outer_attrs (expr);
634 : 25774 : visit (expr.get_condition_expr ());
635 : 25774 : visit (expr.get_if_block ());
636 : 25774 : }
637 : :
638 : : void
639 : 19317 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
640 : : {
641 : 19317 : visit (reinterpret_cast<AST::IfExpr &> (expr));
642 : 19317 : visit (expr.get_else_block ());
643 : 19317 : }
644 : :
645 : : void
646 : 222 : DefaultASTVisitor::visit (AST::IfLetExpr &expr)
647 : : {
648 : 222 : visit_outer_attrs (expr);
649 : 444 : for (auto &pattern : expr.get_patterns ())
650 : 222 : visit (pattern);
651 : 222 : visit (expr.get_value_expr ());
652 : 222 : visit (expr.get_if_block ());
653 : 222 : }
654 : :
655 : : void
656 : 78 : DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
657 : : {
658 : 78 : visit (reinterpret_cast<AST::IfLetExpr &> (expr));
659 : 78 : visit (expr.get_else_block ());
660 : 78 : }
661 : :
662 : : void
663 : 30501 : DefaultASTVisitor::visit (AST::MatchArm &arm)
664 : : {
665 : 30501 : visit_outer_attrs (arm);
666 : 61002 : for (auto &pattern : arm.get_patterns ())
667 : 30501 : visit (pattern);
668 : 30501 : if (arm.has_match_arm_guard ())
669 : 11 : visit (arm.get_guard_expr ());
670 : 30501 : }
671 : :
672 : : void
673 : 32771 : DefaultASTVisitor::visit (AST::MatchCase &arm)
674 : : {
675 : 32771 : visit (arm.get_arm ());
676 : 32771 : visit (arm.get_expr ());
677 : 32771 : }
678 : :
679 : : void
680 : 14333 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
681 : : {
682 : 14333 : visit_outer_attrs (expr);
683 : 14333 : visit_inner_attrs (expr);
684 : 14333 : visit (expr.get_scrutinee_expr ());
685 : 47104 : for (auto &arm : expr.get_match_cases ())
686 : 32771 : visit (arm);
687 : 14333 : }
688 : :
689 : : void
690 : 0 : DefaultASTVisitor::visit (AST::AwaitExpr &expr)
691 : : {
692 : 0 : visit_outer_attrs (expr);
693 : 0 : visit (expr.get_awaited_expr ());
694 : 0 : }
695 : :
696 : : void
697 : 0 : DefaultASTVisitor::visit (AST::AsyncBlockExpr &expr)
698 : : {
699 : 0 : visit_outer_attrs (expr);
700 : 0 : visit (expr.get_block_expr ());
701 : 0 : }
702 : :
703 : : void
704 : 314 : DefaultASTVisitor::visit (AST::InlineAsm &expr)
705 : : {
706 : 314 : visit_outer_attrs (expr);
707 : 314 : using RegisterType = AST::InlineAsmOperand::RegisterType;
708 : 658 : for (auto &operand : expr.get_operands ())
709 : : {
710 : 344 : switch (operand.get_register_type ())
711 : : {
712 : 120 : case RegisterType::In:
713 : 120 : {
714 : 120 : visit (operand.get_in ().expr);
715 : 120 : break;
716 : : }
717 : 200 : case RegisterType::Out:
718 : 200 : {
719 : 200 : visit (operand.get_out ().expr);
720 : 200 : break;
721 : : }
722 : 0 : case RegisterType::InOut:
723 : 0 : {
724 : 0 : visit (operand.get_in_out ().expr);
725 : 0 : break;
726 : : }
727 : 24 : case RegisterType::SplitInOut:
728 : 24 : {
729 : 24 : auto split = operand.get_split_in_out ();
730 : 24 : visit (split.in_expr);
731 : 24 : visit (split.out_expr);
732 : 24 : break;
733 : 24 : }
734 : 0 : case RegisterType::Const:
735 : 0 : {
736 : 0 : visit (operand.get_const ().anon_const.get_inner_expr ());
737 : 0 : break;
738 : : }
739 : 0 : case RegisterType::Sym:
740 : 0 : {
741 : 0 : visit (operand.get_sym ().expr);
742 : 0 : break;
743 : : }
744 : 0 : case RegisterType::Label:
745 : 0 : {
746 : 0 : visit (operand.get_label ().expr);
747 : 0 : break;
748 : : }
749 : : }
750 : 314 : }
751 : 314 : }
752 : :
753 : : void
754 : 24 : DefaultASTVisitor::visit (AST::LlvmInlineAsm &expr)
755 : : {
756 : 24 : for (auto &output : expr.get_outputs ())
757 : 0 : visit (output.expr);
758 : :
759 : 48 : for (auto &input : expr.get_inputs ())
760 : 24 : visit (input.expr);
761 : 24 : }
762 : :
763 : : void
764 : 111886 : DefaultASTVisitor::visit (AST::TypeParam ¶m)
765 : : {
766 : 111886 : visit_outer_attrs (param);
767 : 123093 : for (auto &bound : param.get_type_param_bounds ())
768 : 11207 : visit (bound);
769 : 111886 : if (param.has_type ())
770 : 5249 : visit (param.get_type ());
771 : 111886 : }
772 : :
773 : : void
774 : 24 : DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem &item)
775 : : {
776 : 24 : visit (item.get_lifetime ());
777 : 48 : for (auto &bound : item.get_lifetime_bounds ())
778 : 24 : visit (bound);
779 : 24 : }
780 : :
781 : : void
782 : 4769 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
783 : : {
784 : 4877 : for (auto &lifetime : item.get_for_lifetimes ())
785 : 108 : visit (lifetime);
786 : 4769 : visit (item.get_type ());
787 : 9538 : for (auto ¶m : item.get_type_param_bounds ())
788 : 4769 : visit (param);
789 : 4769 : }
790 : :
791 : : void
792 : 534992 : DefaultASTVisitor::visit (AST::Visibility &vis)
793 : : {
794 : 534992 : if (vis.has_path ())
795 : 927 : visit (vis.get_path ());
796 : 534992 : }
797 : :
798 : : void
799 : 257942 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
800 : 257942 : {}
801 : :
802 : : void
803 : 4711 : DefaultASTVisitor::visit (AST::WhereClause &where)
804 : : {
805 : 9589 : for (auto &item : where.get_items ())
806 : 4878 : visit (item);
807 : 4711 : }
808 : : void
809 : 158312 : DefaultASTVisitor::visit (AST::FunctionParam ¶m)
810 : : {
811 : 158312 : visit_outer_attrs (param);
812 : 158312 : if (param.has_name ())
813 : 158312 : visit (param.get_pattern ());
814 : :
815 : 158312 : visit (param.get_type ());
816 : 158312 : }
817 : :
818 : : void
819 : 123968 : DefaultASTVisitor::visit (AST::SelfParam ¶m)
820 : : {
821 : 123968 : visit_outer_attrs (param);
822 : :
823 : 123968 : if (param.has_lifetime ())
824 : 71451 : visit (param.get_lifetime ());
825 : :
826 : 123968 : if (param.has_type ())
827 : 14 : visit (param.get_type ());
828 : 123968 : }
829 : :
830 : : void
831 : 16329 : DefaultASTVisitor::visit (AST::Module &module)
832 : : {
833 : 16329 : visit_outer_attrs (module);
834 : 16329 : visit (module.get_visibility ());
835 : 16329 : visit_inner_attrs (module);
836 : 70869 : for (auto &item : module.get_items ())
837 : 54540 : visit (item);
838 : 16329 : }
839 : :
840 : : void
841 : 129 : DefaultASTVisitor::visit (AST::ExternCrate &crate)
842 : : {
843 : 129 : visit_outer_attrs (crate);
844 : 129 : visit (crate.get_visibility ());
845 : 129 : }
846 : :
847 : : void
848 : 63 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
849 : : {
850 : 63 : visit (use_tree.get_path ());
851 : 63 : }
852 : :
853 : : void
854 : 1340 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
855 : : {
856 : 1340 : visit (use_tree.get_path ());
857 : 1340 : }
858 : :
859 : : void
860 : 4198 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
861 : : {
862 : 4198 : visit (use_tree.get_path ());
863 : 4198 : }
864 : :
865 : : void
866 : 5611 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
867 : : {
868 : 5611 : visit (use_decl.get_visibility ());
869 : 5611 : visit (use_decl.get_tree ());
870 : 5611 : }
871 : :
872 : : void
873 : 239343 : DefaultASTVisitor::visit_function_params (AST::Function &function)
874 : : {
875 : 512446 : for (auto ¶m : function.get_function_params ())
876 : 273103 : visit (param);
877 : 239343 : }
878 : :
879 : : void
880 : 257256 : DefaultASTVisitor::visit (AST::Function &function)
881 : : {
882 : 257256 : visit_outer_attrs (function);
883 : 257256 : visit (function.get_visibility ());
884 : 257256 : visit (function.get_qualifiers ());
885 : 280245 : for (auto &generic : function.get_generic_params ())
886 : 22989 : visit (generic);
887 : :
888 : 257256 : visit_function_params (function);
889 : :
890 : 257256 : if (function.has_return_type ())
891 : 188390 : visit (function.get_return_type ());
892 : 257256 : if (function.has_where_clause ())
893 : 3254 : visit (function.get_where_clause ());
894 : 257256 : if (function.has_body ())
895 : 201047 : visit (*function.get_definition ());
896 : 257255 : }
897 : :
898 : : void
899 : 23953 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
900 : : {
901 : 23953 : visit_outer_attrs (type_alias);
902 : 23953 : visit (type_alias.get_visibility ());
903 : 24120 : for (auto &generic : type_alias.get_generic_params ())
904 : 167 : visit (generic);
905 : 23953 : if (type_alias.has_where_clause ())
906 : 0 : visit (type_alias.get_where_clause ());
907 : 23953 : visit (type_alias.get_type_aliased ());
908 : 23953 : }
909 : :
910 : : void
911 : 30834 : DefaultASTVisitor::visit (AST::StructField &field)
912 : : {
913 : 30834 : visit_outer_attrs (field);
914 : 30834 : visit (field.get_visibility ());
915 : 30834 : visit (field.get_field_type ());
916 : 30834 : }
917 : :
918 : : void
919 : 21014 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
920 : : {
921 : 21014 : visit_outer_attrs (struct_item);
922 : 21014 : visit (struct_item.get_visibility ());
923 : 27712 : for (auto &generic : struct_item.get_generic_params ())
924 : 6698 : visit (generic);
925 : 21014 : if (struct_item.has_where_clause ())
926 : 26 : visit (struct_item.get_where_clause ());
927 : 46052 : for (auto &field : struct_item.get_fields ())
928 : 25038 : visit (field);
929 : 21014 : }
930 : :
931 : : void
932 : 28122 : DefaultASTVisitor::visit (AST::TupleField &field)
933 : : {
934 : 28122 : visit_outer_attrs (field);
935 : 28122 : visit (field.get_visibility ());
936 : 28122 : visit (field.get_field_type ());
937 : 28122 : }
938 : :
939 : : void
940 : 12872 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
941 : : {
942 : 12872 : visit_outer_attrs (tuple_struct);
943 : 12872 : visit (tuple_struct.get_visibility ());
944 : 17663 : for (auto &generic : tuple_struct.get_generic_params ())
945 : 4791 : visit (generic);
946 : 12872 : if (tuple_struct.has_where_clause ())
947 : 0 : visit (tuple_struct.get_where_clause ());
948 : 35446 : for (auto &field : tuple_struct.get_fields ())
949 : 22574 : visit (field);
950 : 12872 : }
951 : :
952 : : void
953 : 16042 : DefaultASTVisitor::visit (AST::EnumItem &item)
954 : : {
955 : 16042 : visit_outer_attrs (item);
956 : 16042 : visit (item.get_visibility ());
957 : 16042 : }
958 : :
959 : : void
960 : 5203 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
961 : : {
962 : 5203 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
963 : 10751 : for (auto &field : item.get_tuple_fields ())
964 : 5548 : visit (field);
965 : 5203 : }
966 : :
967 : : void
968 : 1041 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
969 : : {
970 : 1041 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
971 : 2764 : for (auto &field : item.get_struct_fields ())
972 : 1723 : visit (field);
973 : 1041 : }
974 : :
975 : : void
976 : 4648 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
977 : : {
978 : 4648 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
979 : 4648 : visit (item.get_expr ());
980 : 4648 : }
981 : :
982 : : void
983 : 8815 : DefaultASTVisitor::visit (AST::Enum &enum_item)
984 : : {
985 : 8815 : visit_outer_attrs (enum_item);
986 : 8815 : visit (enum_item.get_visibility ());
987 : 13682 : for (auto &generic : enum_item.get_generic_params ())
988 : 4867 : visit (generic);
989 : 8815 : if (enum_item.has_where_clause ())
990 : 0 : visit (enum_item.get_where_clause ());
991 : 29522 : for (auto &item : enum_item.get_variants ())
992 : 20707 : visit (item);
993 : 8815 : }
994 : :
995 : : void
996 : 1401 : DefaultASTVisitor::visit (AST::Union &union_item)
997 : : {
998 : 1401 : visit_outer_attrs (union_item);
999 : 1401 : visit (union_item.get_visibility ());
1000 : 2397 : for (auto &generic : union_item.get_generic_params ())
1001 : 996 : visit (generic);
1002 : 1401 : if (union_item.has_where_clause ())
1003 : 0 : visit (union_item.get_where_clause ());
1004 : 5474 : for (auto &variant : union_item.get_variants ())
1005 : 4073 : visit (variant);
1006 : 1401 : }
1007 : :
1008 : : void
1009 : 6580 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
1010 : : {
1011 : 6580 : visit_outer_attrs (const_item);
1012 : 6580 : visit (const_item.get_visibility ());
1013 : 6580 : visit (const_item.get_type ());
1014 : 6580 : if (const_item.has_expr ())
1015 : 6530 : visit (const_item.get_expr ());
1016 : 6580 : }
1017 : :
1018 : : void
1019 : 715 : DefaultASTVisitor::visit (AST::StaticItem &static_item)
1020 : : {
1021 : 715 : visit_outer_attrs (static_item);
1022 : 715 : visit (static_item.get_visibility ());
1023 : 715 : visit (static_item.get_type ());
1024 : 715 : visit (static_item.get_expr ());
1025 : 715 : }
1026 : :
1027 : : void
1028 : 628 : DefaultASTVisitor::visit (AST::TraitItemConst &item)
1029 : : {
1030 : 628 : visit_outer_attrs (item);
1031 : 628 : visit (item.get_type ());
1032 : 628 : if (item.has_expr ())
1033 : 180 : visit (item.get_expr ());
1034 : 628 : }
1035 : :
1036 : : void
1037 : 14177 : DefaultASTVisitor::visit (AST::TraitItemType &item)
1038 : : {
1039 : 14177 : visit_outer_attrs (item);
1040 : 15050 : for (auto &bound : item.get_type_param_bounds ())
1041 : 873 : visit (bound);
1042 : 14177 : }
1043 : :
1044 : : void
1045 : 26634 : DefaultASTVisitor::visit (AST::Trait &trait)
1046 : : {
1047 : 26634 : visit_outer_attrs (trait);
1048 : 26634 : visit (trait.get_visibility ());
1049 : :
1050 : 26634 : visit_inner_attrs (trait);
1051 : :
1052 : 26634 : visit (trait.get_implicit_self ());
1053 : :
1054 : 31526 : for (auto &generic : trait.get_generic_params ())
1055 : 4892 : visit (generic);
1056 : :
1057 : 26634 : if (trait.has_where_clause ())
1058 : 56 : visit (trait.get_where_clause ());
1059 : :
1060 : 31330 : for (auto &bound : trait.get_type_param_bounds ())
1061 : 4696 : visit (bound);
1062 : :
1063 : 51542 : for (auto &item : trait.get_trait_items ())
1064 : 24908 : visit (item);
1065 : 26634 : }
1066 : :
1067 : : void
1068 : 7379 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
1069 : : {
1070 : 7379 : visit_outer_attrs (impl);
1071 : 7379 : visit (impl.get_visibility ());
1072 : :
1073 : 9885 : for (auto &generic : impl.get_generic_params ())
1074 : 2506 : visit (generic);
1075 : 7379 : if (impl.has_where_clause ())
1076 : 8 : visit (impl.get_where_clause ());
1077 : 7379 : visit (impl.get_type ());
1078 : 7379 : visit_inner_attrs (impl);
1079 : 27382 : for (auto &item : impl.get_impl_items ())
1080 : 20003 : visit (item);
1081 : 7379 : }
1082 : :
1083 : : void
1084 : 33872 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
1085 : : {
1086 : 33872 : visit_outer_attrs (impl);
1087 : 33872 : visit (impl.get_visibility ());
1088 : :
1089 : 40320 : for (auto &generic : impl.get_generic_params ())
1090 : 6448 : visit (generic);
1091 : 33872 : if (impl.has_where_clause ())
1092 : 712 : visit (impl.get_where_clause ());
1093 : 33872 : visit (impl.get_type ());
1094 : 33872 : visit (impl.get_trait_path ());
1095 : 33872 : visit_inner_attrs (impl);
1096 : 75072 : for (auto &item : impl.get_impl_items ())
1097 : 41200 : visit (item);
1098 : 33872 : }
1099 : :
1100 : : void
1101 : 10 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
1102 : : {
1103 : 10 : visit_outer_attrs (item);
1104 : 10 : visit (item.get_visibility ());
1105 : 10 : }
1106 : :
1107 : : void
1108 : 13 : DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
1109 : : {
1110 : 13 : visit_outer_attrs (item);
1111 : 13 : visit (item.get_visibility ());
1112 : 13 : visit (item.get_type ());
1113 : 13 : }
1114 : :
1115 : : void
1116 : 16418 : DefaultASTVisitor::visit (AST::ExternBlock &block)
1117 : : {
1118 : 16418 : visit_outer_attrs (block);
1119 : 16418 : visit (block.get_visibility ());
1120 : 16418 : visit_inner_attrs (block);
1121 : 42173 : for (auto &item : block.get_extern_items ())
1122 : 25755 : visit (item);
1123 : 16418 : }
1124 : :
1125 : : void
1126 : 10800 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
1127 : 10800 : {}
1128 : :
1129 : : void
1130 : 5175 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
1131 : : {
1132 : 12542 : for (auto &m : match.get_matches ())
1133 : 7367 : visit (m);
1134 : 5175 : }
1135 : :
1136 : : void
1137 : 11047 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
1138 : : {
1139 : 24968 : for (auto &m : matcher.get_matches ())
1140 : 13921 : visit (m);
1141 : 11047 : }
1142 : :
1143 : : void
1144 : 10535 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
1145 : : {
1146 : 10535 : visit (transcriber.get_token_tree ());
1147 : 10535 : }
1148 : :
1149 : : void
1150 : 10535 : DefaultASTVisitor::visit (AST::MacroRule &rule)
1151 : : {
1152 : 10535 : visit (rule.get_matcher ());
1153 : 10535 : visit (rule.get_transcriber ());
1154 : 10535 : }
1155 : : void
1156 : 8326 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
1157 : : {
1158 : 8326 : visit_outer_attrs (rules_def);
1159 : 18861 : for (auto &rule : rules_def.get_macro_rules ())
1160 : 10535 : visit (rule);
1161 : 8326 : }
1162 : :
1163 : : void
1164 : 4174 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
1165 : : {
1166 : 4174 : visit (data.get_path ());
1167 : 4174 : visit (data.get_delim_tok_tree ());
1168 : 4174 : }
1169 : : void
1170 : 4174 : DefaultASTVisitor::visit (AST::MacroInvocation ¯o_invoc)
1171 : : {
1172 : 4174 : visit_outer_attrs (macro_invoc);
1173 : 4174 : visit (macro_invoc.get_invoc_data ());
1174 : 4174 : }
1175 : :
1176 : : void
1177 : 0 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
1178 : : {
1179 : 0 : visit (meta_item.get_path ());
1180 : 0 : }
1181 : :
1182 : : void
1183 : 0 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
1184 : : {
1185 : 0 : visit (meta_item.get_path ());
1186 : 0 : for (auto &inner : meta_item.get_seq ())
1187 : 0 : visit (inner);
1188 : 0 : }
1189 : :
1190 : : void
1191 : 0 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
1192 : 0 : {}
1193 : :
1194 : : void
1195 : 0 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
1196 : 0 : {}
1197 : :
1198 : : void
1199 : 0 : DefaultASTVisitor::visit (AST::MetaListPaths &meta_item)
1200 : : {
1201 : 0 : for (auto &path : meta_item.get_paths ())
1202 : 0 : visit (path);
1203 : 0 : }
1204 : :
1205 : : void
1206 : 0 : DefaultASTVisitor::visit (AST::MetaListNameValueStr &meta_item)
1207 : : {
1208 : 0 : for (auto &str : meta_item.get_values ())
1209 : 0 : visit (str);
1210 : 0 : }
1211 : :
1212 : : void
1213 : 4189 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
1214 : 4189 : {}
1215 : :
1216 : : void
1217 : 279062 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
1218 : : {
1219 : 279062 : if (pattern.has_subpattern ())
1220 : 142 : visit (pattern.get_subpattern ());
1221 : 279062 : }
1222 : :
1223 : : void
1224 : 19165 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
1225 : 19165 : {}
1226 : :
1227 : : void
1228 : 0 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
1229 : 0 : {}
1230 : :
1231 : : void
1232 : 299 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
1233 : 299 : {}
1234 : :
1235 : : void
1236 : 231 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
1237 : : {
1238 : 231 : visit (bound.get_path ());
1239 : 231 : }
1240 : :
1241 : : void
1242 : 0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
1243 : : {
1244 : 0 : visit (bound.get_qualified_path ());
1245 : 0 : }
1246 : :
1247 : : void
1248 : 286 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
1249 : : {
1250 : 286 : if (pattern.get_has_lower_bound ())
1251 : 286 : visit (pattern.get_lower_bound ());
1252 : 286 : if (pattern.get_has_upper_bound ())
1253 : 286 : visit (pattern.get_upper_bound ());
1254 : 286 : }
1255 : :
1256 : : void
1257 : 3064 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
1258 : : {
1259 : 3064 : visit (pattern.get_referenced_pattern ());
1260 : 3064 : }
1261 : :
1262 : : void
1263 : 14 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
1264 : : {
1265 : 14 : visit_outer_attrs (field);
1266 : 14 : visit (field.get_index_pattern ());
1267 : 14 : }
1268 : :
1269 : : void
1270 : 2300 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
1271 : : {
1272 : 2300 : visit_outer_attrs (field);
1273 : 2300 : visit (field.get_ident_pattern ());
1274 : 2300 : }
1275 : :
1276 : : void
1277 : 884 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
1278 : : {
1279 : 884 : visit_outer_attrs (field);
1280 : 884 : }
1281 : :
1282 : : void
1283 : 1795 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
1284 : : {
1285 : 4790 : for (auto &field : spe.get_struct_pattern_fields ())
1286 : 2995 : visit (field);
1287 : 1795 : for (auto &attribute : spe.get_etc_outer_attrs ())
1288 : : visit (attribute);
1289 : 1795 : }
1290 : :
1291 : : void
1292 : 1795 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
1293 : : {
1294 : 1795 : visit (pattern.get_path ());
1295 : 1795 : visit (pattern.get_struct_pattern_elems ());
1296 : 1795 : }
1297 : :
1298 : : void
1299 : 18091 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRange &tuple_items)
1300 : : {
1301 : 38020 : for (auto &pattern : tuple_items.get_patterns ())
1302 : 19929 : visit (pattern);
1303 : 18091 : }
1304 : :
1305 : : void
1306 : 0 : DefaultASTVisitor::visit (AST::TupleStructItemsRange &tuple_items)
1307 : : {
1308 : 0 : for (auto &lower : tuple_items.get_lower_patterns ())
1309 : 0 : visit (lower);
1310 : 0 : for (auto &upper : tuple_items.get_upper_patterns ())
1311 : 0 : visit (upper);
1312 : 0 : }
1313 : :
1314 : : void
1315 : 18091 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
1316 : : {
1317 : 18091 : visit (pattern.get_path ());
1318 : 18091 : visit (pattern.get_items ());
1319 : 18091 : }
1320 : :
1321 : : void
1322 : 8920 : DefaultASTVisitor::visit (AST::TuplePatternItemsMultiple &tuple_items)
1323 : : {
1324 : 26838 : for (auto &pattern : tuple_items.get_patterns ())
1325 : 17918 : visit (pattern);
1326 : 8920 : }
1327 : :
1328 : : void
1329 : 380 : DefaultASTVisitor::visit (AST::TuplePatternItemsRanged &tuple_items)
1330 : : {
1331 : 760 : for (auto &lower : tuple_items.get_lower_patterns ())
1332 : 380 : visit (lower);
1333 : 802 : for (auto &upper : tuple_items.get_upper_patterns ())
1334 : 422 : visit (upper);
1335 : 380 : }
1336 : :
1337 : : void
1338 : 9300 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
1339 : : {
1340 : 9300 : visit (pattern.get_items ());
1341 : 9300 : }
1342 : :
1343 : : void
1344 : 602 : DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
1345 : : {
1346 : 602 : visit (pattern.get_pattern_in_parens ());
1347 : 602 : }
1348 : :
1349 : : void
1350 : 504 : DefaultASTVisitor::visit (AST::SlicePatternItemsNoRest &items)
1351 : : {
1352 : 1512 : for (auto &item : items.get_patterns ())
1353 : 1008 : visit (item);
1354 : 504 : }
1355 : :
1356 : : void
1357 : 0 : DefaultASTVisitor::visit (AST::SlicePatternItemsHasRest &items)
1358 : : {
1359 : 0 : for (auto &item : items.get_lower_patterns ())
1360 : 0 : visit (item);
1361 : 0 : for (auto &item : items.get_upper_patterns ())
1362 : 0 : visit (item);
1363 : 0 : }
1364 : :
1365 : : void
1366 : 504 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
1367 : : {
1368 : 504 : visit (pattern.get_items ());
1369 : 504 : }
1370 : :
1371 : : void
1372 : 3175 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
1373 : : {
1374 : 9720 : for (auto &alt : pattern.get_alts ())
1375 : 6545 : visit (alt);
1376 : 3175 : }
1377 : :
1378 : : void
1379 : 1042 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
1380 : 1042 : {}
1381 : :
1382 : : void
1383 : 187884 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
1384 : : {
1385 : 187884 : visit_outer_attrs (stmt);
1386 : 187884 : visit (stmt.get_pattern ());
1387 : 187884 : if (stmt.has_type ())
1388 : 28742 : visit (stmt.get_type ());
1389 : 187884 : if (stmt.has_init_expr ())
1390 : 172476 : visit (stmt.get_init_expr ());
1391 : 187884 : }
1392 : :
1393 : : void
1394 : 151355 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
1395 : : {
1396 : 151355 : visit (stmt.get_expr ());
1397 : 151354 : }
1398 : :
1399 : : void
1400 : 28231 : DefaultASTVisitor::visit (AST::TraitBound &bound)
1401 : : {
1402 : 28413 : for (auto &lifetime : bound.get_for_lifetimes ())
1403 : 182 : visit (lifetime);
1404 : 28231 : visit (bound.get_type_path ());
1405 : 28231 : }
1406 : :
1407 : : void
1408 : 0 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
1409 : : {
1410 : 0 : for (auto &bound : type.get_type_param_bounds ())
1411 : 0 : visit (bound);
1412 : 0 : }
1413 : :
1414 : : void
1415 : 199 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
1416 : : {
1417 : 706 : for (auto &bound : type.get_type_param_bounds ())
1418 : 507 : visit (bound);
1419 : 199 : }
1420 : :
1421 : : void
1422 : 62 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
1423 : : {
1424 : 62 : visit (type.get_type_in_parens ());
1425 : 62 : }
1426 : :
1427 : : void
1428 : 1685 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
1429 : : {
1430 : 1685 : visit (type.get_trait_bound ());
1431 : 1685 : }
1432 : :
1433 : : void
1434 : 2528 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
1435 : : {
1436 : 2528 : visit (type.get_trait_bound ());
1437 : 2528 : }
1438 : :
1439 : : void
1440 : 7052 : DefaultASTVisitor::visit (AST::TupleType &type)
1441 : : {
1442 : 18257 : for (auto &elem : type.get_elems ())
1443 : 11205 : visit (elem);
1444 : 7052 : }
1445 : :
1446 : : void
1447 : 968 : DefaultASTVisitor::visit (AST::NeverType &type)
1448 : 968 : {}
1449 : :
1450 : : void
1451 : 127724 : DefaultASTVisitor::visit (AST::RawPointerType &type)
1452 : : {
1453 : 127724 : visit (type.get_type_pointed_to ());
1454 : 127724 : }
1455 : :
1456 : : void
1457 : 90869 : DefaultASTVisitor::visit (AST::ReferenceType &type)
1458 : : {
1459 : 90869 : visit (type.get_lifetime ());
1460 : 90869 : visit (type.get_base_type ());
1461 : 90869 : }
1462 : :
1463 : : void
1464 : 12302 : DefaultASTVisitor::visit (AST::ArrayType &type)
1465 : : {
1466 : 12302 : visit (type.get_elem_type ());
1467 : 12302 : visit (type.get_size_expr ());
1468 : 12302 : }
1469 : :
1470 : : void
1471 : 14535 : DefaultASTVisitor::visit (AST::SliceType &type)
1472 : : {
1473 : 14535 : visit (type.get_elem_type ());
1474 : 14535 : }
1475 : :
1476 : : void
1477 : 4947 : DefaultASTVisitor::visit (AST::InferredType &type)
1478 : 4947 : {}
1479 : :
1480 : : void
1481 : 678 : DefaultASTVisitor::visit (AST::MaybeNamedParam ¶m)
1482 : : {
1483 : 678 : visit_outer_attrs (param);
1484 : 678 : visit (param.get_type ());
1485 : 678 : }
1486 : :
1487 : : void
1488 : 686 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
1489 : : {
1490 : 726 : for (auto &lifetime : type.get_for_lifetimes ())
1491 : 40 : visit (lifetime);
1492 : 686 : visit (type.get_function_qualifiers ());
1493 : 1364 : for (auto ¶m : type.get_function_params ())
1494 : 678 : visit (param);
1495 : 686 : if (type.is_variadic ())
1496 : 0 : for (auto attr : type.get_variadic_attr ())
1497 : 0 : visit (attr);
1498 : 686 : if (type.has_return_type ())
1499 : 521 : visit (type.get_return_type ());
1500 : 686 : }
1501 : :
1502 : : void
1503 : 0 : DefaultASTVisitor::visit (AST::FormatArgs &)
1504 : : {
1505 : : // FIXME: Do we have anything to do? any subnodes to visit? Probably, right?
1506 : 0 : }
1507 : :
1508 : : void
1509 : 153 : DefaultASTVisitor::visit (AST::OffsetOf &offset_of)
1510 : : {
1511 : 153 : visit (offset_of.get_type ());
1512 : 153 : }
1513 : :
1514 : : void
1515 : 11932 : DefaultASTVisitor::visit (AST::VariadicParam ¶m)
1516 : : {
1517 : 11932 : if (param.has_pattern ())
1518 : 154 : visit (param.get_pattern ());
1519 : 11932 : }
1520 : :
1521 : : void
1522 : 4289 : ContextualASTVisitor::visit (AST::Crate &crate)
1523 : : {
1524 : 4289 : ctx.enter (Kind::CRATE);
1525 : 4289 : DefaultASTVisitor::visit (crate);
1526 : 4289 : ctx.exit ();
1527 : 4289 : }
1528 : :
1529 : : void
1530 : 947 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
1531 : : {
1532 : 947 : ctx.enter (Kind::INHERENT_IMPL);
1533 : 947 : DefaultASTVisitor::visit (impl);
1534 : 947 : ctx.exit ();
1535 : 947 : }
1536 : :
1537 : : void
1538 : 4703 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
1539 : : {
1540 : 4703 : ctx.enter (Kind::TRAIT_IMPL);
1541 : 4703 : DefaultASTVisitor::visit (impl);
1542 : 4703 : ctx.exit ();
1543 : 4703 : }
1544 : :
1545 : : void
1546 : 3639 : ContextualASTVisitor::visit (AST::Trait &trait)
1547 : : {
1548 : 3639 : ctx.enter (Kind::TRAIT);
1549 : 3639 : DefaultASTVisitor::visit (trait);
1550 : 3639 : ctx.exit ();
1551 : 3639 : }
1552 : :
1553 : : } // namespace AST
1554 : : } // namespace Rust
|