Branch data Line data Source code
1 : : // Copyright (C) 2020-2024 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 : 12555 : DefaultASTVisitor::visit (AST::Crate &crate)
35 : : {
36 : 12555 : visit_inner_attrs (crate);
37 : 60812 : for (auto &item : crate.items)
38 : 48257 : visit (item);
39 : 12555 : }
40 : :
41 : : void
42 : 14942 : DefaultASTVisitor::visit (AST::Token &tok)
43 : 14942 : {}
44 : :
45 : : void
46 : 2800 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
47 : : {
48 : 19328 : for (auto &token : delim_tok_tree.get_token_trees ())
49 : 16528 : visit (token);
50 : 2800 : }
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 : 74492 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
61 : : {
62 : 74492 : visit_outer_attrs (ident_expr);
63 : 74492 : }
64 : :
65 : : void
66 : 25729 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
67 : 25729 : {}
68 : :
69 : : void
70 : 430 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
71 : : {
72 : 430 : visit (lifetime_param.get_outer_attribute ());
73 : 430 : visit (lifetime_param.get_lifetime ());
74 : 432 : for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
75 : 2 : visit (lifetime_bound);
76 : 430 : }
77 : :
78 : : void
79 : 56 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
80 : : {
81 : 56 : visit (const_param.get_outer_attribute ());
82 : 56 : if (const_param.has_type ())
83 : 56 : visit (const_param.get_type ());
84 : 56 : if (const_param.has_default_value ())
85 : 32 : visit (const_param.get_default_value ());
86 : 56 : }
87 : :
88 : : void
89 : 10718 : DefaultASTVisitor::visit (AST::PathInExpression &path)
90 : : {
91 : 10718 : visit_outer_attrs (path);
92 : 23941 : for (auto &segment : path.get_segments ())
93 : 13223 : visit (segment);
94 : 10718 : }
95 : :
96 : : void
97 : 164594 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
98 : 164594 : {}
99 : :
100 : : void
101 : 37 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
102 : : {
103 : 37 : visit (binding.get_type ());
104 : 37 : }
105 : :
106 : : void
107 : 1272 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
108 : : {
109 : 1272 : visit (segment.get_generic_args ());
110 : 1272 : }
111 : :
112 : : void
113 : 39 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
114 : : {
115 : 78 : for (auto &input : tpf.get_params ())
116 : 39 : visit (input);
117 : 39 : if (tpf.has_return_type ())
118 : 35 : visit (tpf.get_return_type ());
119 : 39 : }
120 : :
121 : : void
122 : 18952 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
123 : 18952 : {}
124 : :
125 : : void
126 : 39 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
127 : : {
128 : 39 : visit (segment.get_type_path_function ());
129 : 39 : visit (segment.get_ident_segment ());
130 : 39 : }
131 : :
132 : : void
133 : 1871 : DefaultASTVisitor::visit (AST::GenericArgs &args)
134 : : {
135 : 1893 : for (auto &lifetime : args.get_lifetime_args ())
136 : 22 : visit (lifetime);
137 : :
138 : 3840 : for (auto &generic : args.get_generic_args ())
139 : 1969 : visit (generic);
140 : :
141 : 1908 : for (auto &binding : args.get_binding_args ())
142 : 37 : visit (binding);
143 : 1871 : }
144 : :
145 : : void
146 : 18913 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
147 : : {
148 : 18913 : visit (segment.get_ident_segment ());
149 : 18913 : if (segment.has_generic_args ())
150 : 599 : visit (segment.get_generic_args ());
151 : 18913 : }
152 : : void
153 : 166968 : DefaultASTVisitor::visit (AST::TypePath &path)
154 : : {
155 : 338325 : for (auto &segment : path.get_segments ())
156 : 171357 : visit (segment);
157 : 166968 : }
158 : :
159 : : void
160 : 254 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
161 : : {
162 : 254 : visit_outer_attrs (path);
163 : 254 : visit (path.get_qualified_path_type ());
164 : :
165 : 508 : for (auto &segment : path.get_segments ())
166 : 254 : visit (segment);
167 : 254 : }
168 : :
169 : : void
170 : 1003 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
171 : : {
172 : 1003 : visit (path.get_type ());
173 : 1003 : if (path.has_as_clause ())
174 : 936 : visit (path.get_as_type_path ());
175 : 1003 : }
176 : :
177 : : void
178 : 749 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
179 : : {
180 : 749 : visit (path.get_qualified_path_type ());
181 : 749 : visit (path.get_associated_segment ());
182 : :
183 : 749 : for (auto &segment : path.get_segments ())
184 : 0 : visit (segment);
185 : 749 : }
186 : :
187 : : void
188 : 14210 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
189 : : {
190 : 14210 : visit_outer_attrs (expr);
191 : 14210 : }
192 : :
193 : : void
194 : 0 : DefaultASTVisitor::visit (AST::AttrInputLiteral &attr_input)
195 : : {
196 : 0 : visit (attr_input.get_literal ());
197 : 0 : }
198 : :
199 : : void
200 : 0 : DefaultASTVisitor::visit (AST::AttrInputMacro &attr_input)
201 : : {
202 : 0 : visit (attr_input.get_macro ());
203 : 0 : }
204 : :
205 : : void
206 : 0 : DefaultASTVisitor::visit (AST::MetaItemLitExpr &meta_item)
207 : : {
208 : 0 : visit (meta_item.get_literal ());
209 : 0 : }
210 : :
211 : : void
212 : 280 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
213 : 280 : {}
214 : :
215 : : void
216 : 90723 : DefaultASTVisitor::visit (AST::SimplePath &path)
217 : : {
218 : 91003 : for (auto &segment : path.get_segments ())
219 : 280 : visit (segment);
220 : 90723 : }
221 : :
222 : : void
223 : 0 : DefaultASTVisitor::visit (AST::MetaItemPathLit &meta_item)
224 : : {
225 : 0 : visit (meta_item.get_path ());
226 : 0 : visit (meta_item.get_literal ());
227 : 0 : }
228 : :
229 : : void
230 : 7022 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
231 : : {
232 : 7022 : visit_outer_attrs (expr);
233 : 7022 : visit (expr.get_borrowed_expr ());
234 : 7022 : }
235 : :
236 : : void
237 : 4302 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
238 : : {
239 : 4302 : visit_outer_attrs (expr);
240 : 4302 : visit (expr.get_dereferenced_expr ());
241 : 4302 : }
242 : :
243 : : void
244 : 0 : DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
245 : : {
246 : 0 : visit_outer_attrs (expr);
247 : 0 : }
248 : :
249 : : void
250 : 1546 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
251 : : {
252 : 1546 : visit_outer_attrs (expr);
253 : 1546 : visit (expr.get_negated_expr ());
254 : 1546 : }
255 : :
256 : : void
257 : 1060991 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
258 : : {
259 : 1060991 : visit_outer_attrs (expr);
260 : 1060991 : visit (expr.get_left_expr ());
261 : 1060991 : visit (expr.get_right_expr ());
262 : 1060991 : }
263 : :
264 : : void
265 : 4077 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
266 : : {
267 : 4077 : visit_outer_attrs (expr);
268 : 4077 : visit (expr.get_left_expr ());
269 : 4077 : visit (expr.get_right_expr ());
270 : 4077 : }
271 : :
272 : : void
273 : 1862 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
274 : : {
275 : 1862 : visit_outer_attrs (expr);
276 : 1862 : visit (expr.get_left_expr ());
277 : 1862 : visit (expr.get_right_expr ());
278 : 1862 : }
279 : :
280 : : void
281 : 28499 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
282 : : {
283 : 28499 : visit_outer_attrs (expr);
284 : 28499 : visit (expr.get_casted_expr ());
285 : 28499 : visit (expr.get_type_to_cast_to ());
286 : 28499 : }
287 : :
288 : : void
289 : 8046 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
290 : : {
291 : 8046 : visit_outer_attrs (expr);
292 : 8046 : visit (expr.get_left_expr ());
293 : 8046 : visit (expr.get_right_expr ());
294 : 8046 : }
295 : :
296 : : void
297 : 924 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
298 : : {
299 : 924 : visit_outer_attrs (expr);
300 : 924 : visit (expr.get_left_expr ());
301 : 924 : visit (expr.get_right_expr ());
302 : 924 : }
303 : :
304 : : void
305 : 742 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
306 : : {
307 : 742 : visit_outer_attrs (expr);
308 : 742 : visit_inner_attrs (expr);
309 : 742 : visit (expr.get_expr_in_parens ());
310 : 742 : }
311 : :
312 : : void
313 : 600 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
314 : : {
315 : 3456 : for (auto &value : elems.get_values ())
316 : 2856 : visit (value);
317 : 600 : }
318 : :
319 : : void
320 : 526 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
321 : : {
322 : 526 : visit (elems.get_elem_to_copy ());
323 : 526 : visit (elems.get_num_copies ());
324 : 526 : }
325 : :
326 : : void
327 : 1513 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
328 : : {
329 : 1513 : visit_outer_attrs (expr);
330 : 1513 : visit_inner_attrs (expr);
331 : 1513 : visit (expr.get_array_elems ());
332 : 1513 : }
333 : :
334 : : void
335 : 3200 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
336 : : {
337 : 3200 : visit_outer_attrs (expr);
338 : 3200 : visit (expr.get_array_expr ());
339 : 3200 : visit (expr.get_index_expr ());
340 : 3200 : }
341 : :
342 : : void
343 : 1068 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
344 : : {
345 : 1068 : visit_outer_attrs (expr);
346 : 1068 : visit_inner_attrs (expr);
347 : 3118 : for (auto &elem : expr.get_tuple_elems ())
348 : 2050 : visit (elem);
349 : 1068 : }
350 : :
351 : : void
352 : 4777 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
353 : : {
354 : 4777 : visit_outer_attrs (expr);
355 : 4777 : visit (expr.get_tuple_expr ());
356 : 4777 : }
357 : :
358 : : void
359 : 51 : DefaultASTVisitor::visit (AST::StructExprStruct &expr)
360 : : {
361 : 51 : visit_outer_attrs (expr);
362 : 51 : visit_inner_attrs (expr);
363 : 51 : visit (expr.get_struct_name ());
364 : 51 : }
365 : :
366 : : void
367 : 746 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
368 : 746 : {}
369 : :
370 : : void
371 : 6500 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
372 : : {
373 : 6500 : visit (field.get_value ());
374 : 6500 : }
375 : :
376 : : void
377 : 220 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
378 : : {
379 : 220 : visit (field.get_value ());
380 : 220 : }
381 : :
382 : : void
383 : 315 : DefaultASTVisitor::visit (AST::StructBase &base)
384 : : {
385 : 315 : visit (base.get_base_struct ());
386 : 315 : }
387 : :
388 : : void
389 : 4023 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
390 : : {
391 : 4023 : visit_outer_attrs (expr);
392 : 4023 : visit_inner_attrs (expr);
393 : 4023 : if (expr.has_struct_base ())
394 : 315 : visit (expr.get_struct_base ());
395 : 11700 : for (auto &field : expr.get_fields ())
396 : 7677 : visit (field);
397 : 4023 : }
398 : :
399 : : void
400 : 0 : DefaultASTVisitor::visit (AST::StructExprStructBase &expr)
401 : : {
402 : 0 : visit_outer_attrs (expr);
403 : 0 : visit_inner_attrs (expr);
404 : 0 : visit (expr.get_struct_base ());
405 : 0 : }
406 : :
407 : : void
408 : 36599 : DefaultASTVisitor::visit (AST::CallExpr &expr)
409 : : {
410 : 36599 : visit_outer_attrs (expr);
411 : 36599 : visit (expr.get_function_expr ());
412 : 80013 : for (auto ¶m : expr.get_params ())
413 : 43414 : visit (param);
414 : 36599 : }
415 : :
416 : : void
417 : 5436 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
418 : : {
419 : 5436 : visit_outer_attrs (expr);
420 : 5436 : visit (expr.get_receiver_expr ());
421 : 5436 : visit (expr.get_method_name ());
422 : 8154 : for (auto ¶m : expr.get_params ())
423 : 2718 : visit (param);
424 : 5436 : }
425 : :
426 : : void
427 : 7996 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
428 : : {
429 : 7996 : visit_outer_attrs (expr);
430 : 7996 : visit (expr.get_receiver_expr ());
431 : 7996 : }
432 : :
433 : : void
434 : 92 : DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
435 : : {
436 : 92 : visit_outer_attrs (expr);
437 : 164 : for (auto ¶m : expr.get_params ())
438 : 72 : visit (param);
439 : 92 : visit (expr.get_definition_expr ());
440 : 92 : }
441 : :
442 : : void
443 : 46927 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
444 : : {
445 : 46927 : visit_outer_attrs (expr);
446 : 46927 : visit_inner_attrs (expr);
447 : 100900 : for (auto &stmt : expr.get_statements ())
448 : 53973 : visit (stmt);
449 : 46927 : if (expr.has_tail_expr ())
450 : 32438 : visit (expr.get_tail_expr ());
451 : 46927 : }
452 : :
453 : : void
454 : 120 : DefaultASTVisitor::visit (AST::ClosureExprInnerTyped &expr)
455 : : {
456 : 120 : visit_outer_attrs (expr);
457 : 268 : for (auto ¶m : expr.get_params ())
458 : 148 : visit (param);
459 : 120 : visit (expr.get_return_type ());
460 : 120 : visit (expr.get_definition_block ());
461 : 120 : }
462 : :
463 : : void
464 : 220 : DefaultASTVisitor::visit (AST::ClosureParam ¶m)
465 : : {
466 : 220 : visit_outer_attrs (param);
467 : 220 : visit (param.get_pattern ());
468 : 220 : if (param.has_type_given ())
469 : 204 : visit (param.get_type ());
470 : 220 : }
471 : :
472 : : void
473 : 10 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
474 : : {
475 : 10 : visit_outer_attrs (expr);
476 : 10 : visit (expr.get_label ());
477 : 10 : }
478 : :
479 : : void
480 : 532 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
481 : : {
482 : 532 : visit_outer_attrs (expr);
483 : 532 : if (expr.has_label ())
484 : 106 : visit (expr.get_label ());
485 : :
486 : 532 : if (expr.has_break_expr ())
487 : 166 : visit (expr.get_break_expr ());
488 : 532 : }
489 : :
490 : : void
491 : 314 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
492 : : {
493 : 314 : visit (expr.get_from_expr ());
494 : 314 : visit (expr.get_to_expr ());
495 : 314 : }
496 : :
497 : : void
498 : 35 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
499 : : {
500 : 35 : visit (expr.get_from_expr ());
501 : 35 : }
502 : :
503 : : void
504 : 35 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
505 : : {
506 : 35 : visit (expr.get_to_expr ());
507 : 35 : }
508 : :
509 : : void
510 : 0 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
511 : 0 : {}
512 : :
513 : : void
514 : 35 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
515 : : {
516 : 35 : visit (expr.get_from_expr ());
517 : 35 : visit (expr.get_to_expr ());
518 : 35 : }
519 : :
520 : : void
521 : 0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
522 : : {
523 : 0 : visit (expr.get_to_expr ());
524 : 0 : }
525 : :
526 : : void
527 : 1797 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
528 : : {
529 : 1797 : visit_outer_attrs (expr);
530 : 1797 : if (expr.has_returned_expr ())
531 : 1729 : visit (expr.get_returned_expr ());
532 : 1797 : }
533 : :
534 : : void
535 : 14952 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
536 : : {
537 : 14952 : visit_outer_attrs (expr);
538 : 14952 : visit (expr.get_block_expr ());
539 : 14952 : }
540 : :
541 : : void
542 : 665 : DefaultASTVisitor::visit (AST::LoopLabel &label)
543 : : {
544 : 665 : visit (label.get_lifetime ());
545 : 665 : }
546 : :
547 : : void
548 : 483 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
549 : : {
550 : 483 : visit_outer_attrs (expr);
551 : 483 : visit (expr.get_loop_label ());
552 : 483 : visit (expr.get_loop_block ());
553 : 483 : }
554 : :
555 : : void
556 : 227 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
557 : : {
558 : 227 : visit_outer_attrs (expr);
559 : 227 : visit (expr.get_predicate_expr ());
560 : 227 : visit (expr.get_loop_label ());
561 : 227 : visit (expr.get_loop_block ());
562 : 227 : }
563 : :
564 : : void
565 : 0 : DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
566 : : {
567 : 0 : visit_outer_attrs (expr);
568 : 0 : for (auto &pattern : expr.get_patterns ())
569 : 0 : visit (pattern);
570 : 0 : visit (expr.get_scrutinee_expr ());
571 : 0 : visit (expr.get_loop_label ());
572 : 0 : visit (expr.get_loop_block ());
573 : 0 : }
574 : :
575 : : void
576 : 0 : DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
577 : : {
578 : 0 : visit_outer_attrs (expr);
579 : 0 : visit (expr.get_pattern ());
580 : 0 : visit (expr.get_iterator_expr ());
581 : 0 : visit (expr.get_loop_label ());
582 : 0 : visit (expr.get_loop_block ());
583 : 0 : }
584 : :
585 : : void
586 : 2959 : DefaultASTVisitor::visit (AST::IfExpr &expr)
587 : : {
588 : 2959 : visit_outer_attrs (expr);
589 : 2959 : visit (expr.get_condition_expr ());
590 : 2959 : visit (expr.get_if_block ());
591 : 2959 : }
592 : :
593 : : void
594 : 1572 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
595 : : {
596 : 1572 : visit (reinterpret_cast<AST::IfExpr &> (expr));
597 : 1572 : visit (expr.get_else_block ());
598 : 1572 : }
599 : :
600 : : void
601 : 9 : DefaultASTVisitor::visit (AST::IfLetExpr &expr)
602 : : {
603 : 9 : visit_outer_attrs (expr);
604 : 18 : for (auto &pattern : expr.get_patterns ())
605 : 9 : visit (pattern);
606 : 9 : visit (expr.get_value_expr ());
607 : 9 : visit (expr.get_if_block ());
608 : 9 : }
609 : :
610 : : void
611 : 8 : DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
612 : : {
613 : 8 : visit (reinterpret_cast<AST::IfLetExpr &> (expr));
614 : 8 : visit (expr.get_else_block ());
615 : 8 : }
616 : :
617 : : void
618 : 1287 : DefaultASTVisitor::visit (AST::MatchArm &arm)
619 : : {
620 : 1287 : visit_outer_attrs (arm);
621 : 2574 : for (auto &pattern : arm.get_patterns ())
622 : 1287 : visit (pattern);
623 : 1287 : if (arm.has_match_arm_guard ())
624 : 3 : visit (arm.get_guard_expr ());
625 : 1287 : }
626 : :
627 : : void
628 : 1287 : DefaultASTVisitor::visit (AST::MatchCase &arm)
629 : : {
630 : 1287 : visit (arm.get_arm ());
631 : 1287 : visit (arm.get_expr ());
632 : 1287 : }
633 : :
634 : : void
635 : 537 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
636 : : {
637 : 537 : visit_outer_attrs (expr);
638 : 537 : visit_inner_attrs (expr);
639 : 537 : visit (expr.get_scrutinee_expr ());
640 : 1824 : for (auto &arm : expr.get_match_cases ())
641 : 1287 : visit (arm);
642 : 537 : }
643 : :
644 : : void
645 : 0 : DefaultASTVisitor::visit (AST::AwaitExpr &expr)
646 : : {
647 : 0 : visit_outer_attrs (expr);
648 : 0 : visit (expr.get_awaited_expr ());
649 : 0 : }
650 : :
651 : : void
652 : 0 : DefaultASTVisitor::visit (AST::AsyncBlockExpr &expr)
653 : : {
654 : 0 : visit_outer_attrs (expr);
655 : 0 : visit (expr.get_block_expr ());
656 : 0 : }
657 : :
658 : : void
659 : 9833 : DefaultASTVisitor::visit (AST::TypeParam ¶m)
660 : : {
661 : 9833 : visit (param.get_outer_attribute ());
662 : 10842 : for (auto &bound : param.get_type_param_bounds ())
663 : 1009 : visit (bound);
664 : 9833 : if (param.has_type ())
665 : 396 : visit (param.get_type ());
666 : 9833 : }
667 : :
668 : : void
669 : 0 : DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem &item)
670 : : {
671 : 0 : visit (item.get_lifetime ());
672 : 0 : for (auto &bound : item.get_lifetime_bounds ())
673 : 0 : visit (bound);
674 : 0 : }
675 : :
676 : : void
677 : 217 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
678 : : {
679 : 244 : for (auto &lifetime : item.get_for_lifetimes ())
680 : 27 : visit (lifetime);
681 : 217 : visit (item.get_type ());
682 : 434 : for (auto ¶m : item.get_type_param_bounds ())
683 : 217 : visit (param);
684 : 217 : }
685 : :
686 : : void
687 : 90593 : DefaultASTVisitor::visit (AST::Visibility &vis)
688 : : {
689 : 90593 : visit (vis.get_path ());
690 : 90593 : }
691 : :
692 : : void
693 : 47009 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
694 : 47009 : {}
695 : :
696 : : void
697 : 329 : DefaultASTVisitor::visit (AST::WhereClause &where)
698 : : {
699 : 668 : for (auto &item : where.get_items ())
700 : 339 : visit (item);
701 : 329 : }
702 : : void
703 : 23620 : DefaultASTVisitor::visit (AST::FunctionParam ¶m)
704 : : {
705 : 23620 : visit_outer_attrs (param);
706 : 23620 : if (param.has_name ())
707 : 23620 : visit (param.get_pattern ());
708 : :
709 : 23620 : visit (param.get_type ());
710 : 23620 : }
711 : :
712 : : void
713 : 33824 : DefaultASTVisitor::visit (AST::SelfParam ¶m)
714 : : {
715 : 33824 : visit_outer_attrs (param);
716 : :
717 : 33824 : if (param.has_lifetime ())
718 : 16006 : visit (param.get_lifetime ());
719 : :
720 : 33824 : if (param.has_type ())
721 : 8 : visit (param.get_type ());
722 : 33824 : }
723 : :
724 : : void
725 : 1868 : DefaultASTVisitor::visit (AST::Module &module)
726 : : {
727 : 1868 : visit_outer_attrs (module);
728 : 1868 : visit (module.get_visibility ());
729 : 1868 : visit_inner_attrs (module);
730 : 4619 : for (auto &item : module.get_items ())
731 : 2751 : visit (item);
732 : 1868 : }
733 : :
734 : : void
735 : 27 : DefaultASTVisitor::visit (AST::ExternCrate &crate)
736 : : {
737 : 27 : visit_outer_attrs (crate);
738 : 27 : visit (crate.get_visibility ());
739 : 27 : }
740 : :
741 : : void
742 : 5 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
743 : : {
744 : 5 : visit (use_tree.get_path ());
745 : 5 : }
746 : :
747 : : void
748 : 24 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
749 : : {
750 : 24 : visit (use_tree.get_path ());
751 : 24 : }
752 : :
753 : : void
754 : 40 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
755 : : {
756 : 40 : visit (use_tree.get_path ());
757 : 40 : }
758 : :
759 : : void
760 : 69 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
761 : : {
762 : 69 : visit (use_decl.get_tree ());
763 : 69 : }
764 : :
765 : : void
766 : 46859 : DefaultASTVisitor::visit (AST::Function &function)
767 : : {
768 : 46859 : visit_outer_attrs (function);
769 : 46859 : visit (function.get_visibility ());
770 : 46859 : visit (function.get_qualifiers ());
771 : 51092 : for (auto &generic : function.get_generic_params ())
772 : 4233 : visit (generic);
773 : 46859 : if (function.has_self_param ())
774 : 16912 : visit (function.get_self_param ());
775 : 89869 : for (auto ¶m : function.get_function_params ())
776 : 43010 : visit (param);
777 : 46859 : if (function.has_return_type ())
778 : 32429 : visit (function.get_return_type ());
779 : 46859 : if (function.has_where_clause ())
780 : 46 : visit (function.get_where_clause ());
781 : 46859 : if (function.has_body ())
782 : 36800 : visit (*function.get_definition ());
783 : 46859 : }
784 : :
785 : : void
786 : 4944 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
787 : : {
788 : 4944 : visit_outer_attrs (type_alias);
789 : 4944 : visit (type_alias.get_visibility ());
790 : 4990 : for (auto &generic : type_alias.get_generic_params ())
791 : 46 : visit (generic);
792 : 4944 : if (type_alias.has_where_clause ())
793 : 0 : visit (type_alias.get_where_clause ());
794 : 4944 : visit (type_alias.get_type_aliased ());
795 : 4944 : }
796 : :
797 : : void
798 : 4863 : DefaultASTVisitor::visit (AST::StructField &field)
799 : : {
800 : 4863 : visit_outer_attrs (field);
801 : 4863 : visit (field.get_visibility ());
802 : 4863 : visit (field.get_field_type ());
803 : 4863 : }
804 : :
805 : : void
806 : 3391 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
807 : : {
808 : 3391 : visit_outer_attrs (struct_item);
809 : 3391 : visit (struct_item.get_visibility ());
810 : 4213 : for (auto &generic : struct_item.get_generic_params ())
811 : 822 : visit (generic);
812 : 3391 : if (struct_item.has_where_clause ())
813 : 6 : visit (struct_item.get_where_clause ());
814 : 7501 : for (auto &field : struct_item.get_fields ())
815 : 4110 : visit (field);
816 : 3391 : }
817 : :
818 : : void
819 : 5086 : DefaultASTVisitor::visit (AST::TupleField &field)
820 : : {
821 : 5086 : visit_outer_attrs (field);
822 : 5086 : visit (field.get_visibility ());
823 : 5086 : visit (field.get_field_type ());
824 : 5086 : }
825 : :
826 : : void
827 : 2533 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
828 : : {
829 : 2533 : visit_outer_attrs (tuple_struct);
830 : 2533 : visit (tuple_struct.get_visibility ());
831 : 3595 : for (auto &generic : tuple_struct.get_generic_params ())
832 : 1062 : visit (generic);
833 : 2533 : if (tuple_struct.has_where_clause ())
834 : 0 : visit (tuple_struct.get_where_clause ());
835 : 7160 : for (auto &field : tuple_struct.get_fields ())
836 : 4627 : visit (field);
837 : 2533 : }
838 : :
839 : : void
840 : 462 : DefaultASTVisitor::visit (AST::EnumItem &item)
841 : : {
842 : 462 : visit_outer_attrs (item);
843 : 462 : visit (item.get_visibility ());
844 : 462 : }
845 : :
846 : : void
847 : 437 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
848 : : {
849 : 437 : visit (reinterpret_cast<EnumItem &> (item));
850 : 896 : for (auto &field : item.get_tuple_fields ())
851 : 459 : visit (field);
852 : 437 : }
853 : :
854 : : void
855 : 101 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
856 : : {
857 : 101 : visit (reinterpret_cast<EnumItem &> (item));
858 : 286 : for (auto &field : item.get_struct_fields ())
859 : 185 : visit (field);
860 : 101 : }
861 : :
862 : : void
863 : 53 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
864 : : {
865 : 53 : visit (reinterpret_cast<EnumItem &> (item));
866 : 53 : visit (item.get_expr ());
867 : 53 : }
868 : :
869 : : void
870 : 871 : DefaultASTVisitor::visit (AST::Enum &enum_item)
871 : : {
872 : 871 : visit_outer_attrs (enum_item);
873 : 871 : visit (enum_item.get_visibility ());
874 : 1411 : for (auto &generic : enum_item.get_generic_params ())
875 : 540 : visit (generic);
876 : 871 : if (enum_item.has_where_clause ())
877 : 0 : visit (enum_item.get_where_clause ());
878 : 2963 : for (auto &item : enum_item.get_variants ())
879 : 2092 : visit (item);
880 : 871 : }
881 : :
882 : : void
883 : 195 : DefaultASTVisitor::visit (AST::Union &union_item)
884 : : {
885 : 195 : visit_outer_attrs (union_item);
886 : 195 : visit (union_item.get_visibility ());
887 : 327 : for (auto &generic : union_item.get_generic_params ())
888 : 132 : visit (generic);
889 : 195 : if (union_item.has_where_clause ())
890 : 0 : visit (union_item.get_where_clause ());
891 : 763 : for (auto &variant : union_item.get_variants ())
892 : 568 : visit (variant);
893 : 195 : }
894 : :
895 : : void
896 : 1511 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
897 : : {
898 : 1511 : visit_outer_attrs (const_item);
899 : 1511 : visit (const_item.get_visibility ());
900 : 1511 : visit (const_item.get_type ());
901 : 1511 : if (const_item.has_expr ())
902 : 1507 : visit (const_item.get_expr ());
903 : 1511 : }
904 : :
905 : : void
906 : 131 : DefaultASTVisitor::visit (AST::StaticItem &static_item)
907 : : {
908 : 131 : visit_outer_attrs (static_item);
909 : 131 : visit (static_item.get_visibility ());
910 : 131 : visit (static_item.get_type ());
911 : 131 : visit (static_item.get_expr ());
912 : 131 : }
913 : :
914 : : void
915 : 168 : DefaultASTVisitor::visit (AST::TraitItemConst &item)
916 : : {
917 : 168 : visit_outer_attrs (item);
918 : 168 : visit (item.get_type ());
919 : 168 : if (item.has_expr ())
920 : 40 : visit (item.get_expr ());
921 : 168 : }
922 : :
923 : : void
924 : 2223 : DefaultASTVisitor::visit (AST::TraitItemType &item)
925 : : {
926 : 2223 : visit_outer_attrs (item);
927 : 2339 : for (auto &bound : item.get_type_param_bounds ())
928 : 116 : visit (bound);
929 : 2223 : }
930 : :
931 : : void
932 : 4548 : DefaultASTVisitor::visit (AST::Trait &trait)
933 : : {
934 : 4548 : visit_outer_attrs (trait);
935 : 4548 : visit (trait.get_visibility ());
936 : :
937 : 4548 : visit_inner_attrs (trait);
938 : :
939 : 5249 : for (auto &generic : trait.get_generic_params ())
940 : 701 : visit (generic);
941 : :
942 : 4548 : if (trait.has_where_clause ())
943 : 21 : visit (trait.get_where_clause ());
944 : :
945 : 4980 : for (auto &bound : trait.get_type_param_bounds ())
946 : 432 : visit (bound);
947 : :
948 : 8079 : for (auto &item : trait.get_trait_items ())
949 : 3531 : visit (item);
950 : 4548 : }
951 : :
952 : : void
953 : 2805 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
954 : : {
955 : 2805 : visit_outer_attrs (impl);
956 : 2805 : visit (impl.get_visibility ());
957 : :
958 : 3754 : for (auto &generic : impl.get_generic_params ())
959 : 949 : visit (generic);
960 : 2805 : if (impl.has_where_clause ())
961 : 4 : visit (impl.get_where_clause ());
962 : 2805 : visit (impl.get_type ());
963 : 2805 : visit_inner_attrs (impl);
964 : 9219 : for (auto &item : impl.get_impl_items ())
965 : 6414 : visit (item);
966 : 2805 : }
967 : :
968 : : void
969 : 8546 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
970 : : {
971 : 8546 : visit_outer_attrs (impl);
972 : 8546 : visit (impl.get_visibility ());
973 : :
974 : 10923 : for (auto &generic : impl.get_generic_params ())
975 : 2377 : visit (generic);
976 : 8546 : if (impl.has_where_clause ())
977 : 252 : visit (impl.get_where_clause ());
978 : 8546 : visit (impl.get_type ());
979 : 8546 : visit_inner_attrs (impl);
980 : 18400 : for (auto &item : impl.get_impl_items ())
981 : 9854 : visit (item);
982 : 8546 : }
983 : :
984 : : void
985 : 1 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
986 : : {
987 : 1 : visit_outer_attrs (item);
988 : 1 : visit (item.get_visibility ());
989 : 1 : }
990 : :
991 : : void
992 : 3 : DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
993 : : {
994 : 3 : visit_outer_attrs (item);
995 : 3 : visit (item.get_visibility ());
996 : 3 : visit (item.get_type ());
997 : 3 : }
998 : :
999 : : void
1000 : 0 : DefaultASTVisitor::visit (AST::NamedFunctionParam ¶m)
1001 : : {
1002 : 0 : visit_outer_attrs (param);
1003 : 0 : if (!param.is_variadic ())
1004 : 0 : visit (param.get_type ());
1005 : 0 : }
1006 : :
1007 : : void
1008 : 1949 : DefaultASTVisitor::visit (AST::ExternBlock &block)
1009 : : {
1010 : 1949 : visit_outer_attrs (block);
1011 : 1949 : visit (block.get_visibility ());
1012 : 1949 : visit_inner_attrs (block);
1013 : 4884 : for (auto &item : block.get_extern_items ())
1014 : 2935 : visit (item);
1015 : 1949 : }
1016 : :
1017 : : void
1018 : 571 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
1019 : 571 : {}
1020 : :
1021 : : void
1022 : 252 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
1023 : : {
1024 : 560 : for (auto &m : match.get_matches ())
1025 : 308 : visit (m);
1026 : 252 : }
1027 : :
1028 : : void
1029 : 819 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
1030 : : {
1031 : 1758 : for (auto &m : matcher.get_matches ())
1032 : 939 : visit (m);
1033 : 819 : }
1034 : :
1035 : : void
1036 : 774 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
1037 : : {
1038 : 774 : visit (transcriber.get_token_tree ());
1039 : 774 : }
1040 : :
1041 : : void
1042 : 774 : DefaultASTVisitor::visit (AST::MacroRule &rule)
1043 : : {
1044 : 774 : visit (rule.get_matcher ());
1045 : 774 : visit (rule.get_transcriber ());
1046 : 774 : }
1047 : : void
1048 : 642 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
1049 : : {
1050 : 642 : visit_outer_attrs (rules_def);
1051 : 1416 : for (auto &rule : rules_def.get_macro_rules ())
1052 : 774 : visit (rule);
1053 : 642 : }
1054 : :
1055 : : void
1056 : 61 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
1057 : : {
1058 : 61 : visit (data.get_path ());
1059 : 61 : visit (data.get_delim_tok_tree ());
1060 : 61 : }
1061 : : void
1062 : 61 : DefaultASTVisitor::visit (AST::MacroInvocation ¯o_invoc)
1063 : : {
1064 : 61 : visit_outer_attrs (macro_invoc);
1065 : 61 : visit (macro_invoc.get_invoc_data ());
1066 : 61 : }
1067 : :
1068 : : void
1069 : 0 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
1070 : : {
1071 : 0 : visit (meta_item.get_path ());
1072 : 0 : }
1073 : :
1074 : : void
1075 : 0 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
1076 : : {
1077 : 0 : visit (meta_item.get_path ());
1078 : 0 : for (auto &inner : meta_item.get_seq ())
1079 : 0 : visit (inner);
1080 : 0 : }
1081 : :
1082 : : void
1083 : 0 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
1084 : 0 : {}
1085 : :
1086 : : void
1087 : 0 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
1088 : 0 : {}
1089 : :
1090 : : void
1091 : 0 : DefaultASTVisitor::visit (AST::MetaListPaths &meta_item)
1092 : : {
1093 : 0 : for (auto &path : meta_item.get_paths ())
1094 : 0 : visit (path);
1095 : 0 : }
1096 : :
1097 : : void
1098 : 0 : DefaultASTVisitor::visit (AST::MetaListNameValueStr &meta_item)
1099 : : {
1100 : 0 : for (auto &str : meta_item.get_values ())
1101 : 0 : visit (str);
1102 : 0 : }
1103 : :
1104 : : void
1105 : 594 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
1106 : 594 : {}
1107 : :
1108 : : void
1109 : 46268 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
1110 : : {
1111 : 46268 : if (pattern.has_pattern_to_bind ())
1112 : 0 : visit (pattern.get_pattern_to_bind ());
1113 : 46268 : }
1114 : :
1115 : : void
1116 : 1603 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
1117 : 1603 : {}
1118 : :
1119 : : void
1120 : 0 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
1121 : 0 : {}
1122 : :
1123 : : void
1124 : 63 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
1125 : 63 : {}
1126 : :
1127 : : void
1128 : 42 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
1129 : : {
1130 : 42 : visit (bound.get_path ());
1131 : 42 : }
1132 : :
1133 : : void
1134 : 0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
1135 : : {
1136 : 0 : visit (bound.get_qualified_path ());
1137 : 0 : }
1138 : :
1139 : : void
1140 : 84 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
1141 : : {
1142 : 84 : if (pattern.get_has_lower_bound ())
1143 : 84 : visit (pattern.get_lower_bound ());
1144 : 84 : if (pattern.get_has_upper_bound ())
1145 : 84 : visit (pattern.get_upper_bound ());
1146 : 84 : }
1147 : :
1148 : : void
1149 : 143 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
1150 : : {
1151 : 143 : visit (pattern.get_referenced_pattern ());
1152 : 143 : }
1153 : :
1154 : : void
1155 : 3 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
1156 : : {
1157 : 3 : visit_outer_attrs (field);
1158 : 3 : visit (field.get_index_pattern ());
1159 : 3 : }
1160 : :
1161 : : void
1162 : 4 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
1163 : : {
1164 : 4 : visit_outer_attrs (field);
1165 : 4 : visit (field.get_ident_pattern ());
1166 : 4 : }
1167 : :
1168 : : void
1169 : 63 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
1170 : : {
1171 : 63 : visit_outer_attrs (field);
1172 : 63 : }
1173 : :
1174 : : void
1175 : 69 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
1176 : : {
1177 : 198 : for (auto &field : spe.get_struct_pattern_fields ())
1178 : 129 : visit (field);
1179 : 69 : for (auto &attribute : spe.get_etc_outer_attrs ())
1180 : : visit (attribute);
1181 : 69 : }
1182 : :
1183 : : void
1184 : 69 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
1185 : : {
1186 : 69 : visit (pattern.get_path ());
1187 : 69 : visit (pattern.get_struct_pattern_elems ());
1188 : 69 : }
1189 : :
1190 : : void
1191 : 1023 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRange &tuple_items)
1192 : : {
1193 : 2259 : for (auto &pattern : tuple_items.get_patterns ())
1194 : 1236 : visit (pattern);
1195 : 1023 : }
1196 : :
1197 : : void
1198 : 0 : DefaultASTVisitor::visit (AST::TupleStructItemsRange &tuple_items)
1199 : : {
1200 : 0 : for (auto &lower : tuple_items.get_lower_patterns ())
1201 : 0 : visit (lower);
1202 : 0 : for (auto &upper : tuple_items.get_upper_patterns ())
1203 : 0 : visit (upper);
1204 : 0 : }
1205 : :
1206 : : void
1207 : 786 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
1208 : : {
1209 : 786 : visit (pattern.get_path ());
1210 : 786 : visit (pattern.get_items ());
1211 : 786 : }
1212 : :
1213 : : void
1214 : 1499 : DefaultASTVisitor::visit (AST::TuplePatternItemsMultiple &tuple_items)
1215 : : {
1216 : 4568 : for (auto &pattern : tuple_items.get_patterns ())
1217 : 3069 : visit (pattern);
1218 : 1499 : }
1219 : :
1220 : : void
1221 : 0 : DefaultASTVisitor::visit (AST::TuplePatternItemsRanged &tuple_items)
1222 : : {
1223 : 0 : for (auto &lower : tuple_items.get_lower_patterns ())
1224 : 0 : visit (lower);
1225 : 0 : for (auto &upper : tuple_items.get_upper_patterns ())
1226 : 0 : visit (upper);
1227 : 0 : }
1228 : :
1229 : : void
1230 : 1499 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
1231 : : {
1232 : 1499 : visit (pattern.get_items ());
1233 : 1499 : }
1234 : :
1235 : : void
1236 : 172 : DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
1237 : : {
1238 : 172 : visit (pattern.get_pattern_in_parens ());
1239 : 172 : }
1240 : :
1241 : : void
1242 : 0 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
1243 : : {
1244 : 0 : for (auto &item : pattern.get_items ())
1245 : 0 : visit (item);
1246 : 0 : }
1247 : :
1248 : : void
1249 : 182 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
1250 : : {
1251 : 606 : for (auto &alt : pattern.get_alts ())
1252 : 424 : visit (alt);
1253 : 182 : }
1254 : :
1255 : : void
1256 : 505 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
1257 : 505 : {}
1258 : :
1259 : : void
1260 : 51476 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
1261 : : {
1262 : 51476 : visit_outer_attrs (stmt);
1263 : 51476 : visit (stmt.get_pattern ());
1264 : 51476 : if (stmt.has_type ())
1265 : 7293 : visit (stmt.get_type ());
1266 : 51476 : if (stmt.has_init_expr ())
1267 : 47012 : visit (stmt.get_init_expr ());
1268 : 51476 : }
1269 : :
1270 : : void
1271 : 31924 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
1272 : : {
1273 : 31924 : visit (stmt.get_expr ());
1274 : 31924 : }
1275 : :
1276 : : void
1277 : 1518 : DefaultASTVisitor::visit (AST::TraitBound &bound)
1278 : : {
1279 : 1546 : for (auto &lifetime : bound.get_for_lifetimes ())
1280 : 28 : visit (lifetime);
1281 : 1518 : visit (bound.get_type_path ());
1282 : 1518 : }
1283 : :
1284 : : void
1285 : 0 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
1286 : : {
1287 : 0 : for (auto &bound : type.get_type_param_bounds ())
1288 : 0 : visit (bound);
1289 : 0 : }
1290 : :
1291 : : void
1292 : 21 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
1293 : : {
1294 : 63 : for (auto &bound : type.get_type_param_bounds ())
1295 : 42 : visit (bound);
1296 : 21 : }
1297 : :
1298 : : void
1299 : 0 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
1300 : : {
1301 : 0 : visit (type.get_type_in_parens ());
1302 : 0 : }
1303 : :
1304 : : void
1305 : 0 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
1306 : : {
1307 : 0 : visit (type.get_trait_bound ());
1308 : 0 : }
1309 : :
1310 : : void
1311 : 405 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
1312 : : {
1313 : 405 : visit (type.get_trait_bound ());
1314 : 405 : }
1315 : :
1316 : : void
1317 : 1070 : DefaultASTVisitor::visit (AST::TupleType &type)
1318 : : {
1319 : 2868 : for (auto &elem : type.get_elems ())
1320 : 1798 : visit (elem);
1321 : 1070 : }
1322 : :
1323 : : void
1324 : 165 : DefaultASTVisitor::visit (AST::NeverType &type)
1325 : 165 : {}
1326 : :
1327 : : void
1328 : 28398 : DefaultASTVisitor::visit (AST::RawPointerType &type)
1329 : : {
1330 : 28398 : visit (type.get_type_pointed_to ());
1331 : 28398 : }
1332 : :
1333 : : void
1334 : 8553 : DefaultASTVisitor::visit (AST::ReferenceType &type)
1335 : : {
1336 : 8553 : visit (type.get_lifetime ());
1337 : 8553 : visit (type.get_base_type ());
1338 : 8553 : }
1339 : :
1340 : : void
1341 : 2254 : DefaultASTVisitor::visit (AST::ArrayType &type)
1342 : : {
1343 : 2254 : visit (type.get_elem_type ());
1344 : 2254 : visit (type.get_size_expr ());
1345 : 2254 : }
1346 : :
1347 : : void
1348 : 2912 : DefaultASTVisitor::visit (AST::SliceType &type)
1349 : : {
1350 : 2912 : visit (type.get_elem_type ());
1351 : 2912 : }
1352 : :
1353 : : void
1354 : 664 : DefaultASTVisitor::visit (AST::InferredType &type)
1355 : 664 : {}
1356 : :
1357 : : void
1358 : 153 : DefaultASTVisitor::visit (AST::MaybeNamedParam ¶m)
1359 : : {
1360 : 153 : visit_outer_attrs (param);
1361 : 153 : visit (param.get_type ());
1362 : 153 : }
1363 : :
1364 : : void
1365 : 150 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
1366 : : {
1367 : 157 : for (auto &lifetime : type.get_for_lifetimes ())
1368 : 7 : visit (lifetime);
1369 : 150 : visit (type.get_function_qualifiers ());
1370 : 303 : for (auto ¶m : type.get_function_params ())
1371 : 153 : visit (param);
1372 : 150 : if (type.is_variadic ())
1373 : 0 : for (auto attr : type.get_variadic_attr ())
1374 : 0 : visit (attr);
1375 : 150 : if (type.has_return_type ())
1376 : 135 : visit (type.get_return_type ());
1377 : 150 : }
1378 : :
1379 : : void
1380 : 0 : DefaultASTVisitor::visit (AST::FormatArgs &)
1381 : : {
1382 : : // FIXME: Do we have anything to do? any subnodes to visit? Probably, right?
1383 : 0 : }
1384 : :
1385 : : void
1386 : 3365 : DefaultASTVisitor::visit (AST::VariadicParam ¶m)
1387 : : {
1388 : 3365 : if (param.has_pattern ())
1389 : 44 : visit (param.get_pattern ());
1390 : 3365 : }
1391 : :
1392 : : void
1393 : 3618 : ContextualASTVisitor::visit (AST::Crate &crate)
1394 : : {
1395 : 3618 : push_context (Context::CRATE);
1396 : 3618 : DefaultASTVisitor::visit (crate);
1397 : 3618 : pop_context ();
1398 : 3618 : }
1399 : :
1400 : : void
1401 : 712 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
1402 : : {
1403 : 712 : push_context (Context::INHERENT_IMPL);
1404 : 712 : DefaultASTVisitor::visit (impl);
1405 : 712 : pop_context ();
1406 : 712 : }
1407 : :
1408 : : void
1409 : 2395 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
1410 : : {
1411 : 2395 : push_context (Context::TRAIT_IMPL);
1412 : 2395 : DefaultASTVisitor::visit (impl);
1413 : 2395 : pop_context ();
1414 : 2395 : }
1415 : :
1416 : : void
1417 : 2108 : ContextualASTVisitor::visit (AST::Trait &trait)
1418 : : {
1419 : 2108 : push_context (Context::TRAIT);
1420 : 2108 : DefaultASTVisitor::visit (trait);
1421 : 2108 : pop_context ();
1422 : 2108 : }
1423 : :
1424 : : } // namespace AST
1425 : : } // namespace Rust
|