Daily bump.
[official-gcc.git] / gcc / rust / ast / rust-ast-visitor.cc
blob2021012a693d8607536b122f5d96c6e8c05f48ae
1 // Copyright (C) 2020-2025 Free Software Foundation, Inc.
3 // This file is part of GCC.
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.
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.
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/>.
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"
30 namespace Rust {
31 namespace AST {
33 void
34 DefaultASTVisitor::visit (AST::Crate &crate)
36 visit_inner_attrs (crate);
37 for (auto &item : crate.items)
38 visit (item);
41 void
42 DefaultASTVisitor::visit (AST::Token &tok)
45 void
46 DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
48 for (auto &token : delim_tok_tree.get_token_trees ())
49 visit (token);
52 void
53 DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
55 for (auto &item : input.get_items ())
56 visit (item);
59 void
60 DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
62 visit_outer_attrs (ident_expr);
65 void
66 DefaultASTVisitor::visit (AST::Lifetime &lifetime)
69 void
70 DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
72 visit (lifetime_param.get_outer_attribute ());
73 visit (lifetime_param.get_lifetime ());
74 for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
75 visit (lifetime_bound);
78 void
79 DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
81 visit (const_param.get_outer_attribute ());
82 if (const_param.has_type ())
83 visit (const_param.get_type ());
84 if (const_param.has_default_value ())
85 visit (const_param.get_default_value ());
88 void
89 DefaultASTVisitor::visit (AST::PathInExpression &path)
91 visit_outer_attrs (path);
92 for (auto &segment : path.get_segments ())
93 visit (segment);
96 void
97 DefaultASTVisitor::visit (AST::TypePathSegment &segment)
100 void
101 DefaultASTVisitor::visit (GenericArgsBinding &binding)
103 visit (binding.get_type ());
106 void
107 DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
109 visit (segment.get_generic_args ());
112 void
113 DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
115 for (auto &input : tpf.get_params ())
116 visit (input);
117 if (tpf.has_return_type ())
118 visit (tpf.get_return_type ());
121 void
122 DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
125 void
126 DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
128 visit (segment.get_type_path_function ());
129 visit (segment.get_ident_segment ());
132 void
133 DefaultASTVisitor::visit (AST::GenericArgs &args)
135 for (auto &lifetime : args.get_lifetime_args ())
136 visit (lifetime);
138 for (auto &generic : args.get_generic_args ())
139 visit (generic);
141 for (auto &binding : args.get_binding_args ())
142 visit (binding);
145 void
146 DefaultASTVisitor::visit (AST::PathExprSegment &segment)
148 visit (segment.get_ident_segment ());
149 if (segment.has_generic_args ())
150 visit (segment.get_generic_args ());
152 void
153 DefaultASTVisitor::visit (AST::TypePath &path)
155 for (auto &segment : path.get_segments ())
156 visit (segment);
159 void
160 DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
162 visit_outer_attrs (path);
163 visit (path.get_qualified_path_type ());
165 for (auto &segment : path.get_segments ())
166 visit (segment);
169 void
170 DefaultASTVisitor::visit (AST::QualifiedPathType &path)
172 visit (path.get_type ());
173 if (path.has_as_clause ())
174 visit (path.get_as_type_path ());
177 void
178 DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
180 visit (path.get_qualified_path_type ());
181 visit (path.get_associated_segment ());
183 for (auto &segment : path.get_segments ())
184 visit (segment);
187 void
188 DefaultASTVisitor::visit (AST::LiteralExpr &expr)
190 visit_outer_attrs (expr);
193 void
194 DefaultASTVisitor::visit (AST::AttrInputLiteral &attr_input)
196 visit (attr_input.get_literal ());
199 void
200 DefaultASTVisitor::visit (AST::AttrInputMacro &attr_input)
202 visit (attr_input.get_macro ());
205 void
206 DefaultASTVisitor::visit (AST::MetaItemLitExpr &meta_item)
208 visit (meta_item.get_literal ());
211 void
212 DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
215 void
216 DefaultASTVisitor::visit (AST::SimplePath &path)
218 for (auto &segment : path.get_segments ())
219 visit (segment);
222 void
223 DefaultASTVisitor::visit (AST::MetaItemPathLit &meta_item)
225 visit (meta_item.get_path ());
226 visit (meta_item.get_literal ());
229 void
230 DefaultASTVisitor::visit (AST::BorrowExpr &expr)
232 visit_outer_attrs (expr);
233 visit (expr.get_borrowed_expr ());
236 void
237 DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
239 visit_outer_attrs (expr);
240 visit (expr.get_dereferenced_expr ());
243 void
244 DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
246 visit_outer_attrs (expr);
249 void
250 DefaultASTVisitor::visit (AST::NegationExpr &expr)
252 visit_outer_attrs (expr);
253 visit (expr.get_negated_expr ());
256 void
257 DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
259 visit_outer_attrs (expr);
260 visit (expr.get_left_expr ());
261 visit (expr.get_right_expr ());
264 void
265 DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
267 visit_outer_attrs (expr);
268 visit (expr.get_left_expr ());
269 visit (expr.get_right_expr ());
272 void
273 DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
275 visit_outer_attrs (expr);
276 visit (expr.get_left_expr ());
277 visit (expr.get_right_expr ());
280 void
281 DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
283 visit_outer_attrs (expr);
284 visit (expr.get_casted_expr ());
285 visit (expr.get_type_to_cast_to ());
288 void
289 DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
291 visit_outer_attrs (expr);
292 visit (expr.get_left_expr ());
293 visit (expr.get_right_expr ());
296 void
297 DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
299 visit_outer_attrs (expr);
300 visit (expr.get_left_expr ());
301 visit (expr.get_right_expr ());
304 void
305 DefaultASTVisitor::visit (AST::GroupedExpr &expr)
307 visit_outer_attrs (expr);
308 visit_inner_attrs (expr);
309 visit (expr.get_expr_in_parens ());
312 void
313 DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
315 for (auto &value : elems.get_values ())
316 visit (value);
319 void
320 DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
322 visit (elems.get_elem_to_copy ());
323 visit (elems.get_num_copies ());
326 void
327 DefaultASTVisitor::visit (AST::ArrayExpr &expr)
329 visit_outer_attrs (expr);
330 visit_inner_attrs (expr);
331 visit (expr.get_array_elems ());
334 void
335 DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
337 visit_outer_attrs (expr);
338 visit (expr.get_array_expr ());
339 visit (expr.get_index_expr ());
342 void
343 DefaultASTVisitor::visit (AST::TupleExpr &expr)
345 visit_outer_attrs (expr);
346 visit_inner_attrs (expr);
347 for (auto &elem : expr.get_tuple_elems ())
348 visit (elem);
351 void
352 DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
354 visit_outer_attrs (expr);
355 visit (expr.get_tuple_expr ());
358 void
359 DefaultASTVisitor::visit (AST::StructExprStruct &expr)
361 visit_outer_attrs (expr);
362 visit_inner_attrs (expr);
363 visit (expr.get_struct_name ());
366 void
367 DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
370 void
371 DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
373 visit (field.get_value ());
376 void
377 DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
379 visit (field.get_value ());
382 void
383 DefaultASTVisitor::visit (AST::StructBase &base)
385 visit (base.get_base_struct ());
388 void
389 DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
391 visit_outer_attrs (expr);
392 visit_inner_attrs (expr);
393 if (expr.has_struct_base ())
394 visit (expr.get_struct_base ());
395 for (auto &field : expr.get_fields ())
396 visit (field);
399 void
400 DefaultASTVisitor::visit (AST::StructExprStructBase &expr)
402 visit_outer_attrs (expr);
403 visit_inner_attrs (expr);
404 visit (expr.get_struct_base ());
407 void
408 DefaultASTVisitor::visit (AST::CallExpr &expr)
410 visit_outer_attrs (expr);
411 visit (expr.get_function_expr ());
412 for (auto &param : expr.get_params ())
413 visit (param);
416 void
417 DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
419 visit_outer_attrs (expr);
420 visit (expr.get_receiver_expr ());
421 visit (expr.get_method_name ());
422 for (auto &param : expr.get_params ())
423 visit (param);
426 void
427 DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
429 visit_outer_attrs (expr);
430 visit (expr.get_receiver_expr ());
433 void
434 DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
436 visit_outer_attrs (expr);
437 for (auto &param : expr.get_params ())
438 visit (param);
439 visit (expr.get_definition_expr ());
442 void
443 DefaultASTVisitor::visit (AST::BlockExpr &expr)
445 visit_outer_attrs (expr);
446 visit_inner_attrs (expr);
447 for (auto &stmt : expr.get_statements ())
448 visit (stmt);
449 if (expr.has_tail_expr ())
450 visit (expr.get_tail_expr ());
453 void
454 DefaultASTVisitor::visit (AST::ClosureExprInnerTyped &expr)
456 visit_outer_attrs (expr);
457 for (auto &param : expr.get_params ())
458 visit (param);
459 visit (expr.get_return_type ());
460 visit (expr.get_definition_block ());
463 void
464 DefaultASTVisitor::visit (AST::ClosureParam &param)
466 visit_outer_attrs (param);
467 visit (param.get_pattern ());
468 if (param.has_type_given ())
469 visit (param.get_type ());
472 void
473 DefaultASTVisitor::visit (AST::ContinueExpr &expr)
475 visit_outer_attrs (expr);
476 visit (expr.get_label ());
479 void
480 DefaultASTVisitor::visit (AST::BreakExpr &expr)
482 visit_outer_attrs (expr);
483 if (expr.has_label ())
484 visit (expr.get_label ());
486 if (expr.has_break_expr ())
487 visit (expr.get_break_expr ());
490 void
491 DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
493 visit (expr.get_from_expr ());
494 visit (expr.get_to_expr ());
497 void
498 DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
500 visit (expr.get_from_expr ());
503 void
504 DefaultASTVisitor::visit (AST::RangeToExpr &expr)
506 visit (expr.get_to_expr ());
509 void
510 DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
513 void
514 DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
516 visit (expr.get_from_expr ());
517 visit (expr.get_to_expr ());
520 void
521 DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
523 visit (expr.get_to_expr ());
526 void
527 DefaultASTVisitor::visit (AST::ReturnExpr &expr)
529 visit_outer_attrs (expr);
530 if (expr.has_returned_expr ())
531 visit (expr.get_returned_expr ());
534 void
535 DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
537 visit_outer_attrs (expr);
538 visit (expr.get_block_expr ());
541 void
542 DefaultASTVisitor::visit (AST::LoopLabel &label)
544 visit (label.get_lifetime ());
547 void
548 DefaultASTVisitor::visit (AST::LoopExpr &expr)
550 visit_outer_attrs (expr);
551 visit (expr.get_loop_label ());
552 visit (expr.get_loop_block ());
555 void
556 DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
558 visit_outer_attrs (expr);
559 visit (expr.get_predicate_expr ());
560 visit (expr.get_loop_label ());
561 visit (expr.get_loop_block ());
564 void
565 DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
567 visit_outer_attrs (expr);
568 for (auto &pattern : expr.get_patterns ())
569 visit (pattern);
570 visit (expr.get_scrutinee_expr ());
571 visit (expr.get_loop_label ());
572 visit (expr.get_loop_block ());
575 void
576 DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
578 visit_outer_attrs (expr);
579 visit (expr.get_pattern ());
580 visit (expr.get_iterator_expr ());
581 visit (expr.get_loop_label ());
582 visit (expr.get_loop_block ());
585 void
586 DefaultASTVisitor::visit (AST::IfExpr &expr)
588 visit_outer_attrs (expr);
589 visit (expr.get_condition_expr ());
590 visit (expr.get_if_block ());
593 void
594 DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
596 visit (reinterpret_cast<AST::IfExpr &> (expr));
597 visit (expr.get_else_block ());
600 void
601 DefaultASTVisitor::visit (AST::IfLetExpr &expr)
603 visit_outer_attrs (expr);
604 for (auto &pattern : expr.get_patterns ())
605 visit (pattern);
606 visit (expr.get_value_expr ());
607 visit (expr.get_if_block ());
610 void
611 DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
613 visit (reinterpret_cast<AST::IfLetExpr &> (expr));
614 visit (expr.get_else_block ());
617 void
618 DefaultASTVisitor::visit (AST::MatchArm &arm)
620 visit_outer_attrs (arm);
621 for (auto &pattern : arm.get_patterns ())
622 visit (pattern);
623 if (arm.has_match_arm_guard ())
624 visit (arm.get_guard_expr ());
627 void
628 DefaultASTVisitor::visit (AST::MatchCase &arm)
630 visit (arm.get_arm ());
631 visit (arm.get_expr ());
634 void
635 DefaultASTVisitor::visit (AST::MatchExpr &expr)
637 visit_outer_attrs (expr);
638 visit_inner_attrs (expr);
639 visit (expr.get_scrutinee_expr ());
640 for (auto &arm : expr.get_match_cases ())
641 visit (arm);
644 void
645 DefaultASTVisitor::visit (AST::AwaitExpr &expr)
647 visit_outer_attrs (expr);
648 visit (expr.get_awaited_expr ());
651 void
652 DefaultASTVisitor::visit (AST::AsyncBlockExpr &expr)
654 visit_outer_attrs (expr);
655 visit (expr.get_block_expr ());
658 void
659 DefaultASTVisitor::visit (AST::TypeParam &param)
661 visit (param.get_outer_attribute ());
662 for (auto &bound : param.get_type_param_bounds ())
663 visit (bound);
664 if (param.has_type ())
665 visit (param.get_type ());
668 void
669 DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem &item)
671 visit (item.get_lifetime ());
672 for (auto &bound : item.get_lifetime_bounds ())
673 visit (bound);
676 void
677 DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
679 for (auto &lifetime : item.get_for_lifetimes ())
680 visit (lifetime);
681 visit (item.get_type ());
682 for (auto &param : item.get_type_param_bounds ())
683 visit (param);
686 void
687 DefaultASTVisitor::visit (AST::Visibility &vis)
689 visit (vis.get_path ());
692 void
693 DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
696 void
697 DefaultASTVisitor::visit (AST::WhereClause &where)
699 for (auto &item : where.get_items ())
700 visit (item);
702 void
703 DefaultASTVisitor::visit (AST::FunctionParam &param)
705 visit_outer_attrs (param);
706 if (param.has_name ())
707 visit (param.get_pattern ());
709 visit (param.get_type ());
712 void
713 DefaultASTVisitor::visit (AST::SelfParam &param)
715 visit_outer_attrs (param);
717 if (param.has_lifetime ())
718 visit (param.get_lifetime ());
720 if (param.has_type ())
721 visit (param.get_type ());
724 void
725 DefaultASTVisitor::visit (AST::Module &module)
727 visit_outer_attrs (module);
728 visit (module.get_visibility ());
729 visit_inner_attrs (module);
730 for (auto &item : module.get_items ())
731 visit (item);
734 void
735 DefaultASTVisitor::visit (AST::ExternCrate &crate)
737 visit_outer_attrs (crate);
738 visit (crate.get_visibility ());
741 void
742 DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
744 visit (use_tree.get_path ());
747 void
748 DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
750 visit (use_tree.get_path ());
753 void
754 DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
756 visit (use_tree.get_path ());
759 void
760 DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
762 visit (use_decl.get_tree ());
765 void
766 DefaultASTVisitor::visit (AST::Function &function)
768 visit_outer_attrs (function);
769 visit (function.get_visibility ());
770 visit (function.get_qualifiers ());
771 for (auto &generic : function.get_generic_params ())
772 visit (generic);
773 if (function.has_self_param ())
774 visit (function.get_self_param ());
775 for (auto &param : function.get_function_params ())
776 visit (param);
777 if (function.has_return_type ())
778 visit (function.get_return_type ());
779 if (function.has_where_clause ())
780 visit (function.get_where_clause ());
781 if (function.has_body ())
782 visit (*function.get_definition ());
785 void
786 DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
788 visit_outer_attrs (type_alias);
789 visit (type_alias.get_visibility ());
790 for (auto &generic : type_alias.get_generic_params ())
791 visit (generic);
792 if (type_alias.has_where_clause ())
793 visit (type_alias.get_where_clause ());
794 visit (type_alias.get_type_aliased ());
797 void
798 DefaultASTVisitor::visit (AST::StructField &field)
800 visit_outer_attrs (field);
801 visit (field.get_visibility ());
802 visit (field.get_field_type ());
805 void
806 DefaultASTVisitor::visit (AST::StructStruct &struct_item)
808 visit_outer_attrs (struct_item);
809 visit (struct_item.get_visibility ());
810 for (auto &generic : struct_item.get_generic_params ())
811 visit (generic);
812 if (struct_item.has_where_clause ())
813 visit (struct_item.get_where_clause ());
814 for (auto &field : struct_item.get_fields ())
815 visit (field);
818 void
819 DefaultASTVisitor::visit (AST::TupleField &field)
821 visit_outer_attrs (field);
822 visit (field.get_visibility ());
823 visit (field.get_field_type ());
826 void
827 DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
829 visit_outer_attrs (tuple_struct);
830 visit (tuple_struct.get_visibility ());
831 for (auto &generic : tuple_struct.get_generic_params ())
832 visit (generic);
833 if (tuple_struct.has_where_clause ())
834 visit (tuple_struct.get_where_clause ());
835 for (auto &field : tuple_struct.get_fields ())
836 visit (field);
839 void
840 DefaultASTVisitor::visit (AST::EnumItem &item)
842 visit_outer_attrs (item);
843 visit (item.get_visibility ());
846 void
847 DefaultASTVisitor::visit (AST::EnumItemTuple &item)
849 visit (reinterpret_cast<EnumItem &> (item));
850 for (auto &field : item.get_tuple_fields ())
851 visit (field);
854 void
855 DefaultASTVisitor::visit (AST::EnumItemStruct &item)
857 visit (reinterpret_cast<EnumItem &> (item));
858 for (auto &field : item.get_struct_fields ())
859 visit (field);
862 void
863 DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
865 visit (reinterpret_cast<EnumItem &> (item));
866 visit (item.get_expr ());
869 void
870 DefaultASTVisitor::visit (AST::Enum &enum_item)
872 visit_outer_attrs (enum_item);
873 visit (enum_item.get_visibility ());
874 for (auto &generic : enum_item.get_generic_params ())
875 visit (generic);
876 if (enum_item.has_where_clause ())
877 visit (enum_item.get_where_clause ());
878 for (auto &item : enum_item.get_variants ())
879 visit (item);
882 void
883 DefaultASTVisitor::visit (AST::Union &union_item)
885 visit_outer_attrs (union_item);
886 visit (union_item.get_visibility ());
887 for (auto &generic : union_item.get_generic_params ())
888 visit (generic);
889 if (union_item.has_where_clause ())
890 visit (union_item.get_where_clause ());
891 for (auto &variant : union_item.get_variants ())
892 visit (variant);
895 void
896 DefaultASTVisitor::visit (AST::ConstantItem &const_item)
898 visit_outer_attrs (const_item);
899 visit (const_item.get_visibility ());
900 visit (const_item.get_type ());
901 if (const_item.has_expr ())
902 visit (const_item.get_expr ());
905 void
906 DefaultASTVisitor::visit (AST::StaticItem &static_item)
908 visit_outer_attrs (static_item);
909 visit (static_item.get_visibility ());
910 visit (static_item.get_type ());
911 visit (static_item.get_expr ());
914 void
915 DefaultASTVisitor::visit (AST::TraitItemConst &item)
917 visit_outer_attrs (item);
918 visit (item.get_type ());
919 if (item.has_expr ())
920 visit (item.get_expr ());
923 void
924 DefaultASTVisitor::visit (AST::TraitItemType &item)
926 visit_outer_attrs (item);
927 for (auto &bound : item.get_type_param_bounds ())
928 visit (bound);
931 void
932 DefaultASTVisitor::visit (AST::Trait &trait)
934 visit_outer_attrs (trait);
935 visit (trait.get_visibility ());
937 visit_inner_attrs (trait);
939 for (auto &generic : trait.get_generic_params ())
940 visit (generic);
942 if (trait.has_where_clause ())
943 visit (trait.get_where_clause ());
945 for (auto &bound : trait.get_type_param_bounds ())
946 visit (bound);
948 for (auto &item : trait.get_trait_items ())
949 visit (item);
952 void
953 DefaultASTVisitor::visit (AST::InherentImpl &impl)
955 visit_outer_attrs (impl);
956 visit (impl.get_visibility ());
958 for (auto &generic : impl.get_generic_params ())
959 visit (generic);
960 if (impl.has_where_clause ())
961 visit (impl.get_where_clause ());
962 visit (impl.get_type ());
963 visit_inner_attrs (impl);
964 for (auto &item : impl.get_impl_items ())
965 visit (item);
968 void
969 DefaultASTVisitor::visit (AST::TraitImpl &impl)
971 visit_outer_attrs (impl);
972 visit (impl.get_visibility ());
974 for (auto &generic : impl.get_generic_params ())
975 visit (generic);
976 if (impl.has_where_clause ())
977 visit (impl.get_where_clause ());
978 visit (impl.get_type ());
979 visit_inner_attrs (impl);
980 for (auto &item : impl.get_impl_items ())
981 visit (item);
984 void
985 DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
987 visit_outer_attrs (item);
988 visit (item.get_visibility ());
991 void
992 DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
994 visit_outer_attrs (item);
995 visit (item.get_visibility ());
996 visit (item.get_type ());
999 void
1000 DefaultASTVisitor::visit (AST::NamedFunctionParam &param)
1002 visit_outer_attrs (param);
1003 if (!param.is_variadic ())
1004 visit (param.get_type ());
1007 void
1008 DefaultASTVisitor::visit (AST::ExternBlock &block)
1010 visit_outer_attrs (block);
1011 visit (block.get_visibility ());
1012 visit_inner_attrs (block);
1013 for (auto &item : block.get_extern_items ())
1014 visit (item);
1017 void
1018 DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
1021 void
1022 DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
1024 for (auto &m : match.get_matches ())
1025 visit (m);
1028 void
1029 DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
1031 for (auto &m : matcher.get_matches ())
1032 visit (m);
1035 void
1036 DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
1038 visit (transcriber.get_token_tree ());
1041 void
1042 DefaultASTVisitor::visit (AST::MacroRule &rule)
1044 visit (rule.get_matcher ());
1045 visit (rule.get_transcriber ());
1047 void
1048 DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
1050 visit_outer_attrs (rules_def);
1051 for (auto &rule : rules_def.get_macro_rules ())
1052 visit (rule);
1055 void
1056 DefaultASTVisitor::visit (AST::MacroInvocData &data)
1058 visit (data.get_path ());
1059 visit (data.get_delim_tok_tree ());
1061 void
1062 DefaultASTVisitor::visit (AST::MacroInvocation &macro_invoc)
1064 visit_outer_attrs (macro_invoc);
1065 visit (macro_invoc.get_invoc_data ());
1068 void
1069 DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
1071 visit (meta_item.get_path ());
1074 void
1075 DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
1077 visit (meta_item.get_path ());
1078 for (auto &inner : meta_item.get_seq ())
1079 visit (inner);
1082 void
1083 DefaultASTVisitor::visit (AST::MetaWord &meta_item)
1086 void
1087 DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
1090 void
1091 DefaultASTVisitor::visit (AST::MetaListPaths &meta_item)
1093 for (auto &path : meta_item.get_paths ())
1094 visit (path);
1097 void
1098 DefaultASTVisitor::visit (AST::MetaListNameValueStr &meta_item)
1100 for (auto &str : meta_item.get_values ())
1101 visit (str);
1104 void
1105 DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
1108 void
1109 DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
1111 if (pattern.has_pattern_to_bind ())
1112 visit (pattern.get_pattern_to_bind ());
1115 void
1116 DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
1119 void
1120 DefaultASTVisitor::visit (AST::RestPattern &pattern)
1123 void
1124 DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
1127 void
1128 DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
1130 visit (bound.get_path ());
1133 void
1134 DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
1136 visit (bound.get_qualified_path ());
1139 void
1140 DefaultASTVisitor::visit (AST::RangePattern &pattern)
1142 if (pattern.get_has_lower_bound ())
1143 visit (pattern.get_lower_bound ());
1144 if (pattern.get_has_upper_bound ())
1145 visit (pattern.get_upper_bound ());
1148 void
1149 DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
1151 visit (pattern.get_referenced_pattern ());
1154 void
1155 DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
1157 visit_outer_attrs (field);
1158 visit (field.get_index_pattern ());
1161 void
1162 DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
1164 visit_outer_attrs (field);
1165 visit (field.get_ident_pattern ());
1168 void
1169 DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
1171 visit_outer_attrs (field);
1174 void
1175 DefaultASTVisitor::visit (AST::StructPatternElements &spe)
1177 for (auto &field : spe.get_struct_pattern_fields ())
1178 visit (field);
1179 for (auto &attribute : spe.get_etc_outer_attrs ())
1180 visit (attribute);
1183 void
1184 DefaultASTVisitor::visit (AST::StructPattern &pattern)
1186 visit (pattern.get_path ());
1187 visit (pattern.get_struct_pattern_elems ());
1190 void
1191 DefaultASTVisitor::visit (AST::TupleStructItemsNoRange &tuple_items)
1193 for (auto &pattern : tuple_items.get_patterns ())
1194 visit (pattern);
1197 void
1198 DefaultASTVisitor::visit (AST::TupleStructItemsRange &tuple_items)
1200 for (auto &lower : tuple_items.get_lower_patterns ())
1201 visit (lower);
1202 for (auto &upper : tuple_items.get_upper_patterns ())
1203 visit (upper);
1206 void
1207 DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
1209 visit (pattern.get_path ());
1210 visit (pattern.get_items ());
1213 void
1214 DefaultASTVisitor::visit (AST::TuplePatternItemsMultiple &tuple_items)
1216 for (auto &pattern : tuple_items.get_patterns ())
1217 visit (pattern);
1220 void
1221 DefaultASTVisitor::visit (AST::TuplePatternItemsRanged &tuple_items)
1223 for (auto &lower : tuple_items.get_lower_patterns ())
1224 visit (lower);
1225 for (auto &upper : tuple_items.get_upper_patterns ())
1226 visit (upper);
1229 void
1230 DefaultASTVisitor::visit (AST::TuplePattern &pattern)
1232 visit (pattern.get_items ());
1235 void
1236 DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
1238 visit (pattern.get_pattern_in_parens ());
1241 void
1242 DefaultASTVisitor::visit (AST::SlicePattern &pattern)
1244 for (auto &item : pattern.get_items ())
1245 visit (item);
1248 void
1249 DefaultASTVisitor::visit (AST::AltPattern &pattern)
1251 for (auto &alt : pattern.get_alts ())
1252 visit (alt);
1255 void
1256 DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
1259 void
1260 DefaultASTVisitor::visit (AST::LetStmt &stmt)
1262 visit_outer_attrs (stmt);
1263 visit (stmt.get_pattern ());
1264 if (stmt.has_type ())
1265 visit (stmt.get_type ());
1266 if (stmt.has_init_expr ())
1267 visit (stmt.get_init_expr ());
1270 void
1271 DefaultASTVisitor::visit (AST::ExprStmt &stmt)
1273 visit (stmt.get_expr ());
1276 void
1277 DefaultASTVisitor::visit (AST::TraitBound &bound)
1279 for (auto &lifetime : bound.get_for_lifetimes ())
1280 visit (lifetime);
1281 visit (bound.get_type_path ());
1284 void
1285 DefaultASTVisitor::visit (AST::ImplTraitType &type)
1287 for (auto &bound : type.get_type_param_bounds ())
1288 visit (bound);
1291 void
1292 DefaultASTVisitor::visit (AST::TraitObjectType &type)
1294 for (auto &bound : type.get_type_param_bounds ())
1295 visit (bound);
1298 void
1299 DefaultASTVisitor::visit (AST::ParenthesisedType &type)
1301 visit (type.get_type_in_parens ());
1304 void
1305 DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
1307 visit (type.get_trait_bound ());
1310 void
1311 DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
1313 visit (type.get_trait_bound ());
1316 void
1317 DefaultASTVisitor::visit (AST::TupleType &type)
1319 for (auto &elem : type.get_elems ())
1320 visit (elem);
1323 void
1324 DefaultASTVisitor::visit (AST::NeverType &type)
1327 void
1328 DefaultASTVisitor::visit (AST::RawPointerType &type)
1330 visit (type.get_type_pointed_to ());
1333 void
1334 DefaultASTVisitor::visit (AST::ReferenceType &type)
1336 visit (type.get_lifetime ());
1337 visit (type.get_base_type ());
1340 void
1341 DefaultASTVisitor::visit (AST::ArrayType &type)
1343 visit (type.get_elem_type ());
1344 visit (type.get_size_expr ());
1347 void
1348 DefaultASTVisitor::visit (AST::SliceType &type)
1350 visit (type.get_elem_type ());
1353 void
1354 DefaultASTVisitor::visit (AST::InferredType &type)
1357 void
1358 DefaultASTVisitor::visit (AST::MaybeNamedParam &param)
1360 visit_outer_attrs (param);
1361 visit (param.get_type ());
1364 void
1365 DefaultASTVisitor::visit (AST::BareFunctionType &type)
1367 for (auto &lifetime : type.get_for_lifetimes ())
1368 visit (lifetime);
1369 visit (type.get_function_qualifiers ());
1370 for (auto &param : type.get_function_params ())
1371 visit (param);
1372 if (type.is_variadic ())
1373 for (auto attr : type.get_variadic_attr ())
1374 visit (attr);
1375 if (type.has_return_type ())
1376 visit (type.get_return_type ());
1379 void
1380 DefaultASTVisitor::visit (AST::FormatArgs &)
1382 // FIXME: Do we have anything to do? any subnodes to visit? Probably, right?
1385 void
1386 DefaultASTVisitor::visit (AST::VariadicParam &param)
1388 if (param.has_pattern ())
1389 visit (param.get_pattern ());
1392 void
1393 ContextualASTVisitor::visit (AST::Crate &crate)
1395 push_context (Context::CRATE);
1396 DefaultASTVisitor::visit (crate);
1397 pop_context ();
1400 void
1401 ContextualASTVisitor::visit (AST::InherentImpl &impl)
1403 push_context (Context::INHERENT_IMPL);
1404 DefaultASTVisitor::visit (impl);
1405 pop_context ();
1408 void
1409 ContextualASTVisitor::visit (AST::TraitImpl &impl)
1411 push_context (Context::TRAIT_IMPL);
1412 DefaultASTVisitor::visit (impl);
1413 pop_context ();
1416 void
1417 ContextualASTVisitor::visit (AST::Trait &trait)
1419 push_context (Context::TRAIT);
1420 DefaultASTVisitor::visit (trait);
1421 pop_context ();
1424 } // namespace AST
1425 } // namespace Rust