LCOV - code coverage report
Current view: top level - gcc/rust/ast - rust-ast-visitor.cc (source / functions) Coverage Total Hit
Test: gcc.info Lines: 90.9 % 929 844
Test Date: 2026-02-28 14:20:25 Functions: 90.5 % 189 171
Legend: Lines:     hit not hit

            Line data    Source code
       1              : // Copyright (C) 2020-2026 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        58207 : DefaultASTVisitor::visit (AST::Crate &crate)
      36              : {
      37        58207 :   visit_inner_attrs (crate);
      38       309222 :   for (auto &item : crate.items)
      39       251016 :     visit (item);
      40        58206 : }
      41              : 
      42              : void
      43       344582 : DefaultASTVisitor::visit (AST::Token &tok)
      44       344582 : {}
      45              : 
      46              : void
      47        61616 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
      48              : {
      49       463467 :   for (auto &token : delim_tok_tree.get_token_trees ())
      50       401851 :     visit (token);
      51        61616 : }
      52              : 
      53              : void
      54         8036 : DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
      55              : {
      56        16848 :   for (auto &item : input.get_items ())
      57         8812 :     visit (item);
      58         8036 : }
      59              : 
      60              : void
      61       411886 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
      62              : {
      63       411886 :   visit_outer_attrs (ident_expr);
      64       411886 : }
      65              : 
      66              : void
      67       169649 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
      68       169649 : {}
      69              : 
      70              : void
      71         3243 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
      72              : {
      73         3243 :   visit_outer_attrs (lifetime_param);
      74         3243 :   visit (lifetime_param.get_lifetime ());
      75         3255 :   for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
      76           12 :     visit (lifetime_bound);
      77         3243 : }
      78              : 
      79              : void
      80         1155 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
      81              : {
      82         1155 :   visit_outer_attrs (const_param);
      83         1155 :   if (const_param.has_type ())
      84         1155 :     visit (const_param.get_type ());
      85         1155 :   if (const_param.has_default_value ())
      86          215 :     visit (const_param.get_default_value_unchecked ());
      87         1155 : }
      88              : 
      89              : void
      90       238617 : DefaultASTVisitor::visit (AST::PathInExpression &path)
      91              : {
      92       238617 :   visit_outer_attrs (path);
      93              : 
      94       238617 :   if (!path.is_lang_item ())
      95       568706 :     for (auto &segment : path.get_segments ())
      96       331087 :       visit (segment);
      97       238617 : }
      98              : 
      99              : void
     100      1000763 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
     101      1000763 : {}
     102              : 
     103              : void
     104          778 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
     105              : {
     106          778 :   visit (binding.get_type ());
     107          778 : }
     108              : 
     109              : void
     110        29548 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
     111              : {
     112        29548 :   if (segment.has_generic_args ())
     113        29538 :     visit (segment.get_generic_args ());
     114        29548 : }
     115              : 
     116              : void
     117          349 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
     118              : {
     119          720 :   for (auto &input : tpf.get_params ())
     120          371 :     visit (input);
     121          349 :   if (tpf.has_return_type ())
     122          327 :     visit (tpf.get_return_type ());
     123          349 : }
     124              : 
     125              : void
     126       423008 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
     127       423008 : {}
     128              : 
     129              : void
     130          349 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
     131              : {
     132          349 :   visit (segment.get_type_path_function ());
     133          349 :   visit (segment.get_ident_segment ());
     134          349 : }
     135              : 
     136              : void
     137        34869 : DefaultASTVisitor::visit (AST::GenericArgs &args)
     138              : {
     139        35231 :   for (auto &lifetime : args.get_lifetime_args ())
     140          362 :     visit (lifetime);
     141              : 
     142        71324 :   for (auto &generic : args.get_generic_args ())
     143        36455 :     visit (generic);
     144              : 
     145        35575 :   for (auto &binding : args.get_binding_args ())
     146          706 :     visit (binding);
     147        34869 : }
     148              : 
     149              : void
     150       379936 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
     151              : {
     152       379936 :   visit (segment.get_ident_segment ());
     153       379936 :   if (segment.has_generic_args ())
     154         9003 :     visit (segment.get_generic_args ());
     155       379936 : }
     156              : void
     157       836271 : DefaultASTVisitor::visit (AST::TypePath &path)
     158              : {
     159      1699711 :   for (auto &segment : path.get_segments ())
     160       863440 :     visit (segment);
     161       836271 : }
     162              : 
     163              : void
     164         1601 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
     165              : {
     166         1601 :   visit_outer_attrs (path);
     167         1601 :   visit (path.get_qualified_path_type ());
     168              : 
     169         3202 :   for (auto &segment : path.get_segments ())
     170         1601 :     visit (segment);
     171         1601 : }
     172              : 
     173              : void
     174         5928 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
     175              : {
     176         5928 :   visit (path.get_type ());
     177         5928 :   if (path.has_as_clause ())
     178         5374 :     visit (path.get_as_type_path ());
     179         5928 : }
     180              : 
     181              : void
     182         4327 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
     183              : {
     184         4327 :   visit (path.get_qualified_path_type ());
     185         4327 :   visit (path.get_associated_segment ());
     186              : 
     187         4327 :   for (auto &segment : path.get_segments ())
     188            0 :     visit (segment);
     189         4327 : }
     190              : 
     191              : void
     192      1222824 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
     193              : {
     194      1222824 :   visit_outer_attrs (expr);
     195      1222824 : }
     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        18517 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
     217        18517 : {}
     218              : 
     219              : void
     220         9015 : DefaultASTVisitor::visit (AST::SimplePath &path)
     221              : {
     222        25830 :   for (auto &segment : path.get_segments ())
     223        16815 :     visit (segment);
     224         9015 : }
     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        33977 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
     235              : {
     236        33977 :   visit_outer_attrs (expr);
     237        33977 :   visit (expr.get_borrowed_expr ());
     238        33977 : }
     239              : 
     240              : void
     241        39497 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
     242              : {
     243        39497 :   visit_outer_attrs (expr);
     244        39497 :   visit (expr.get_dereferenced_expr ());
     245        39497 : }
     246              : 
     247              : void
     248            8 : DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
     249              : {
     250            8 :   visit_outer_attrs (expr);
     251            8 :   visit (expr.get_propagating_expr ());
     252            8 : }
     253              : 
     254              : void
     255         7535 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
     256              : {
     257         7535 :   visit_outer_attrs (expr);
     258         7535 :   visit (expr.get_negated_expr ());
     259         7535 : }
     260              : 
     261              : void
     262      1624965 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
     263              : {
     264      1624965 :   visit_outer_attrs (expr);
     265      1624965 :   visit (expr.get_left_expr ());
     266      1624965 :   visit (expr.get_right_expr ());
     267      1624965 : }
     268              : 
     269              : void
     270        40242 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
     271              : {
     272        40242 :   visit_outer_attrs (expr);
     273        40242 :   visit (expr.get_left_expr ());
     274        40242 :   visit (expr.get_right_expr ());
     275        40242 : }
     276              : 
     277              : void
     278         5060 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
     279              : {
     280         5060 :   visit_outer_attrs (expr);
     281         5060 :   visit (expr.get_left_expr ());
     282         5060 :   visit (expr.get_right_expr ());
     283         5060 : }
     284              : 
     285              : void
     286       101380 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
     287              : {
     288       101380 :   visit_outer_attrs (expr);
     289       101380 :   visit (expr.get_casted_expr ());
     290       101380 :   visit (expr.get_type_to_cast_to ());
     291       101380 : }
     292              : 
     293              : void
     294        37389 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
     295              : {
     296        37389 :   visit_outer_attrs (expr);
     297        37389 :   visit (expr.get_left_expr ());
     298        37389 :   visit (expr.get_right_expr ());
     299        37389 : }
     300              : 
     301              : void
     302        12254 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
     303              : {
     304        12254 :   visit_outer_attrs (expr);
     305        12254 :   visit (expr.get_left_expr ());
     306        12254 :   visit (expr.get_right_expr ());
     307        12254 : }
     308              : 
     309              : void
     310         5199 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
     311              : {
     312         5199 :   visit_outer_attrs (expr);
     313         5199 :   visit_inner_attrs (expr);
     314         5199 :   visit (expr.get_expr_in_parens ());
     315         5199 : }
     316              : 
     317              : void
     318         2690 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
     319              : {
     320        15232 :   for (auto &value : elems.get_values ())
     321        12542 :     visit (value);
     322         2690 : }
     323              : 
     324              : void
     325         1573 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
     326              : {
     327         1573 :   visit (elems.get_elem_to_copy ());
     328         1573 :   visit (elems.get_num_copies ());
     329         1573 : }
     330              : 
     331              : void
     332         5411 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
     333              : {
     334         5411 :   visit_outer_attrs (expr);
     335         5411 :   visit_inner_attrs (expr);
     336         5411 :   visit (expr.get_array_elems ());
     337         5411 : }
     338              : 
     339              : void
     340         3462 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
     341              : {
     342         3462 :   visit_outer_attrs (expr);
     343         3462 :   visit (expr.get_array_expr ());
     344         3462 :   visit (expr.get_index_expr ());
     345         3462 : }
     346              : 
     347              : void
     348         5307 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
     349              : {
     350         5307 :   visit_outer_attrs (expr);
     351         5307 :   visit_inner_attrs (expr);
     352        14566 :   for (auto &elem : expr.get_tuple_elems ())
     353         9259 :     visit (elem);
     354         5307 : }
     355              : 
     356              : void
     357        13795 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
     358              : {
     359        13795 :   visit_outer_attrs (expr);
     360        13795 :   visit (expr.get_tuple_expr ());
     361        13795 : }
     362              : 
     363              : void
     364          648 : DefaultASTVisitor::visit (AST::StructExprStruct &expr)
     365              : {
     366          648 :   visit_outer_attrs (expr);
     367          648 :   visit_inner_attrs (expr);
     368          648 :   visit (expr.get_struct_name ());
     369          648 : }
     370              : 
     371              : void
     372         2393 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
     373         2393 : {}
     374              : 
     375              : void
     376        28467 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
     377              : {
     378        28467 :   visit (field.get_value ());
     379        28467 : }
     380              : 
     381              : void
     382          572 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
     383              : {
     384          572 :   visit (field.get_value ());
     385          572 : }
     386              : 
     387              : void
     388          819 : DefaultASTVisitor::visit (AST::StructBase &base)
     389              : {
     390          819 :   visit (base.get_base_struct ());
     391          819 : }
     392              : 
     393              : void
     394        16783 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
     395              : {
     396        16783 :   visit_outer_attrs (expr);
     397        16783 :   visit_inner_attrs (expr);
     398        16783 :   visit (expr.get_struct_name ());
     399        16783 :   if (expr.has_struct_base ())
     400          756 :     visit (expr.get_struct_base ());
     401        46145 :   for (auto &field : expr.get_fields ())
     402        29362 :     visit (field);
     403        16783 : }
     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       175588 : DefaultASTVisitor::visit (AST::CallExpr &expr)
     416              : {
     417       175588 :   visit_outer_attrs (expr);
     418       175588 :   visit (expr.get_function_expr ());
     419       387945 :   for (auto &param : expr.get_params ())
     420       212357 :     visit (param);
     421       175588 : }
     422              : 
     423              : void
     424        47248 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
     425              : {
     426        47248 :   visit_outer_attrs (expr);
     427        47248 :   visit (expr.get_receiver_expr ());
     428        47248 :   visit (expr.get_method_name ());
     429        80188 :   for (auto &param : expr.get_params ())
     430        32940 :     visit (param);
     431        47248 : }
     432              : 
     433              : void
     434        80465 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
     435              : {
     436        80465 :   visit_outer_attrs (expr);
     437        80465 :   visit (expr.get_receiver_expr ());
     438        80465 : }
     439              : 
     440              : void
     441          242 : DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
     442              : {
     443          242 :   visit_outer_attrs (expr);
     444          422 :   for (auto &param : expr.get_params ())
     445          180 :     visit (param);
     446          242 :   visit (expr.get_definition_expr ());
     447          242 : }
     448              : 
     449              : void
     450       317941 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
     451              : {
     452       317941 :   visit_outer_attrs (expr);
     453       317941 :   visit_inner_attrs (expr);
     454              : 
     455       317941 :   if (expr.has_label ())
     456            0 :     visit (expr.get_label ());
     457              : 
     458       612677 :   for (auto &stmt : expr.get_statements ())
     459       294737 :     visit (stmt);
     460              : 
     461       317940 :   if (expr.has_tail_expr ())
     462       238159 :     visit (expr.get_tail_expr ());
     463       317940 : }
     464              : 
     465              : void
     466          173 : DefaultASTVisitor::visit (AST::ConstBlock &expr)
     467              : {
     468          173 :   visit (expr.get_const_expr ());
     469          173 : }
     470              : 
     471              : void
     472        11608 : DefaultASTVisitor::visit (AST::AnonConst &expr)
     473              : {
     474        11608 :   if (!expr.is_deferred ())
     475        11451 :     visit (expr.get_inner_expr ());
     476        11608 : }
     477              : 
     478              : void
     479          210 : DefaultASTVisitor::visit (AST::ClosureExprInnerTyped &expr)
     480              : {
     481          210 :   visit_outer_attrs (expr);
     482          469 :   for (auto &param : expr.get_params ())
     483          259 :     visit (param);
     484          210 :   visit (expr.get_return_type ());
     485          210 :   visit (expr.get_definition_expr ());
     486          210 : }
     487              : 
     488              : void
     489          817 : DefaultASTVisitor::visit (AST::ClosureParam &param)
     490              : {
     491          817 :   visit_outer_attrs (param);
     492          817 :   visit (param.get_pattern ());
     493          817 :   if (param.has_type_given ())
     494          754 :     visit (param.get_type ());
     495          817 : }
     496              : 
     497              : void
     498          153 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
     499              : {
     500          153 :   visit_outer_attrs (expr);
     501          153 :   if (expr.has_label ())
     502           27 :     visit (expr.get_label_unchecked ());
     503          153 : }
     504              : 
     505              : void
     506         1443 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
     507              : {
     508         1443 :   visit_outer_attrs (expr);
     509         1443 :   if (expr.has_label ())
     510          307 :     visit (expr.get_label_unchecked ());
     511              : 
     512         1443 :   if (expr.has_break_expr ())
     513          446 :     visit (expr.get_break_expr_unchecked ());
     514         1442 : }
     515              : 
     516              : void
     517         1011 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
     518              : {
     519         1011 :   visit (expr.get_from_expr ());
     520         1011 :   visit (expr.get_to_expr ());
     521         1011 : }
     522              : 
     523              : void
     524           91 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
     525              : {
     526           91 :   visit (expr.get_from_expr ());
     527           91 : }
     528              : 
     529              : void
     530           91 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
     531              : {
     532           91 :   visit (expr.get_to_expr ());
     533           91 : }
     534              : 
     535              : void
     536            0 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
     537            0 : {}
     538              : 
     539              : void
     540           91 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
     541              : {
     542           91 :   visit (expr.get_from_expr ());
     543           91 :   visit (expr.get_to_expr ());
     544           91 : }
     545              : 
     546              : void
     547            0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
     548              : {
     549            0 :   visit (expr.get_to_expr ());
     550            0 : }
     551              : 
     552              : void
     553         7992 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
     554              : {
     555         7992 :   visit_outer_attrs (expr);
     556         7992 :   if (expr.has_returned_expr ())
     557         7331 :     visit (expr.get_returned_expr ());
     558         7992 : }
     559              : 
     560              : void
     561            8 : DefaultASTVisitor::visit (AST::TryExpr &expr)
     562              : {
     563            8 :   visit_outer_attrs (expr);
     564            8 :   visit (expr.get_block_expr ());
     565            8 : }
     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        51257 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
     576              : {
     577        51257 :   visit_outer_attrs (expr);
     578        51257 :   visit (expr.get_block_expr ());
     579        51257 : }
     580              : 
     581              : void
     582          629 : DefaultASTVisitor::visit (AST::LoopLabel &label)
     583              : {
     584          629 :   visit (label.get_lifetime ());
     585          629 : }
     586              : 
     587              : void
     588         1472 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
     589              : {
     590         1472 :   visit_outer_attrs (expr);
     591         1472 :   if (expr.has_loop_label ())
     592          424 :     visit (expr.get_loop_label ());
     593         1472 :   visit (expr.get_loop_block ());
     594         1472 : }
     595              : 
     596              : void
     597         1300 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
     598              : {
     599         1300 :   visit_outer_attrs (expr);
     600         1300 :   if (expr.has_loop_label ())
     601           24 :     visit (expr.get_loop_label ());
     602         1300 :   visit (expr.get_predicate_expr ());
     603         1300 :   visit (expr.get_loop_block ());
     604         1300 : }
     605              : 
     606              : void
     607           12 : DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
     608              : {
     609           12 :   visit_outer_attrs (expr);
     610           12 :   visit (expr.get_pattern ());
     611              : 
     612           12 :   if (expr.has_loop_label ())
     613            0 :     visit (expr.get_loop_label ());
     614              : 
     615           12 :   visit (expr.get_scrutinee_expr ());
     616           12 :   visit (expr.get_loop_block ());
     617           12 : }
     618              : 
     619              : void
     620          248 : DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
     621              : {
     622          248 :   visit_outer_attrs (expr);
     623          248 :   visit (expr.get_pattern ());
     624          248 :   visit (expr.get_iterator_expr ());
     625          248 :   if (expr.has_loop_label ())
     626            0 :     visit (expr.get_loop_label ());
     627          248 :   visit (expr.get_loop_block ());
     628          248 : }
     629              : 
     630              : void
     631        25001 : DefaultASTVisitor::visit (AST::IfExpr &expr)
     632              : {
     633        25001 :   visit_outer_attrs (expr);
     634        25001 :   visit (expr.get_condition_expr ());
     635        25001 :   visit (expr.get_if_block ());
     636        25001 : }
     637              : 
     638              : void
     639        18308 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
     640              : {
     641        18308 :   visit (reinterpret_cast<AST::IfExpr &> (expr));
     642        18308 :   visit (expr.get_else_block ());
     643        18308 : }
     644              : 
     645              : void
     646          192 : DefaultASTVisitor::visit (AST::IfLetExpr &expr)
     647              : {
     648          192 :   visit_outer_attrs (expr);
     649          192 :   visit (expr.get_pattern ());
     650          192 :   visit (expr.get_value_expr ());
     651          192 :   visit (expr.get_if_block ());
     652          192 : }
     653              : 
     654              : void
     655           66 : DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
     656              : {
     657           66 :   visit (reinterpret_cast<AST::IfLetExpr &> (expr));
     658           66 :   visit (expr.get_else_block ());
     659           66 : }
     660              : 
     661              : void
     662        31310 : DefaultASTVisitor::visit (AST::MatchArm &arm)
     663              : {
     664        31310 :   visit_outer_attrs (arm);
     665        31310 :   visit (arm.get_pattern ());
     666        31310 :   if (arm.has_match_arm_guard ())
     667           10 :     visit (arm.get_guard_expr ());
     668        31310 : }
     669              : 
     670              : void
     671        33802 : DefaultASTVisitor::visit (AST::MatchCase &arm)
     672              : {
     673        33802 :   visit (arm.get_arm ());
     674        33802 :   visit (arm.get_expr ());
     675        33802 : }
     676              : 
     677              : void
     678        14579 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
     679              : {
     680        14579 :   visit_outer_attrs (expr);
     681        14579 :   visit_inner_attrs (expr);
     682        14579 :   visit (expr.get_scrutinee_expr ());
     683        48381 :   for (auto &arm : expr.get_match_cases ())
     684        33802 :     visit (arm);
     685        14579 : }
     686              : 
     687              : void
     688            0 : DefaultASTVisitor::visit (AST::AwaitExpr &expr)
     689              : {
     690            0 :   visit_outer_attrs (expr);
     691            0 :   visit (expr.get_awaited_expr ());
     692            0 : }
     693              : 
     694              : void
     695            0 : DefaultASTVisitor::visit (AST::AsyncBlockExpr &expr)
     696              : {
     697            0 :   visit_outer_attrs (expr);
     698            0 :   visit (expr.get_block_expr ());
     699            0 : }
     700              : 
     701              : void
     702          289 : DefaultASTVisitor::visit (AST::InlineAsm &expr)
     703              : {
     704          289 :   visit_outer_attrs (expr);
     705          289 :   using RegisterType = AST::InlineAsmOperand::RegisterType;
     706          604 :   for (auto &operand : expr.get_operands ())
     707              :     {
     708          315 :       switch (operand.get_register_type ())
     709              :         {
     710          110 :         case RegisterType::In:
     711          110 :           {
     712          110 :             visit (operand.get_in ().expr);
     713          110 :             break;
     714              :           }
     715          183 :         case RegisterType::Out:
     716          183 :           {
     717          183 :             visit (operand.get_out ().expr);
     718          183 :             break;
     719              :           }
     720            0 :         case RegisterType::InOut:
     721            0 :           {
     722            0 :             visit (operand.get_in_out ().expr);
     723            0 :             break;
     724              :           }
     725           22 :         case RegisterType::SplitInOut:
     726           22 :           {
     727           22 :             auto split = operand.get_split_in_out ();
     728           22 :             visit (split.in_expr);
     729           22 :             visit (split.out_expr);
     730           22 :             break;
     731           22 :           }
     732            0 :         case RegisterType::Const:
     733            0 :           {
     734            0 :             visit (operand.get_const ().anon_const.get_inner_expr ());
     735            0 :             break;
     736              :           }
     737            0 :         case RegisterType::Sym:
     738            0 :           {
     739            0 :             visit (operand.get_sym ().expr);
     740            0 :             break;
     741              :           }
     742            0 :         case RegisterType::Label:
     743            0 :           {
     744            0 :             visit (operand.get_label ().expr);
     745            0 :             break;
     746              :           }
     747              :         }
     748          289 :     }
     749          289 : }
     750              : 
     751              : void
     752           22 : DefaultASTVisitor::visit (AST::LlvmInlineAsm &expr)
     753              : {
     754           22 :   for (auto &output : expr.get_outputs ())
     755            0 :     visit (output.expr);
     756              : 
     757           44 :   for (auto &input : expr.get_inputs ())
     758           22 :     visit (input.expr);
     759           22 : }
     760              : 
     761              : void
     762       106208 : DefaultASTVisitor::visit (AST::TypeParam &param)
     763              : {
     764       106208 :   visit_outer_attrs (param);
     765       116995 :   for (auto &bound : param.get_type_param_bounds ())
     766        10787 :     visit (bound);
     767       106208 :   if (param.has_type ())
     768         4940 :     visit (param.get_type ());
     769       106208 : }
     770              : 
     771              : void
     772           22 : DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem &item)
     773              : {
     774           22 :   visit (item.get_lifetime ());
     775           44 :   for (auto &bound : item.get_lifetime_bounds ())
     776           22 :     visit (bound);
     777           22 : }
     778              : 
     779              : void
     780         4495 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
     781              : {
     782         4594 :   for (auto &lifetime : item.get_for_lifetimes ())
     783           99 :     visit (lifetime);
     784         4495 :   visit (item.get_type ());
     785         8990 :   for (auto &param : item.get_type_param_bounds ())
     786         4495 :     visit (param);
     787         4495 : }
     788              : 
     789              : void
     790       506661 : DefaultASTVisitor::visit (AST::Visibility &vis)
     791              : {
     792       506661 :   if (vis.has_path ())
     793          862 :     visit (vis.get_path ());
     794       506661 : }
     795              : 
     796              : void
     797       265610 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
     798       265610 : {}
     799              : 
     800              : void
     801         4434 : DefaultASTVisitor::visit (AST::WhereClause &where)
     802              : {
     803         9036 :   for (auto &item : where.get_items ())
     804         4602 :     visit (item);
     805         4434 : }
     806              : void
     807       151254 : DefaultASTVisitor::visit (AST::FunctionParam &param)
     808              : {
     809       151254 :   visit_outer_attrs (param);
     810       151254 :   if (param.has_name ())
     811       151254 :     visit (param.get_pattern ());
     812              : 
     813       151254 :   visit (param.get_type ());
     814       151254 : }
     815              : 
     816              : void
     817       119440 : DefaultASTVisitor::visit (AST::SelfParam &param)
     818              : {
     819       119440 :   visit_outer_attrs (param);
     820              : 
     821       119440 :   if (param.has_lifetime ())
     822        68280 :     visit (param.get_lifetime ());
     823              : 
     824       119440 :   if (param.has_type ())
     825           13 :     visit (param.get_type ());
     826       119440 : }
     827              : 
     828              : void
     829        15471 : DefaultASTVisitor::visit (AST::Module &module)
     830              : {
     831        15471 :   visit_outer_attrs (module);
     832        15471 :   visit (module.get_visibility ());
     833        15471 :   visit_inner_attrs (module);
     834        68181 :   for (auto &item : module.get_items ())
     835        52710 :     visit (item);
     836        15471 : }
     837              : 
     838              : void
     839          105 : DefaultASTVisitor::visit (AST::ExternCrate &crate)
     840              : {
     841          105 :   visit_outer_attrs (crate);
     842          105 :   visit (crate.get_visibility ());
     843          105 : }
     844              : 
     845              : void
     846           55 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
     847              : {
     848           55 :   visit (use_tree.get_path ());
     849           55 : }
     850              : 
     851              : void
     852         1229 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
     853              : {
     854         1229 :   visit (use_tree.get_path ());
     855         1229 : }
     856              : 
     857              : void
     858         3904 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
     859              : {
     860         3904 :   visit (use_tree.get_path ());
     861         3904 : }
     862              : 
     863              : void
     864         5198 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
     865              : {
     866         5198 :   visit (use_decl.get_visibility ());
     867         5198 :   visit (use_decl.get_tree ());
     868         5198 : }
     869              : 
     870              : void
     871       228312 : DefaultASTVisitor::visit_function_params (AST::Function &function)
     872              : {
     873       488924 :   for (auto &param : function.get_function_params ())
     874       260612 :     visit (param);
     875       228312 : }
     876              : 
     877              : void
     878       246551 : DefaultASTVisitor::visit (AST::Function &function)
     879              : {
     880       246551 :   visit_outer_attrs (function);
     881       246551 :   visit (function.get_visibility ());
     882       246551 :   visit (function.get_qualifiers ());
     883       268317 :   for (auto &generic : function.get_generic_params ())
     884        21766 :     visit (generic);
     885              : 
     886       246551 :   visit_function_params (function);
     887              : 
     888       246551 :   if (function.has_return_type ())
     889       181546 :     visit (function.get_return_type ());
     890       246551 :   if (function.has_where_clause ())
     891         3070 :     visit (function.get_where_clause ());
     892       246551 :   if (function.has_body ())
     893       193504 :     visit (*function.get_definition ());
     894       246550 : }
     895              : 
     896              : void
     897        20320 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
     898              : {
     899        20320 :   visit_outer_attrs (type_alias);
     900        20320 :   visit (type_alias.get_visibility ());
     901        20552 :   for (auto &generic : type_alias.get_generic_params ())
     902          232 :     visit (generic);
     903        20320 :   if (type_alias.has_where_clause ())
     904            0 :     visit (type_alias.get_where_clause ());
     905        20320 :   visit (type_alias.get_type_aliased ());
     906        20320 : }
     907              : 
     908              : void
     909        28803 : DefaultASTVisitor::visit (AST::StructField &field)
     910              : {
     911        28803 :   visit_outer_attrs (field);
     912        28803 :   visit (field.get_visibility ());
     913        28803 :   visit (field.get_field_type ());
     914        28803 : }
     915              : 
     916              : void
     917        20371 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
     918              : {
     919        20371 :   visit_outer_attrs (struct_item);
     920        20371 :   visit (struct_item.get_visibility ());
     921        27095 :   for (auto &generic : struct_item.get_generic_params ())
     922         6724 :     visit (generic);
     923        20371 :   if (struct_item.has_where_clause ())
     924           24 :     visit (struct_item.get_where_clause ());
     925        43809 :   for (auto &field : struct_item.get_fields ())
     926        23438 :     visit (field);
     927        20371 : }
     928              : 
     929              : void
     930        27042 : DefaultASTVisitor::visit (AST::TupleField &field)
     931              : {
     932        27042 :   visit_outer_attrs (field);
     933        27042 :   visit (field.get_visibility ());
     934        27042 :   visit (field.get_field_type ());
     935        27042 : }
     936              : 
     937              : void
     938        12324 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
     939              : {
     940        12324 :   visit_outer_attrs (tuple_struct);
     941        12324 :   visit (tuple_struct.get_visibility ());
     942        16766 :   for (auto &generic : tuple_struct.get_generic_params ())
     943         4442 :     visit (generic);
     944        12324 :   if (tuple_struct.has_where_clause ())
     945            0 :     visit (tuple_struct.get_where_clause ());
     946        34209 :   for (auto &field : tuple_struct.get_fields ())
     947        21885 :     visit (field);
     948        12324 : }
     949              : 
     950              : void
     951        15008 : DefaultASTVisitor::visit (AST::EnumItem &item)
     952              : {
     953        15008 :   visit_outer_attrs (item);
     954        15008 :   visit (item.get_visibility ());
     955        15008 : }
     956              : 
     957              : void
     958         4859 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
     959              : {
     960         4859 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     961        10016 :   for (auto &field : item.get_tuple_fields ())
     962         5157 :     visit (field);
     963         4859 : }
     964              : 
     965              : void
     966          983 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
     967              : {
     968          983 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     969         2579 :   for (auto &field : item.get_struct_fields ())
     970         1596 :     visit (field);
     971          983 : }
     972              : 
     973              : void
     974         4393 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
     975              : {
     976         4393 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     977         4393 :   visit (item.get_expr ());
     978         4393 : }
     979              : 
     980              : void
     981         7166 : DefaultASTVisitor::visit (AST::Enum &enum_item)
     982              : {
     983         7166 :   visit_outer_attrs (enum_item);
     984         7166 :   visit (enum_item.get_visibility ());
     985        11051 :   for (auto &generic : enum_item.get_generic_params ())
     986         3885 :     visit (generic);
     987         7166 :   if (enum_item.has_where_clause ())
     988            0 :     visit (enum_item.get_where_clause ());
     989        23886 :   for (auto &item : enum_item.get_variants ())
     990        16720 :     visit (item);
     991         7166 : }
     992              : 
     993              : void
     994         1297 : DefaultASTVisitor::visit (AST::Union &union_item)
     995              : {
     996         1297 :   visit_outer_attrs (union_item);
     997         1297 :   visit (union_item.get_visibility ());
     998         2218 :   for (auto &generic : union_item.get_generic_params ())
     999          921 :     visit (generic);
    1000         1297 :   if (union_item.has_where_clause ())
    1001            0 :     visit (union_item.get_where_clause ());
    1002         5066 :   for (auto &variant : union_item.get_variants ())
    1003         3769 :     visit (variant);
    1004         1297 : }
    1005              : 
    1006              : void
    1007         7226 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
    1008              : {
    1009         7226 :   visit_outer_attrs (const_item);
    1010         7226 :   visit (const_item.get_visibility ());
    1011         7226 :   visit (const_item.get_type ());
    1012         7226 :   if (const_item.has_expr ())
    1013         6760 :     visit (const_item.get_expr ());
    1014         7226 : }
    1015              : 
    1016              : void
    1017          722 : DefaultASTVisitor::visit (AST::StaticItem &static_item)
    1018              : {
    1019          722 :   visit_outer_attrs (static_item);
    1020          722 :   visit (static_item.get_visibility ());
    1021          722 :   visit (static_item.get_type ());
    1022          722 :   visit (static_item.get_expr ());
    1023          722 : }
    1024              : 
    1025              : void
    1026        11825 : DefaultASTVisitor::visit (AST::TraitItemType &item)
    1027              : {
    1028        11825 :   visit_outer_attrs (item);
    1029        11951 :   for (auto &generic : item.get_generic_params ())
    1030          126 :     visit (generic);
    1031        12636 :   for (auto &bound : item.get_type_param_bounds ())
    1032          811 :     visit (bound);
    1033        11825 : }
    1034              : 
    1035              : void
    1036        23597 : DefaultASTVisitor::visit (AST::Trait &trait)
    1037              : {
    1038        23597 :   visit_outer_attrs (trait);
    1039        23597 :   visit (trait.get_visibility ());
    1040              : 
    1041        23597 :   visit_inner_attrs (trait);
    1042              : 
    1043        23597 :   visit (trait.get_implicit_self ());
    1044              : 
    1045        27874 :   for (auto &generic : trait.get_generic_params ())
    1046         4277 :     visit (generic);
    1047              : 
    1048        23597 :   if (trait.has_where_clause ())
    1049           49 :     visit (trait.get_where_clause ());
    1050              : 
    1051        27707 :   for (auto &bound : trait.get_type_param_bounds ())
    1052         4110 :     visit (bound);
    1053              : 
    1054        45421 :   for (auto &item : trait.get_trait_items ())
    1055        21824 :     visit (item);
    1056        23597 : }
    1057              : 
    1058              : void
    1059         6827 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
    1060              : {
    1061         6827 :   visit_outer_attrs (impl);
    1062         6827 :   visit (impl.get_visibility ());
    1063              : 
    1064         9210 :   for (auto &generic : impl.get_generic_params ())
    1065         2383 :     visit (generic);
    1066         6827 :   if (impl.has_where_clause ())
    1067            7 :     visit (impl.get_where_clause ());
    1068         6827 :   visit (impl.get_type ());
    1069         6827 :   visit_inner_attrs (impl);
    1070        25948 :   for (auto &item : impl.get_impl_items ())
    1071        19121 :     visit (item);
    1072         6827 : }
    1073              : 
    1074              : void
    1075        32118 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
    1076              : {
    1077        32118 :   visit_outer_attrs (impl);
    1078        32118 :   visit (impl.get_visibility ());
    1079              : 
    1080        37992 :   for (auto &generic : impl.get_generic_params ())
    1081         5874 :     visit (generic);
    1082        32118 :   if (impl.has_where_clause ())
    1083          629 :     visit (impl.get_where_clause ());
    1084        32118 :   visit (impl.get_type ());
    1085        32118 :   visit (impl.get_trait_path ());
    1086        32118 :   visit_inner_attrs (impl);
    1087        70433 :   for (auto &item : impl.get_impl_items ())
    1088        38315 :     visit (item);
    1089        32118 : }
    1090              : 
    1091              : void
    1092            9 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
    1093              : {
    1094            9 :   visit_outer_attrs (item);
    1095            9 :   visit (item.get_visibility ());
    1096            9 : }
    1097              : 
    1098              : void
    1099           12 : DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
    1100              : {
    1101           12 :   visit_outer_attrs (item);
    1102           12 :   visit (item.get_visibility ());
    1103           12 :   visit (item.get_type ());
    1104           12 : }
    1105              : 
    1106              : void
    1107        15434 : DefaultASTVisitor::visit (AST::ExternBlock &block)
    1108              : {
    1109        15434 :   visit_outer_attrs (block);
    1110        15434 :   visit (block.get_visibility ());
    1111        15434 :   visit_inner_attrs (block);
    1112        39460 :   for (auto &item : block.get_extern_items ())
    1113        24026 :     visit (item);
    1114        15434 : }
    1115              : 
    1116              : void
    1117        10101 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
    1118        10101 : {}
    1119              : 
    1120              : void
    1121         4751 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
    1122              : {
    1123        11558 :   for (auto &m : match.get_matches ())
    1124         6807 :     visit (m);
    1125         4751 : }
    1126              : 
    1127              : void
    1128        10112 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
    1129              : {
    1130        23086 :   for (auto &m : matcher.get_matches ())
    1131        12974 :     visit (m);
    1132        10112 : }
    1133              : 
    1134              : void
    1135         9663 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
    1136              : {
    1137         9663 :   visit (transcriber.get_token_tree ());
    1138         9663 : }
    1139              : 
    1140              : void
    1141         9663 : DefaultASTVisitor::visit (AST::MacroRule &rule)
    1142              : {
    1143         9663 :   visit (rule.get_matcher ());
    1144         9663 :   visit (rule.get_transcriber ());
    1145         9663 : }
    1146              : void
    1147         7579 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
    1148              : {
    1149         7579 :   visit_outer_attrs (rules_def);
    1150        17242 :   for (auto &rule : rules_def.get_macro_rules ())
    1151         9663 :     visit (rule);
    1152         7579 : }
    1153              : 
    1154              : void
    1155         2936 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
    1156              : {
    1157         2936 :   visit (data.get_path ());
    1158         2936 :   visit (data.get_delim_tok_tree ());
    1159         2936 : }
    1160              : void
    1161         2936 : DefaultASTVisitor::visit (AST::MacroInvocation &macro_invoc)
    1162              : {
    1163         2936 :   visit_outer_attrs (macro_invoc);
    1164         2936 :   visit (macro_invoc.get_invoc_data ());
    1165         2936 : }
    1166              : 
    1167              : void
    1168            0 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
    1169              : {
    1170            0 :   visit (meta_item.get_path ());
    1171            0 : }
    1172              : 
    1173              : void
    1174           29 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
    1175              : {
    1176           29 :   visit (meta_item.get_path ());
    1177           67 :   for (auto &inner : meta_item.get_seq ())
    1178           38 :     visit (inner);
    1179           29 : }
    1180              : 
    1181              : void
    1182            0 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
    1183            0 : {}
    1184              : 
    1185              : void
    1186            0 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
    1187            0 : {}
    1188              : 
    1189              : void
    1190            0 : DefaultASTVisitor::visit (AST::MetaListPaths &meta_item)
    1191              : {
    1192            0 :   for (auto &path : meta_item.get_paths ())
    1193            0 :     visit (path);
    1194            0 : }
    1195              : 
    1196              : void
    1197            0 : DefaultASTVisitor::visit (AST::MetaListNameValueStr &meta_item)
    1198              : {
    1199            0 :   for (auto &str : meta_item.get_values ())
    1200            0 :     visit (str);
    1201            0 : }
    1202              : 
    1203              : void
    1204         6808 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
    1205         6808 : {}
    1206              : 
    1207              : void
    1208       233727 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
    1209              : {
    1210       233727 :   if (pattern.has_subpattern ())
    1211          232 :     visit (pattern.get_subpattern ());
    1212       233727 : }
    1213              : 
    1214              : void
    1215        21438 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
    1216        21438 : {}
    1217              : 
    1218              : void
    1219            0 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
    1220            0 : {}
    1221              : 
    1222              : void
    1223         1573 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
    1224         1573 : {}
    1225              : 
    1226              : void
    1227          168 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
    1228              : {
    1229          168 :   visit (bound.get_path ());
    1230          168 : }
    1231              : 
    1232              : void
    1233            0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
    1234              : {
    1235            0 :   visit (bound.get_qualified_path ());
    1236            0 : }
    1237              : 
    1238              : void
    1239          760 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
    1240              : {
    1241          760 :   if (pattern.get_has_lower_bound ())
    1242          760 :     visit (pattern.get_lower_bound ());
    1243          760 :   if (pattern.get_has_upper_bound ())
    1244          760 :     visit (pattern.get_upper_bound ());
    1245          760 : }
    1246              : 
    1247              : void
    1248         2539 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
    1249              : {
    1250         2539 :   visit (pattern.get_referenced_pattern ());
    1251         2539 : }
    1252              : 
    1253              : void
    1254          294 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
    1255              : {
    1256          294 :   visit_outer_attrs (field);
    1257          294 :   visit (field.get_index_pattern ());
    1258          294 : }
    1259              : 
    1260              : void
    1261         1875 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
    1262              : {
    1263         1875 :   visit_outer_attrs (field);
    1264         1875 :   visit (field.get_ident_pattern ());
    1265         1875 : }
    1266              : 
    1267              : void
    1268          814 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
    1269              : {
    1270          814 :   visit_outer_attrs (field);
    1271          814 : }
    1272              : 
    1273              : void
    1274         1499 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
    1275              : {
    1276         3988 :   for (auto &field : spe.get_struct_pattern_fields ())
    1277         2489 :     visit (field);
    1278         1499 :   for (auto &attribute : spe.get_etc_outer_attrs ())
    1279              :     visit (attribute);
    1280         1499 : }
    1281              : 
    1282              : void
    1283         1499 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
    1284              : {
    1285         1499 :   visit (pattern.get_path ());
    1286         1499 :   visit (pattern.get_struct_pattern_elems ());
    1287         1499 : }
    1288              : 
    1289              : void
    1290        14966 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRest &tuple_items)
    1291              : {
    1292        31550 :   for (auto &pattern : tuple_items.get_patterns ())
    1293        16584 :     visit (pattern);
    1294        14966 : }
    1295              : 
    1296              : void
    1297          499 : DefaultASTVisitor::visit (AST::TupleStructItemsHasRest &tuple_items)
    1298              : {
    1299          896 :   for (auto &lower : tuple_items.get_lower_patterns ())
    1300          397 :     visit (lower);
    1301          736 :   for (auto &upper : tuple_items.get_upper_patterns ())
    1302          237 :     visit (upper);
    1303          499 : }
    1304              : 
    1305              : void
    1306        15465 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
    1307              : {
    1308        15465 :   visit (pattern.get_path ());
    1309        15465 :   visit (pattern.get_items ());
    1310        15465 : }
    1311              : 
    1312              : void
    1313         8283 : DefaultASTVisitor::visit (AST::TuplePatternItemsNoRest &tuple_items)
    1314              : {
    1315        25029 :   for (auto &pattern : tuple_items.get_patterns ())
    1316        16746 :     visit (pattern);
    1317         8283 : }
    1318              : 
    1319              : void
    1320          345 : DefaultASTVisitor::visit (AST::TuplePatternItemsHasRest &tuple_items)
    1321              : {
    1322          701 :   for (auto &lower : tuple_items.get_lower_patterns ())
    1323          356 :     visit (lower);
    1324          745 :   for (auto &upper : tuple_items.get_upper_patterns ())
    1325          400 :     visit (upper);
    1326          345 : }
    1327              : 
    1328              : void
    1329         8628 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
    1330              : {
    1331         8628 :   visit (pattern.get_items ());
    1332         8628 : }
    1333              : 
    1334              : void
    1335          572 : DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
    1336              : {
    1337          572 :   visit (pattern.get_pattern_in_parens ());
    1338          572 : }
    1339              : 
    1340              : void
    1341          408 : DefaultASTVisitor::visit (AST::SlicePatternItemsNoRest &items)
    1342              : {
    1343         1224 :   for (auto &item : items.get_patterns ())
    1344          816 :     visit (item);
    1345          408 : }
    1346              : 
    1347              : void
    1348          568 : DefaultASTVisitor::visit (AST::SlicePatternItemsHasRest &items)
    1349              : {
    1350         1125 :   for (auto &item : items.get_lower_patterns ())
    1351          557 :     visit (item);
    1352         1125 :   for (auto &item : items.get_upper_patterns ())
    1353          557 :     visit (item);
    1354          568 : }
    1355              : 
    1356              : void
    1357          976 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
    1358              : {
    1359          976 :   visit (pattern.get_items ());
    1360          976 : }
    1361              : 
    1362              : void
    1363         2674 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
    1364              : {
    1365         8302 :   for (auto &alt : pattern.get_alts ())
    1366         5628 :     visit (alt);
    1367         2674 : }
    1368              : 
    1369              : void
    1370          878 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
    1371          878 : {}
    1372              : 
    1373              : void
    1374       179290 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
    1375              : {
    1376       179290 :   visit_outer_attrs (stmt);
    1377       179290 :   visit (stmt.get_pattern ());
    1378       179290 :   if (stmt.has_type ())
    1379        27250 :     visit (stmt.get_type ());
    1380       179290 :   if (stmt.has_init_expr ())
    1381       164886 :     visit (stmt.get_init_expr ());
    1382       179290 : }
    1383              : 
    1384              : void
    1385       146997 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
    1386              : {
    1387       146997 :   visit (stmt.get_expr ());
    1388       146996 : }
    1389              : 
    1390              : void
    1391        21419 : DefaultASTVisitor::visit (AST::TraitBound &bound)
    1392              : {
    1393        21559 :   for (auto &lifetime : bound.get_for_lifetimes ())
    1394          140 :     visit (lifetime);
    1395        21419 :   visit (bound.get_type_path ());
    1396        21419 : }
    1397              : 
    1398              : void
    1399            0 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
    1400              : {
    1401            0 :   for (auto &bound : type.get_type_param_bounds ())
    1402            0 :     visit (bound);
    1403            0 : }
    1404              : 
    1405              : void
    1406          160 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
    1407              : {
    1408          568 :   for (auto &bound : type.get_type_param_bounds ())
    1409          408 :     visit (bound);
    1410          160 : }
    1411              : 
    1412              : void
    1413           94 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
    1414              : {
    1415           94 :   visit (type.get_type_in_parens ());
    1416           94 : }
    1417              : 
    1418              : void
    1419         1199 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
    1420              : {
    1421         1199 :   visit (type.get_trait_bound ());
    1422         1199 : }
    1423              : 
    1424              : void
    1425         2060 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
    1426              : {
    1427         2060 :   visit (type.get_trait_bound ());
    1428         2060 : }
    1429              : 
    1430              : void
    1431         5896 : DefaultASTVisitor::visit (AST::TupleType &type)
    1432              : {
    1433        15178 :   for (auto &elem : type.get_elems ())
    1434         9282 :     visit (elem);
    1435         5896 : }
    1436              : 
    1437              : void
    1438          792 : DefaultASTVisitor::visit (AST::NeverType &type)
    1439          792 : {}
    1440              : 
    1441              : void
    1442       110981 : DefaultASTVisitor::visit (AST::RawPointerType &type)
    1443              : {
    1444       110981 :   visit (type.get_type_pointed_to ());
    1445       110981 : }
    1446              : 
    1447              : void
    1448        76794 : DefaultASTVisitor::visit (AST::ReferenceType &type)
    1449              : {
    1450        76794 :   visit (type.get_lifetime ());
    1451        76794 :   visit (type.get_base_type ());
    1452        76794 : }
    1453              : 
    1454              : void
    1455        11435 : DefaultASTVisitor::visit (AST::ArrayType &type)
    1456              : {
    1457        11435 :   visit (type.get_elem_type ());
    1458        11435 :   visit (type.get_size_expr ());
    1459        11435 : }
    1460              : 
    1461              : void
    1462        12145 : DefaultASTVisitor::visit (AST::SliceType &type)
    1463              : {
    1464        12145 :   visit (type.get_elem_type ());
    1465        12145 : }
    1466              : 
    1467              : void
    1468         4242 : DefaultASTVisitor::visit (AST::InferredType &type)
    1469         4242 : {}
    1470              : 
    1471              : void
    1472          680 : DefaultASTVisitor::visit (AST::MaybeNamedParam &param)
    1473              : {
    1474          680 :   visit_outer_attrs (param);
    1475          680 :   visit (param.get_type ());
    1476          680 : }
    1477              : 
    1478              : void
    1479          865 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
    1480              : {
    1481          902 :   for (auto &lifetime : type.get_for_lifetimes ())
    1482           37 :     visit (lifetime);
    1483          865 :   visit (type.get_function_qualifiers ());
    1484         1545 :   for (auto &param : type.get_function_params ())
    1485          680 :     visit (param);
    1486          865 :   if (type.is_variadic ())
    1487            0 :     for (auto attr : type.get_variadic_attr ())
    1488            0 :       visit (attr);
    1489          865 :   if (type.has_return_type ())
    1490          641 :     visit (type.get_return_type ());
    1491          865 : }
    1492              : 
    1493              : void
    1494            0 : DefaultASTVisitor::visit (AST::FormatArgs &)
    1495              : {
    1496              :   // FIXME: Do we have anything to do? any subnodes to visit? Probably, right?
    1497            0 : }
    1498              : 
    1499              : void
    1500          139 : DefaultASTVisitor::visit (AST::OffsetOf &offset_of)
    1501              : {
    1502          139 :   visit (offset_of.get_type ());
    1503          139 : }
    1504              : 
    1505              : void
    1506         9456 : DefaultASTVisitor::visit (AST::VariadicParam &param)
    1507              : {
    1508         9456 :   if (param.has_pattern ())
    1509          121 :     visit (param.get_pattern ());
    1510         9456 : }
    1511              : 
    1512              : void
    1513         4509 : ContextualASTVisitor::visit (AST::Crate &crate)
    1514              : {
    1515         4509 :   ctx.enter (Kind::CRATE);
    1516         4509 :   DefaultASTVisitor::visit (crate);
    1517         4509 :   ctx.exit ();
    1518         4509 : }
    1519              : 
    1520              : void
    1521          971 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
    1522              : {
    1523          971 :   ctx.enter (Kind::INHERENT_IMPL);
    1524          971 :   DefaultASTVisitor::visit (impl);
    1525          971 :   ctx.exit ();
    1526          971 : }
    1527              : 
    1528              : void
    1529         4739 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
    1530              : {
    1531         4739 :   ctx.enter (Kind::TRAIT_IMPL);
    1532         4739 :   DefaultASTVisitor::visit (impl);
    1533         4739 :   ctx.exit ();
    1534         4739 : }
    1535              : 
    1536              : void
    1537         3736 : ContextualASTVisitor::visit (AST::Trait &trait)
    1538              : {
    1539         3736 :   ctx.enter (Kind::TRAIT);
    1540         3736 :   DefaultASTVisitor::visit (trait);
    1541         3736 :   ctx.exit ();
    1542         3736 : }
    1543              : 
    1544              : } // namespace AST
    1545              : } // namespace Rust
        

Generated by: LCOV version 2.4-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.