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 : 56887 : DefaultASTVisitor::visit (AST::Crate &crate)
36 : : {
37 : 56887 : visit_inner_attrs (crate);
38 : 310327 : for (auto &item : crate.items)
39 : 253441 : visit (item);
40 : 56886 : }
41 : :
42 : : void
43 : 3765186 : DefaultASTVisitor::visit (AST::Token &tok)
44 : 3765186 : {}
45 : :
46 : : void
47 : 558585 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
48 : : {
49 : 5235617 : for (auto &token : delim_tok_tree.get_token_trees ())
50 : 4677032 : visit (token);
51 : 558585 : }
52 : :
53 : : void
54 : 2175 : DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
55 : : {
56 : 4977 : for (auto &item : input.get_items ())
57 : 2802 : visit (item);
58 : 2175 : }
59 : :
60 : : void
61 : 22643930 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
62 : : {
63 : 22643930 : visit_outer_attrs (ident_expr);
64 : 22643930 : }
65 : :
66 : : void
67 : 2422503 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
68 : 2422503 : {}
69 : :
70 : : void
71 : 129125 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
72 : : {
73 : 129125 : visit_outer_attrs (lifetime_param);
74 : 129125 : visit (lifetime_param.get_lifetime ());
75 : 131362 : for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
76 : 2237 : visit (lifetime_bound);
77 : 129125 : }
78 : :
79 : : void
80 : 9039 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
81 : : {
82 : 9039 : visit_outer_attrs (const_param);
83 : 9039 : if (const_param.has_type ())
84 : 9039 : visit (const_param.get_type ());
85 : 9039 : if (const_param.has_default_value ())
86 : 215 : visit (const_param.get_default_value_unchecked ());
87 : 9039 : }
88 : :
89 : : void
90 : 5233689 : DefaultASTVisitor::visit (AST::PathInExpression &path)
91 : : {
92 : 5233689 : visit_outer_attrs (path);
93 : :
94 : 5233689 : if (!path.is_lang_item ())
95 : 11169692 : for (auto &segment : path.get_segments ())
96 : 5952371 : visit (segment);
97 : 5233689 : }
98 : :
99 : : void
100 : 12009641 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
101 : 12009641 : {}
102 : :
103 : : void
104 : 19109 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
105 : : {
106 : 19109 : visit (binding.get_type ());
107 : 19109 : }
108 : :
109 : : void
110 : 1010726 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
111 : : {
112 : 1010726 : if (segment.has_generic_args ())
113 : 1010716 : visit (segment.get_generic_args ());
114 : 1010726 : }
115 : :
116 : : void
117 : 78269 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
118 : : {
119 : 190763 : for (auto &input : tpf.get_params ())
120 : 112494 : visit (input);
121 : 78269 : if (tpf.has_return_type ())
122 : 75659 : visit (tpf.get_return_type ());
123 : 78269 : }
124 : :
125 : : void
126 : 12348406 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
127 : 12348406 : {}
128 : :
129 : : void
130 : 78269 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
131 : : {
132 : 78269 : visit (segment.get_type_path_function ());
133 : 78269 : visit (segment.get_ident_segment ());
134 : 78269 : }
135 : :
136 : : void
137 : 1049453 : DefaultASTVisitor::visit (AST::GenericArgs &args)
138 : : {
139 : 1153498 : for (auto &lifetime : args.get_lifetime_args ())
140 : 104045 : visit (lifetime);
141 : :
142 : 2080586 : for (auto &generic : args.get_generic_args ())
143 : 1031133 : visit (generic);
144 : :
145 : 1068490 : for (auto &binding : args.get_binding_args ())
146 : 19037 : visit (binding);
147 : 1049453 : }
148 : :
149 : : void
150 : 11241122 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
151 : : {
152 : 11241122 : visit (segment.get_ident_segment ());
153 : 11241122 : if (segment.has_generic_args ())
154 : 42327 : visit (segment.get_generic_args ());
155 : 11241122 : }
156 : : void
157 : 11069058 : DefaultASTVisitor::visit (AST::TypePath &path)
158 : : {
159 : 22918267 : for (auto &segment : path.get_segments ())
160 : 11849209 : visit (segment);
161 : 11069058 : }
162 : :
163 : : void
164 : 20009 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
165 : : {
166 : 20009 : visit_outer_attrs (path);
167 : 20009 : visit (path.get_qualified_path_type ());
168 : :
169 : 40018 : for (auto &segment : path.get_segments ())
170 : 20009 : visit (segment);
171 : 20009 : }
172 : :
173 : : void
174 : 441695 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
175 : : {
176 : 441695 : visit (path.get_type ());
177 : 441695 : if (path.has_as_clause ())
178 : 426357 : visit (path.get_as_type_path ());
179 : 441695 : }
180 : :
181 : : void
182 : 421686 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
183 : : {
184 : 421686 : visit (path.get_qualified_path_type ());
185 : 421686 : visit (path.get_associated_segment ());
186 : :
187 : 421686 : for (auto &segment : path.get_segments ())
188 : 0 : visit (segment);
189 : 421686 : }
190 : :
191 : : void
192 : 13094566 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
193 : : {
194 : 13094566 : visit_outer_attrs (expr);
195 : 13094566 : }
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 : 181392 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
217 : 181392 : {}
218 : :
219 : : void
220 : 134104 : DefaultASTVisitor::visit (AST::SimplePath &path)
221 : : {
222 : 311715 : for (auto &segment : path.get_segments ())
223 : 177611 : visit (segment);
224 : 134104 : }
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 : 1087007 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
235 : : {
236 : 1087007 : visit_outer_attrs (expr);
237 : 1087007 : visit (expr.get_borrowed_expr ());
238 : 1087007 : }
239 : :
240 : : void
241 : 396059 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
242 : : {
243 : 396059 : visit_outer_attrs (expr);
244 : 396059 : visit (expr.get_dereferenced_expr ());
245 : 396059 : }
246 : :
247 : : void
248 : 77044 : DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
249 : : {
250 : 77044 : visit_outer_attrs (expr);
251 : 77044 : visit (expr.get_propagating_expr ());
252 : 77044 : }
253 : :
254 : : void
255 : 149359 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
256 : : {
257 : 149359 : visit_outer_attrs (expr);
258 : 149359 : visit (expr.get_negated_expr ());
259 : 149359 : }
260 : :
261 : : void
262 : 5006288 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
263 : : {
264 : 5006288 : visit_outer_attrs (expr);
265 : 5006288 : visit (expr.get_left_expr ());
266 : 5006288 : visit (expr.get_right_expr ());
267 : 5006288 : }
268 : :
269 : : void
270 : 453388 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
271 : : {
272 : 453388 : visit_outer_attrs (expr);
273 : 453388 : visit (expr.get_left_expr ());
274 : 453388 : visit (expr.get_right_expr ());
275 : 453388 : }
276 : :
277 : : void
278 : 114390 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
279 : : {
280 : 114390 : visit_outer_attrs (expr);
281 : 114390 : visit (expr.get_left_expr ());
282 : 114390 : visit (expr.get_right_expr ());
283 : 114390 : }
284 : :
285 : : void
286 : 804430 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
287 : : {
288 : 804430 : visit_outer_attrs (expr);
289 : 804430 : visit (expr.get_casted_expr ());
290 : 804430 : visit (expr.get_type_to_cast_to ());
291 : 804430 : }
292 : :
293 : : void
294 : 345423 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
295 : : {
296 : 345423 : visit_outer_attrs (expr);
297 : 345423 : visit (expr.get_left_expr ());
298 : 345423 : visit (expr.get_right_expr ());
299 : 345423 : }
300 : :
301 : : void
302 : 203541 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
303 : : {
304 : 203541 : visit_outer_attrs (expr);
305 : 203541 : visit (expr.get_left_expr ());
306 : 203541 : visit (expr.get_right_expr ());
307 : 203541 : }
308 : :
309 : : void
310 : 908220 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
311 : : {
312 : 908220 : visit_outer_attrs (expr);
313 : 908220 : visit_inner_attrs (expr);
314 : 908220 : visit (expr.get_expr_in_parens ());
315 : 908220 : }
316 : :
317 : : void
318 : 839851 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
319 : : {
320 : 8812001 : for (auto &value : elems.get_values ())
321 : 7972150 : visit (value);
322 : 839851 : }
323 : :
324 : : void
325 : 9293 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
326 : : {
327 : 9293 : visit (elems.get_elem_to_copy ());
328 : 9293 : visit (elems.get_num_copies ());
329 : 9293 : }
330 : :
331 : : void
332 : 2054555 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
333 : : {
334 : 2054555 : visit_outer_attrs (expr);
335 : 2054555 : visit_inner_attrs (expr);
336 : 2054555 : visit (expr.get_array_elems ());
337 : 2054555 : }
338 : :
339 : : void
340 : 146470 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
341 : : {
342 : 146470 : visit_outer_attrs (expr);
343 : 146470 : visit (expr.get_array_expr ());
344 : 146470 : visit (expr.get_index_expr ());
345 : 146470 : }
346 : :
347 : : void
348 : 291633 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
349 : : {
350 : 291633 : visit_outer_attrs (expr);
351 : 291633 : visit_inner_attrs (expr);
352 : 835334 : for (auto &elem : expr.get_tuple_elems ())
353 : 543701 : visit (elem);
354 : 291633 : }
355 : :
356 : : void
357 : 661596 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
358 : : {
359 : 661596 : visit_outer_attrs (expr);
360 : 661596 : visit (expr.get_tuple_expr ());
361 : 661596 : }
362 : :
363 : : void
364 : 2214 : DefaultASTVisitor::visit (AST::StructExprStruct &expr)
365 : : {
366 : 2214 : visit_outer_attrs (expr);
367 : 2214 : visit_inner_attrs (expr);
368 : 2214 : visit (expr.get_struct_name ());
369 : 2214 : }
370 : :
371 : : void
372 : 27674 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
373 : 27674 : {}
374 : :
375 : : void
376 : 148126 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
377 : : {
378 : 148126 : visit (field.get_value ());
379 : 148126 : }
380 : :
381 : : void
382 : 572 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
383 : : {
384 : 572 : visit (field.get_value ());
385 : 572 : }
386 : :
387 : : void
388 : 1307 : DefaultASTVisitor::visit (AST::StructBase &base)
389 : : {
390 : 1307 : visit (base.get_base_struct ());
391 : 1307 : }
392 : :
393 : : void
394 : 92446 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
395 : : {
396 : 92446 : visit_outer_attrs (expr);
397 : 92446 : visit_inner_attrs (expr);
398 : 92446 : visit (expr.get_struct_name ());
399 : 92446 : if (expr.has_struct_base ())
400 : 1244 : visit (expr.get_struct_base ());
401 : 266750 : for (auto &field : expr.get_fields ())
402 : 174304 : visit (field);
403 : 92446 : }
404 : :
405 : : void
406 : 0 : DefaultASTVisitor::visit (AST::StructExprStructBase &expr)
407 : : {
408 : 0 : visit_outer_attrs (expr);
409 : 0 : visit_inner_attrs (expr);
410 : 0 : visit (expr.get_struct_name ());
411 : 0 : visit (expr.get_struct_base ());
412 : 0 : }
413 : :
414 : : void
415 : 8345431 : DefaultASTVisitor::visit (AST::CallExpr &expr)
416 : : {
417 : 8345431 : visit_outer_attrs (expr);
418 : 8345431 : visit (expr.get_function_expr ());
419 : 28978795 : for (auto ¶m : expr.get_params ())
420 : 20633364 : visit (param);
421 : 8345431 : }
422 : :
423 : : void
424 : 5268742 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
425 : : {
426 : 5268742 : visit_outer_attrs (expr);
427 : 5268742 : visit (expr.get_receiver_expr ());
428 : 5268742 : visit (expr.get_method_name ());
429 : 6075480 : for (auto ¶m : expr.get_params ())
430 : 806738 : visit (param);
431 : 5268742 : }
432 : :
433 : : void
434 : 898602 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
435 : : {
436 : 898602 : visit_outer_attrs (expr);
437 : 898602 : visit (expr.get_receiver_expr ());
438 : 898602 : }
439 : :
440 : : void
441 : 45273 : DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
442 : : {
443 : 45273 : visit_outer_attrs (expr);
444 : 98034 : for (auto ¶m : expr.get_params ())
445 : 52761 : visit (param);
446 : 45273 : visit (expr.get_definition_expr ());
447 : 45273 : }
448 : :
449 : : void
450 : 2709260 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
451 : : {
452 : 2709260 : visit_outer_attrs (expr);
453 : 2709260 : visit_inner_attrs (expr);
454 : :
455 : 2709260 : if (expr.has_label ())
456 : 0 : visit (expr.get_label ());
457 : :
458 : 4311727 : for (auto &stmt : expr.get_statements ())
459 : 1602468 : visit (stmt);
460 : :
461 : 2709259 : if (expr.has_tail_expr ())
462 : 2291673 : visit (expr.get_tail_expr ());
463 : 2709259 : }
464 : :
465 : : void
466 : 96 : DefaultASTVisitor::visit (AST::ConstBlock &expr)
467 : : {
468 : 96 : visit (expr.get_const_expr ());
469 : 96 : }
470 : :
471 : : void
472 : 53175 : DefaultASTVisitor::visit (AST::AnonConst &expr)
473 : : {
474 : 53175 : if (!expr.is_deferred ())
475 : 53123 : visit (expr.get_inner_expr ());
476 : 53175 : }
477 : :
478 : : void
479 : 281 : DefaultASTVisitor::visit (AST::ClosureExprInnerTyped &expr)
480 : : {
481 : 281 : visit_outer_attrs (expr);
482 : 611 : for (auto ¶m : expr.get_params ())
483 : 330 : visit (param);
484 : 281 : visit (expr.get_return_type ());
485 : 281 : visit (expr.get_definition_expr ());
486 : 281 : }
487 : :
488 : : void
489 : 78609 : DefaultASTVisitor::visit (AST::ClosureParam ¶m)
490 : : {
491 : 78609 : visit_outer_attrs (param);
492 : 78609 : visit (param.get_pattern ());
493 : 78609 : if (param.has_type_given ())
494 : 4358 : visit (param.get_type ());
495 : 78609 : }
496 : :
497 : : void
498 : 1112 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
499 : : {
500 : 1112 : visit_outer_attrs (expr);
501 : 1112 : if (expr.has_label ())
502 : 441 : visit (expr.get_label_unchecked ());
503 : 1112 : }
504 : :
505 : : void
506 : 12177 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
507 : : {
508 : 12177 : visit_outer_attrs (expr);
509 : 12177 : if (expr.has_label ())
510 : 283 : visit (expr.get_label_unchecked ());
511 : :
512 : 12177 : if (expr.has_break_expr ())
513 : 446 : visit (expr.get_break_expr ());
514 : 12176 : }
515 : :
516 : : void
517 : 48572 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
518 : : {
519 : 48572 : visit (expr.get_from_expr ());
520 : 48572 : visit (expr.get_to_expr ());
521 : 48572 : }
522 : :
523 : : void
524 : 19791 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
525 : : {
526 : 19791 : visit (expr.get_from_expr ());
527 : 19791 : }
528 : :
529 : : void
530 : 29779 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
531 : : {
532 : 29779 : visit (expr.get_to_expr ());
533 : 29779 : }
534 : :
535 : : void
536 : 8746 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
537 : 8746 : {}
538 : :
539 : : void
540 : 943 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
541 : : {
542 : 943 : visit (expr.get_from_expr ());
543 : 943 : visit (expr.get_to_expr ());
544 : 943 : }
545 : :
546 : : void
547 : 0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
548 : : {
549 : 0 : visit (expr.get_to_expr ());
550 : 0 : }
551 : :
552 : : void
553 : 122485 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
554 : : {
555 : 122485 : visit_outer_attrs (expr);
556 : 122485 : if (expr.has_returned_expr ())
557 : 118870 : visit (expr.get_returned_expr ());
558 : 122485 : }
559 : :
560 : : void
561 : 6028 : DefaultASTVisitor::visit (AST::TryExpr &expr)
562 : : {
563 : 6028 : visit_outer_attrs (expr);
564 : 6028 : visit (expr.get_block_expr ());
565 : 6028 : }
566 : :
567 : : void
568 : 13 : DefaultASTVisitor::visit (AST::BoxExpr &expr)
569 : : {
570 : 13 : visit_outer_attrs (expr);
571 : 13 : visit (expr.get_boxed_expr ());
572 : 13 : }
573 : :
574 : : void
575 : 229534 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
576 : : {
577 : 229534 : visit_outer_attrs (expr);
578 : 229534 : visit (expr.get_block_expr ());
579 : 229534 : }
580 : :
581 : : void
582 : 839 : DefaultASTVisitor::visit (AST::LoopLabel &label)
583 : : {
584 : 839 : visit (label.get_lifetime ());
585 : 839 : }
586 : :
587 : : void
588 : 6799 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
589 : : {
590 : 6799 : visit_outer_attrs (expr);
591 : 6799 : if (expr.has_loop_label ())
592 : 642 : visit (expr.get_loop_label ());
593 : 6799 : visit (expr.get_loop_block ());
594 : 6799 : }
595 : :
596 : : void
597 : 22105 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
598 : : {
599 : 22105 : visit_outer_attrs (expr);
600 : 22105 : if (expr.has_loop_label ())
601 : 24 : visit (expr.get_loop_label ());
602 : 22105 : visit (expr.get_predicate_expr ());
603 : 22105 : visit (expr.get_loop_block ());
604 : 22105 : }
605 : :
606 : : void
607 : 4552 : DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
608 : : {
609 : 4552 : visit_outer_attrs (expr);
610 : 9104 : for (auto &pattern : expr.get_patterns ())
611 : 4552 : visit (pattern);
612 : :
613 : 4552 : if (expr.has_loop_label ())
614 : 0 : visit (expr.get_loop_label ());
615 : :
616 : 4552 : visit (expr.get_scrutinee_expr ());
617 : 4552 : visit (expr.get_loop_block ());
618 : 4552 : }
619 : :
620 : : void
621 : 22941 : DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
622 : : {
623 : 22941 : visit_outer_attrs (expr);
624 : 22941 : visit (expr.get_pattern ());
625 : 22941 : visit (expr.get_iterator_expr ());
626 : 22941 : if (expr.has_loop_label ())
627 : 0 : visit (expr.get_loop_label ());
628 : 22941 : visit (expr.get_loop_block ());
629 : 22941 : }
630 : :
631 : : void
632 : 336842 : DefaultASTVisitor::visit (AST::IfExpr &expr)
633 : : {
634 : 336842 : visit_outer_attrs (expr);
635 : 336842 : visit (expr.get_condition_expr ());
636 : 336842 : visit (expr.get_if_block ());
637 : 336842 : }
638 : :
639 : : void
640 : 182031 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
641 : : {
642 : 182031 : visit (reinterpret_cast<AST::IfExpr &> (expr));
643 : 182031 : visit (expr.get_else_block ());
644 : 182031 : }
645 : :
646 : : void
647 : 10845 : DefaultASTVisitor::visit (AST::IfLetExpr &expr)
648 : : {
649 : 10845 : visit_outer_attrs (expr);
650 : 21690 : for (auto &pattern : expr.get_patterns ())
651 : 10845 : visit (pattern);
652 : 10845 : visit (expr.get_value_expr ());
653 : 10845 : visit (expr.get_if_block ());
654 : 10845 : }
655 : :
656 : : void
657 : 2616 : DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
658 : : {
659 : 2616 : visit (reinterpret_cast<AST::IfLetExpr &> (expr));
660 : 2616 : visit (expr.get_else_block ());
661 : 2616 : }
662 : :
663 : : void
664 : 6019186 : DefaultASTVisitor::visit (AST::MatchArm &arm)
665 : : {
666 : 6019186 : visit_outer_attrs (arm);
667 : 12038372 : for (auto &pattern : arm.get_patterns ())
668 : 6019186 : visit (pattern);
669 : 6019186 : if (arm.has_match_arm_guard ())
670 : 4841 : visit (arm.get_guard_expr ());
671 : 6019186 : }
672 : :
673 : : void
674 : 6021599 : DefaultASTVisitor::visit (AST::MatchCase &arm)
675 : : {
676 : 6021599 : visit (arm.get_arm ());
677 : 6021599 : visit (arm.get_expr ());
678 : 6021599 : }
679 : :
680 : : void
681 : 606274 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
682 : : {
683 : 606274 : visit_outer_attrs (expr);
684 : 606274 : visit_inner_attrs (expr);
685 : 606274 : visit (expr.get_scrutinee_expr ());
686 : 6627873 : for (auto &arm : expr.get_match_cases ())
687 : 6021599 : visit (arm);
688 : 606274 : }
689 : :
690 : : void
691 : 0 : DefaultASTVisitor::visit (AST::AwaitExpr &expr)
692 : : {
693 : 0 : visit_outer_attrs (expr);
694 : 0 : visit (expr.get_awaited_expr ());
695 : 0 : }
696 : :
697 : : void
698 : 0 : DefaultASTVisitor::visit (AST::AsyncBlockExpr &expr)
699 : : {
700 : 0 : visit_outer_attrs (expr);
701 : 0 : visit (expr.get_block_expr ());
702 : 0 : }
703 : :
704 : : void
705 : 289 : DefaultASTVisitor::visit (AST::InlineAsm &expr)
706 : : {
707 : 289 : visit_outer_attrs (expr);
708 : 289 : using RegisterType = AST::InlineAsmOperand::RegisterType;
709 : 604 : for (auto &operand : expr.get_operands ())
710 : : {
711 : 315 : switch (operand.get_register_type ())
712 : : {
713 : 110 : case RegisterType::In:
714 : 110 : {
715 : 110 : visit (operand.get_in ().expr);
716 : 110 : break;
717 : : }
718 : 183 : case RegisterType::Out:
719 : 183 : {
720 : 183 : visit (operand.get_out ().expr);
721 : 183 : break;
722 : : }
723 : 0 : case RegisterType::InOut:
724 : 0 : {
725 : 0 : visit (operand.get_in_out ().expr);
726 : 0 : break;
727 : : }
728 : 22 : case RegisterType::SplitInOut:
729 : 22 : {
730 : 22 : auto split = operand.get_split_in_out ();
731 : 22 : visit (split.in_expr);
732 : 22 : visit (split.out_expr);
733 : 22 : break;
734 : 22 : }
735 : 0 : case RegisterType::Const:
736 : 0 : {
737 : 0 : visit (operand.get_const ().anon_const.get_inner_expr ());
738 : 0 : break;
739 : : }
740 : 0 : case RegisterType::Sym:
741 : 0 : {
742 : 0 : visit (operand.get_sym ().expr);
743 : 0 : break;
744 : : }
745 : 0 : case RegisterType::Label:
746 : 0 : {
747 : 0 : visit (operand.get_label ().expr);
748 : 0 : break;
749 : : }
750 : : }
751 : 289 : }
752 : 289 : }
753 : :
754 : : void
755 : 1746 : DefaultASTVisitor::visit (AST::LlvmInlineAsm &expr)
756 : : {
757 : 4092 : for (auto &output : expr.get_outputs ())
758 : 2346 : visit (output.expr);
759 : :
760 : 3630 : for (auto &input : expr.get_inputs ())
761 : 1884 : visit (input.expr);
762 : 1746 : }
763 : :
764 : : void
765 : 1193723 : DefaultASTVisitor::visit (AST::TypeParam ¶m)
766 : : {
767 : 1193723 : visit_outer_attrs (param);
768 : 1460590 : for (auto &bound : param.get_type_param_bounds ())
769 : 266867 : visit (bound);
770 : 1193723 : if (param.has_type ())
771 : 8451 : visit (param.get_type ());
772 : 1193723 : }
773 : :
774 : : void
775 : 164 : DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem &item)
776 : : {
777 : 164 : visit (item.get_lifetime ());
778 : 328 : for (auto &bound : item.get_lifetime_bounds ())
779 : 164 : visit (bound);
780 : 164 : }
781 : :
782 : : void
783 : 140123 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
784 : : {
785 : 140364 : for (auto &lifetime : item.get_for_lifetimes ())
786 : 241 : visit (lifetime);
787 : 140123 : visit (item.get_type ());
788 : 286582 : for (auto ¶m : item.get_type_param_bounds ())
789 : 146459 : visit (param);
790 : 140123 : }
791 : :
792 : : void
793 : 3733838 : DefaultASTVisitor::visit (AST::Visibility &vis)
794 : : {
795 : 3733838 : if (vis.has_path ())
796 : 40952 : visit (vis.get_path ());
797 : 3733838 : }
798 : :
799 : : void
800 : 1951386 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
801 : 1951386 : {}
802 : :
803 : : void
804 : 102055 : DefaultASTVisitor::visit (AST::WhereClause &where)
805 : : {
806 : 242427 : for (auto &item : where.get_items ())
807 : 140372 : visit (item);
808 : 102055 : }
809 : : void
810 : 1952784 : DefaultASTVisitor::visit (AST::FunctionParam ¶m)
811 : : {
812 : 1952784 : visit_outer_attrs (param);
813 : 1952784 : if (param.has_name ())
814 : 1952784 : visit (param.get_pattern ());
815 : :
816 : 1952784 : visit (param.get_type ());
817 : 1952784 : }
818 : :
819 : : void
820 : 1226016 : DefaultASTVisitor::visit (AST::SelfParam ¶m)
821 : : {
822 : 1226016 : visit_outer_attrs (param);
823 : :
824 : 1226016 : if (param.has_lifetime ())
825 : 570946 : visit (param.get_lifetime ());
826 : :
827 : 1226016 : if (param.has_type ())
828 : 1929 : visit (param.get_type ());
829 : 1226016 : }
830 : :
831 : : void
832 : 32626 : DefaultASTVisitor::visit (AST::Module &module)
833 : : {
834 : 32626 : visit_outer_attrs (module);
835 : 32626 : visit (module.get_visibility ());
836 : 32626 : visit_inner_attrs (module);
837 : 872094 : for (auto &item : module.get_items ())
838 : 839468 : visit (item);
839 : 32626 : }
840 : :
841 : : void
842 : 105 : DefaultASTVisitor::visit (AST::ExternCrate &crate)
843 : : {
844 : 105 : visit_outer_attrs (crate);
845 : 105 : visit (crate.get_visibility ());
846 : 105 : }
847 : :
848 : : void
849 : 2457 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
850 : : {
851 : 2457 : visit (use_tree.get_path ());
852 : 2457 : }
853 : :
854 : : void
855 : 8664 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
856 : : {
857 : 8664 : visit (use_tree.get_path ());
858 : 8664 : }
859 : :
860 : : void
861 : 18888 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
862 : : {
863 : 18888 : visit (use_tree.get_path ());
864 : 18888 : }
865 : :
866 : : void
867 : 30019 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
868 : : {
869 : 30019 : visit (use_decl.get_visibility ());
870 : 30019 : visit (use_decl.get_tree ());
871 : 30019 : }
872 : :
873 : : void
874 : 1809828 : DefaultASTVisitor::visit_function_params (AST::Function &function)
875 : : {
876 : 4978596 : for (auto ¶m : function.get_function_params ())
877 : 3168768 : visit (param);
878 : 1809828 : }
879 : :
880 : : void
881 : 1827889 : DefaultASTVisitor::visit (AST::Function &function)
882 : : {
883 : 1827889 : visit_outer_attrs (function);
884 : 1827889 : visit (function.get_visibility ());
885 : 1827889 : visit (function.get_qualifiers ());
886 : 2048101 : for (auto &generic : function.get_generic_params ())
887 : 220212 : visit (generic);
888 : :
889 : 1827889 : visit_function_params (function);
890 : :
891 : 1827889 : if (function.has_return_type ())
892 : 1554924 : visit (function.get_return_type ());
893 : 1827889 : if (function.has_where_clause ())
894 : 61373 : visit (function.get_where_clause ());
895 : 1827889 : if (function.has_body ())
896 : 1664270 : visit (*function.get_definition ());
897 : 1827888 : }
898 : :
899 : : void
900 : 373919 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
901 : : {
902 : 373919 : visit_outer_attrs (type_alias);
903 : 373919 : visit (type_alias.get_visibility ());
904 : 374053 : for (auto &generic : type_alias.get_generic_params ())
905 : 134 : visit (generic);
906 : 373919 : if (type_alias.has_where_clause ())
907 : 0 : visit (type_alias.get_where_clause ());
908 : 373919 : visit (type_alias.get_type_aliased ());
909 : 373919 : }
910 : :
911 : : void
912 : 76184 : DefaultASTVisitor::visit (AST::StructField &field)
913 : : {
914 : 76184 : visit_outer_attrs (field);
915 : 76184 : visit (field.get_visibility ());
916 : 76184 : visit (field.get_field_type ());
917 : 76184 : }
918 : :
919 : : void
920 : 169055 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
921 : : {
922 : 169055 : visit_outer_attrs (struct_item);
923 : 169055 : visit (struct_item.get_visibility ());
924 : 208815 : for (auto &generic : struct_item.get_generic_params ())
925 : 39760 : visit (generic);
926 : 169055 : if (struct_item.has_where_clause ())
927 : 1212 : visit (struct_item.get_where_clause ());
928 : 239354 : for (auto &field : struct_item.get_fields ())
929 : 70299 : visit (field);
930 : 169055 : }
931 : :
932 : : void
933 : 77277 : DefaultASTVisitor::visit (AST::TupleField &field)
934 : : {
935 : 77277 : visit_outer_attrs (field);
936 : 77277 : visit (field.get_visibility ());
937 : 77277 : visit (field.get_field_type ());
938 : 77277 : }
939 : :
940 : : void
941 : 23054 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
942 : : {
943 : 23054 : visit_outer_attrs (tuple_struct);
944 : 23054 : visit (tuple_struct.get_visibility ());
945 : 31987 : for (auto &generic : tuple_struct.get_generic_params ())
946 : 8933 : visit (generic);
947 : 23054 : if (tuple_struct.has_where_clause ())
948 : 108 : visit (tuple_struct.get_where_clause ());
949 : 92848 : for (auto &field : tuple_struct.get_fields ())
950 : 69794 : visit (field);
951 : 23054 : }
952 : :
953 : : void
954 : 21623 : DefaultASTVisitor::visit (AST::EnumItem &item)
955 : : {
956 : 21623 : visit_outer_attrs (item);
957 : 21623 : visit (item.get_visibility ());
958 : 21623 : }
959 : :
960 : : void
961 : 6810 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
962 : : {
963 : 6810 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
964 : 14293 : for (auto &field : item.get_tuple_fields ())
965 : 7483 : visit (field);
966 : 6810 : }
967 : :
968 : : void
969 : 953 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
970 : : {
971 : 953 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
972 : 2529 : for (auto &field : item.get_struct_fields ())
973 : 1576 : visit (field);
974 : 953 : }
975 : :
976 : : void
977 : 4822 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
978 : : {
979 : 4822 : DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
980 : 4822 : visit (item.get_expr ());
981 : 4822 : }
982 : :
983 : : void
984 : 10363 : DefaultASTVisitor::visit (AST::Enum &enum_item)
985 : : {
986 : 10363 : visit_outer_attrs (enum_item);
987 : 10363 : visit (enum_item.get_visibility ());
988 : 15436 : for (auto &generic : enum_item.get_generic_params ())
989 : 5073 : visit (generic);
990 : 10363 : if (enum_item.has_where_clause ())
991 : 0 : visit (enum_item.get_where_clause ());
992 : 36585 : for (auto &item : enum_item.get_variants ())
993 : 26222 : visit (item);
994 : 10363 : }
995 : :
996 : : void
997 : 1513 : DefaultASTVisitor::visit (AST::Union &union_item)
998 : : {
999 : 1513 : visit_outer_attrs (union_item);
1000 : 1513 : visit (union_item.get_visibility ());
1001 : 2650 : for (auto &generic : union_item.get_generic_params ())
1002 : 1137 : visit (generic);
1003 : 1513 : if (union_item.has_where_clause ())
1004 : 0 : visit (union_item.get_where_clause ());
1005 : 5822 : for (auto &variant : union_item.get_variants ())
1006 : 4309 : visit (variant);
1007 : 1513 : }
1008 : :
1009 : : void
1010 : 89822 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
1011 : : {
1012 : 89822 : visit_outer_attrs (const_item);
1013 : 89822 : visit (const_item.get_visibility ());
1014 : 89822 : visit (const_item.get_type ());
1015 : 89822 : if (const_item.has_expr ())
1016 : 86639 : visit (const_item.get_expr ());
1017 : 89822 : }
1018 : :
1019 : : void
1020 : 4443 : DefaultASTVisitor::visit (AST::StaticItem &static_item)
1021 : : {
1022 : 4443 : visit_outer_attrs (static_item);
1023 : 4443 : visit (static_item.get_visibility ());
1024 : 4443 : visit (static_item.get_type ());
1025 : 4443 : visit (static_item.get_expr ());
1026 : 4443 : }
1027 : :
1028 : : void
1029 : 17011 : DefaultASTVisitor::visit (AST::TraitItemType &item)
1030 : : {
1031 : 17011 : visit_outer_attrs (item);
1032 : 20619 : for (auto &bound : item.get_type_param_bounds ())
1033 : 3608 : visit (bound);
1034 : 17011 : }
1035 : :
1036 : : void
1037 : 29334 : DefaultASTVisitor::visit (AST::Trait &trait)
1038 : : {
1039 : 29334 : visit_outer_attrs (trait);
1040 : 29334 : visit (trait.get_visibility ());
1041 : :
1042 : 29334 : visit_inner_attrs (trait);
1043 : :
1044 : 29334 : visit (trait.get_implicit_self ());
1045 : :
1046 : 35864 : for (auto &generic : trait.get_generic_params ())
1047 : 6530 : visit (generic);
1048 : :
1049 : 29334 : if (trait.has_where_clause ())
1050 : 49 : visit (trait.get_where_clause ());
1051 : :
1052 : 37430 : for (auto &bound : trait.get_type_param_bounds ())
1053 : 8096 : visit (bound);
1054 : :
1055 : 70583 : for (auto &item : trait.get_trait_items ())
1056 : 41249 : visit (item);
1057 : 29334 : }
1058 : :
1059 : : void
1060 : 36844 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
1061 : : {
1062 : 36844 : visit_outer_attrs (impl);
1063 : 36844 : visit (impl.get_visibility ());
1064 : :
1065 : 48770 : for (auto &generic : impl.get_generic_params ())
1066 : 11926 : visit (generic);
1067 : 36844 : if (impl.has_where_clause ())
1068 : 118 : visit (impl.get_where_clause ());
1069 : 36844 : visit (impl.get_type ());
1070 : 36844 : visit_inner_attrs (impl);
1071 : 195376 : for (auto &item : impl.get_impl_items ())
1072 : 158532 : visit (item);
1073 : 36844 : }
1074 : :
1075 : : void
1076 : 407925 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
1077 : : {
1078 : 407925 : visit_outer_attrs (impl);
1079 : 407925 : visit (impl.get_visibility ());
1080 : :
1081 : 900256 : for (auto &generic : impl.get_generic_params ())
1082 : 492331 : visit (generic);
1083 : 407925 : if (impl.has_where_clause ())
1084 : 13566 : visit (impl.get_where_clause ());
1085 : 407925 : visit (impl.get_type ());
1086 : 407925 : visit (impl.get_trait_path ());
1087 : 407925 : visit_inner_attrs (impl);
1088 : 883289 : for (auto &item : impl.get_impl_items ())
1089 : 475364 : visit (item);
1090 : 407925 : }
1091 : :
1092 : : void
1093 : 82 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
1094 : : {
1095 : 82 : visit_outer_attrs (item);
1096 : 82 : visit (item.get_visibility ());
1097 : 82 : }
1098 : :
1099 : : void
1100 : 12 : DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
1101 : : {
1102 : 12 : visit_outer_attrs (item);
1103 : 12 : visit (item.get_visibility ());
1104 : 12 : visit (item.get_type ());
1105 : 12 : }
1106 : :
1107 : : void
1108 : 19774 : DefaultASTVisitor::visit (AST::ExternBlock &block)
1109 : : {
1110 : 19774 : visit_outer_attrs (block);
1111 : 19774 : visit (block.get_visibility ());
1112 : 19774 : visit_inner_attrs (block);
1113 : 130574 : for (auto &item : block.get_extern_items ())
1114 : 110800 : visit (item);
1115 : 19774 : }
1116 : :
1117 : : void
1118 : 74232 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
1119 : 74232 : {}
1120 : :
1121 : : void
1122 : 10518 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
1123 : : {
1124 : 25719 : for (auto &m : match.get_matches ())
1125 : 15201 : visit (m);
1126 : 10518 : }
1127 : :
1128 : : void
1129 : 38961 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
1130 : : {
1131 : 157258 : for (auto &m : matcher.get_matches ())
1132 : 118297 : visit (m);
1133 : 38961 : }
1134 : :
1135 : : void
1136 : 37032 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
1137 : : {
1138 : 37032 : visit (transcriber.get_token_tree ());
1139 : 37032 : }
1140 : :
1141 : : void
1142 : 37032 : DefaultASTVisitor::visit (AST::MacroRule &rule)
1143 : : {
1144 : 37032 : visit (rule.get_matcher ());
1145 : 37032 : visit (rule.get_transcriber ());
1146 : 37032 : }
1147 : : void
1148 : 33509 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
1149 : : {
1150 : 33509 : visit_outer_attrs (rules_def);
1151 : 70541 : for (auto &rule : rules_def.get_macro_rules ())
1152 : 37032 : visit (rule);
1153 : 33509 : }
1154 : :
1155 : : void
1156 : 63098 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
1157 : : {
1158 : 63098 : visit (data.get_path ());
1159 : 63098 : visit (data.get_delim_tok_tree ());
1160 : 63098 : }
1161 : : void
1162 : 63098 : DefaultASTVisitor::visit (AST::MacroInvocation ¯o_invoc)
1163 : : {
1164 : 63098 : visit_outer_attrs (macro_invoc);
1165 : 63098 : visit (macro_invoc.get_invoc_data ());
1166 : 63098 : }
1167 : :
1168 : : void
1169 : 0 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
1170 : : {
1171 : 0 : visit (meta_item.get_path ());
1172 : 0 : }
1173 : :
1174 : : void
1175 : 45 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
1176 : : {
1177 : 45 : visit (meta_item.get_path ());
1178 : 103 : for (auto &inner : meta_item.get_seq ())
1179 : 58 : visit (inner);
1180 : 45 : }
1181 : :
1182 : : void
1183 : 0 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
1184 : 0 : {}
1185 : :
1186 : : void
1187 : 0 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
1188 : 0 : {}
1189 : :
1190 : : void
1191 : 0 : DefaultASTVisitor::visit (AST::MetaListPaths &meta_item)
1192 : : {
1193 : 0 : for (auto &path : meta_item.get_paths ())
1194 : 0 : visit (path);
1195 : 0 : }
1196 : :
1197 : : void
1198 : 0 : DefaultASTVisitor::visit (AST::MetaListNameValueStr &meta_item)
1199 : : {
1200 : 0 : for (auto &str : meta_item.get_values ())
1201 : 0 : visit (str);
1202 : 0 : }
1203 : :
1204 : : void
1205 : 7212397 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
1206 : 7212397 : {}
1207 : :
1208 : : void
1209 : 1663964 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
1210 : : {
1211 : 1663964 : if (pattern.has_subpattern ())
1212 : 2478 : visit (pattern.get_subpattern ());
1213 : 1663964 : }
1214 : :
1215 : : void
1216 : 726365 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
1217 : 726365 : {}
1218 : :
1219 : : void
1220 : 572 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
1221 : 572 : {}
1222 : :
1223 : : void
1224 : 35747 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
1225 : 35747 : {}
1226 : :
1227 : : void
1228 : 168 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
1229 : : {
1230 : 168 : visit (bound.get_path ());
1231 : 168 : }
1232 : :
1233 : : void
1234 : 0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
1235 : : {
1236 : 0 : visit (bound.get_qualified_path ());
1237 : 0 : }
1238 : :
1239 : : void
1240 : 15316 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
1241 : : {
1242 : 15316 : if (pattern.get_has_lower_bound ())
1243 : 15316 : visit (pattern.get_lower_bound ());
1244 : 15316 : if (pattern.get_has_upper_bound ())
1245 : 15316 : visit (pattern.get_upper_bound ());
1246 : 15316 : }
1247 : :
1248 : : void
1249 : 37067 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
1250 : : {
1251 : 37067 : visit (pattern.get_referenced_pattern ());
1252 : 37067 : }
1253 : :
1254 : : void
1255 : 13 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
1256 : : {
1257 : 13 : visit_outer_attrs (field);
1258 : 13 : visit (field.get_index_pattern ());
1259 : 13 : }
1260 : :
1261 : : void
1262 : 7564 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
1263 : : {
1264 : 7564 : visit_outer_attrs (field);
1265 : 7564 : visit (field.get_ident_pattern ());
1266 : 7564 : }
1267 : :
1268 : : void
1269 : 1662 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
1270 : : {
1271 : 1662 : visit_outer_attrs (field);
1272 : 1662 : }
1273 : :
1274 : : void
1275 : 4256 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
1276 : : {
1277 : 10195 : for (auto &field : spe.get_struct_pattern_fields ())
1278 : 5939 : visit (field);
1279 : 4256 : for (auto &attribute : spe.get_etc_outer_attrs ())
1280 : : visit (attribute);
1281 : 4256 : }
1282 : :
1283 : : void
1284 : 4256 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
1285 : : {
1286 : 4256 : visit (pattern.get_path ());
1287 : 4256 : visit (pattern.get_struct_pattern_elems ());
1288 : 4256 : }
1289 : :
1290 : : void
1291 : 147340 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRest &tuple_items)
1292 : : {
1293 : 300088 : for (auto &pattern : tuple_items.get_patterns ())
1294 : 152748 : visit (pattern);
1295 : 147340 : }
1296 : :
1297 : : void
1298 : 1633 : DefaultASTVisitor::visit (AST::TupleStructItemsHasRest &tuple_items)
1299 : : {
1300 : 2030 : for (auto &lower : tuple_items.get_lower_patterns ())
1301 : 397 : visit (lower);
1302 : 1870 : for (auto &upper : tuple_items.get_upper_patterns ())
1303 : 237 : visit (upper);
1304 : 1633 : }
1305 : :
1306 : : void
1307 : 148973 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
1308 : : {
1309 : 148973 : visit (pattern.get_path ());
1310 : 148973 : visit (pattern.get_items ());
1311 : 148973 : }
1312 : :
1313 : : void
1314 : 394932 : DefaultASTVisitor::visit (AST::TuplePatternItemsNoRest &tuple_items)
1315 : : {
1316 : 1295190 : for (auto &pattern : tuple_items.get_patterns ())
1317 : 900258 : visit (pattern);
1318 : 394932 : }
1319 : :
1320 : : void
1321 : 345 : DefaultASTVisitor::visit (AST::TuplePatternItemsHasRest &tuple_items)
1322 : : {
1323 : 701 : for (auto &lower : tuple_items.get_lower_patterns ())
1324 : 356 : visit (lower);
1325 : 745 : for (auto &upper : tuple_items.get_upper_patterns ())
1326 : 400 : visit (upper);
1327 : 345 : }
1328 : :
1329 : : void
1330 : 395277 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
1331 : : {
1332 : 395277 : visit (pattern.get_items ());
1333 : 395277 : }
1334 : :
1335 : : void
1336 : 572 : DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
1337 : : {
1338 : 572 : visit (pattern.get_pattern_in_parens ());
1339 : 572 : }
1340 : :
1341 : : void
1342 : 1544 : DefaultASTVisitor::visit (AST::SlicePatternItemsNoRest &items)
1343 : : {
1344 : 3638 : for (auto &item : items.get_patterns ())
1345 : 2094 : visit (item);
1346 : 1544 : }
1347 : :
1348 : : void
1349 : 1704 : DefaultASTVisitor::visit (AST::SlicePatternItemsHasRest &items)
1350 : : {
1351 : 3965 : for (auto &item : items.get_lower_patterns ())
1352 : 2261 : visit (item);
1353 : 2545 : for (auto &item : items.get_upper_patterns ())
1354 : 841 : visit (item);
1355 : 1704 : }
1356 : :
1357 : : void
1358 : 3248 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
1359 : : {
1360 : 3248 : visit (pattern.get_items ());
1361 : 3248 : }
1362 : :
1363 : : void
1364 : 8140 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
1365 : : {
1366 : 28645 : for (auto &alt : pattern.get_alts ())
1367 : 20505 : visit (alt);
1368 : 8140 : }
1369 : :
1370 : : void
1371 : 865 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
1372 : 865 : {}
1373 : :
1374 : : void
1375 : 863822 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
1376 : : {
1377 : 863822 : visit_outer_attrs (stmt);
1378 : 863822 : visit (stmt.get_pattern ());
1379 : 863822 : if (stmt.has_type ())
1380 : 99933 : visit (stmt.get_type ());
1381 : 863822 : if (stmt.has_init_expr ())
1382 : 829286 : visit (stmt.get_init_expr ());
1383 : 863822 : }
1384 : :
1385 : : void
1386 : 1193851 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
1387 : : {
1388 : 1193851 : visit (stmt.get_expr ());
1389 : 1193850 : }
1390 : :
1391 : : void
1392 : 279555 : DefaultASTVisitor::visit (AST::TraitBound &bound)
1393 : : {
1394 : 279767 : for (auto &lifetime : bound.get_for_lifetimes ())
1395 : 212 : visit (lifetime);
1396 : 279555 : visit (bound.get_type_path ());
1397 : 279555 : }
1398 : :
1399 : : void
1400 : 424 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
1401 : : {
1402 : 1272 : for (auto &bound : type.get_type_param_bounds ())
1403 : 848 : visit (bound);
1404 : 424 : }
1405 : :
1406 : : void
1407 : 16740 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
1408 : : {
1409 : 41876 : for (auto &bound : type.get_type_param_bounds ())
1410 : 25136 : visit (bound);
1411 : 16740 : }
1412 : :
1413 : : void
1414 : 1410 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
1415 : : {
1416 : 1410 : visit (type.get_type_in_parens ());
1417 : 1410 : }
1418 : :
1419 : : void
1420 : 30029 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
1421 : : {
1422 : 30029 : visit (type.get_trait_bound ());
1423 : 30029 : }
1424 : :
1425 : : void
1426 : 6323 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
1427 : : {
1428 : 6323 : visit (type.get_trait_bound ());
1429 : 6323 : }
1430 : :
1431 : : void
1432 : 150309 : DefaultASTVisitor::visit (AST::TupleType &type)
1433 : : {
1434 : 483128 : for (auto &elem : type.get_elems ())
1435 : 332819 : visit (elem);
1436 : 150309 : }
1437 : :
1438 : : void
1439 : 7756 : DefaultASTVisitor::visit (AST::NeverType &type)
1440 : 7756 : {}
1441 : :
1442 : : void
1443 : 314111 : DefaultASTVisitor::visit (AST::RawPointerType &type)
1444 : : {
1445 : 314111 : visit (type.get_type_pointed_to ());
1446 : 314111 : }
1447 : :
1448 : : void
1449 : 1309390 : DefaultASTVisitor::visit (AST::ReferenceType &type)
1450 : : {
1451 : 1309390 : visit (type.get_lifetime ());
1452 : 1309390 : visit (type.get_base_type ());
1453 : 1309390 : }
1454 : :
1455 : : void
1456 : 53079 : DefaultASTVisitor::visit (AST::ArrayType &type)
1457 : : {
1458 : 53079 : visit (type.get_elem_type ());
1459 : 53079 : visit (type.get_size_expr ());
1460 : 53079 : }
1461 : :
1462 : : void
1463 : 104087 : DefaultASTVisitor::visit (AST::SliceType &type)
1464 : : {
1465 : 104087 : visit (type.get_elem_type ());
1466 : 104087 : }
1467 : :
1468 : : void
1469 : 33792 : DefaultASTVisitor::visit (AST::InferredType &type)
1470 : 33792 : {}
1471 : :
1472 : : void
1473 : 553972 : DefaultASTVisitor::visit (AST::MaybeNamedParam ¶m)
1474 : : {
1475 : 553972 : visit_outer_attrs (param);
1476 : 553972 : visit (param.get_type ());
1477 : 553972 : }
1478 : :
1479 : : void
1480 : 92666 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
1481 : : {
1482 : 92703 : for (auto &lifetime : type.get_for_lifetimes ())
1483 : 37 : visit (lifetime);
1484 : 92666 : visit (type.get_function_qualifiers ());
1485 : 646638 : for (auto ¶m : type.get_function_params ())
1486 : 553972 : visit (param);
1487 : 92666 : if (type.is_variadic ())
1488 : 28224 : for (auto attr : type.get_variadic_attr ())
1489 : 0 : visit (attr);
1490 : 92666 : if (type.has_return_type ())
1491 : 91088 : visit (type.get_return_type ());
1492 : 92666 : }
1493 : :
1494 : : void
1495 : 0 : DefaultASTVisitor::visit (AST::FormatArgs &)
1496 : : {
1497 : : // FIXME: Do we have anything to do? any subnodes to visit? Probably, right?
1498 : 0 : }
1499 : :
1500 : : void
1501 : 139 : DefaultASTVisitor::visit (AST::OffsetOf &offset_of)
1502 : : {
1503 : 139 : visit (offset_of.get_type ());
1504 : 139 : }
1505 : :
1506 : : void
1507 : 9445 : DefaultASTVisitor::visit (AST::VariadicParam ¶m)
1508 : : {
1509 : 9445 : if (param.has_pattern ())
1510 : 121 : visit (param.get_pattern ());
1511 : 9445 : }
1512 : :
1513 : : void
1514 : 4381 : ContextualASTVisitor::visit (AST::Crate &crate)
1515 : : {
1516 : 4381 : ctx.enter (Kind::CRATE);
1517 : 4381 : DefaultASTVisitor::visit (crate);
1518 : 4381 : ctx.exit ();
1519 : 4381 : }
1520 : :
1521 : : void
1522 : 950 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
1523 : : {
1524 : 950 : ctx.enter (Kind::INHERENT_IMPL);
1525 : 950 : DefaultASTVisitor::visit (impl);
1526 : 950 : ctx.exit ();
1527 : 950 : }
1528 : :
1529 : : void
1530 : 4723 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
1531 : : {
1532 : 4723 : ctx.enter (Kind::TRAIT_IMPL);
1533 : 4723 : DefaultASTVisitor::visit (impl);
1534 : 4723 : ctx.exit ();
1535 : 4723 : }
1536 : :
1537 : : void
1538 : 3662 : ContextualASTVisitor::visit (AST::Trait &trait)
1539 : : {
1540 : 3662 : ctx.enter (Kind::TRAIT);
1541 : 3662 : DefaultASTVisitor::visit (trait);
1542 : 3662 : ctx.exit ();
1543 : 3662 : }
1544 : :
1545 : : } // namespace AST
1546 : : } // namespace Rust
|