LCOV - code coverage report
Current view: top level - gcc/rust/ast - rust-ast-visitor.cc (source / functions) Coverage Total Hit
Test: gcc.info Lines: 94.1 % 932 877
Test Date: 2026-10-03 16:17:38 Functions: 95.2 % 189 180
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        90541 : DefaultASTVisitor::visit (AST::Crate &crate)
      36              : {
      37        90541 :   visit_inner_attrs (crate);
      38       498281 :   for (auto &item : crate.items)
      39       407742 :     visit (item);
      40        90539 : }
      41              : 
      42              : void
      43     33249015 : DefaultASTVisitor::visit (AST::Token &tok)
      44     33249015 : {}
      45              : 
      46              : void
      47      4406622 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
      48              : {
      49     39220492 :   for (auto &token : delim_tok_tree.get_token_trees ())
      50     34813870 :     visit (token);
      51      4406622 : }
      52              : 
      53              : void
      54        31604 : DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
      55              : {
      56        64064 :   for (auto &item : input.get_items ())
      57        32460 :     visit (item);
      58        31604 : }
      59              : 
      60              : void
      61     27488727 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
      62              : {
      63     27488727 :   visit_outer_attrs (ident_expr);
      64     27488727 : }
      65              : 
      66              : void
      67      3534371 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
      68      3534371 : {}
      69              : 
      70              : void
      71       183219 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
      72              : {
      73       183219 :   visit_outer_attrs (lifetime_param);
      74       183219 :   visit (lifetime_param.get_lifetime ());
      75       186373 :   for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
      76         3154 :     visit (lifetime_bound);
      77       183219 : }
      78              : 
      79              : void
      80        13509 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
      81              : {
      82        13509 :   visit_outer_attrs (const_param);
      83        13509 :   if (const_param.has_type ())
      84        13509 :     visit (const_param.get_type ());
      85        13509 :   if (const_param.has_default_value ())
      86          319 :     visit (const_param.get_default_value_unchecked ());
      87        13509 : }
      88              : 
      89              : void
      90      8344866 : DefaultASTVisitor::visit (AST::PathInExpression &path)
      91              : {
      92      8344866 :   visit_outer_attrs (path);
      93              : 
      94      8344866 :   if (!path.is_lang_item ())
      95     17947649 :     for (auto &segment : path.get_segments ())
      96      9636954 :       visit (segment);
      97      8344866 : }
      98              : 
      99              : void
     100     16449514 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
     101     16449514 : {}
     102              : 
     103              : void
     104        39825 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
     105              : {
     106        39825 :   visit (binding.get_type ());
     107        39825 : }
     108              : 
     109              : void
     110      1616884 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
     111              : {
     112      1616884 :   if (segment.has_generic_args ())
     113      1616870 :     visit (segment.get_generic_args ());
     114      1616884 : }
     115              : 
     116              : void
     117       100380 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
     118              : {
     119       243240 :   for (auto &input : tpf.get_params ())
     120       142860 :     visit (input);
     121       100380 :   if (tpf.has_return_type ())
     122        97011 :     visit (tpf.get_return_type ());
     123       100380 : }
     124              : 
     125              : void
     126     21070952 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
     127     21070952 : {}
     128              : 
     129              : void
     130       100380 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
     131              : {
     132       100380 :   visit (segment.get_type_path_function ());
     133       100380 :   visit (segment.get_ident_segment ());
     134       100380 : }
     135              : 
     136              : void
     137      1665956 : DefaultASTVisitor::visit (AST::GenericArgs &args)
     138              : {
     139      1836455 :   for (auto &lifetime : args.get_lifetime_args ())
     140       170499 :     visit (lifetime);
     141              : 
     142      3308640 :   for (auto &generic : args.get_generic_args ())
     143      1642684 :     visit (generic);
     144              : 
     145      1705352 :   for (auto &binding : args.get_binding_args ())
     146        39396 :     visit (binding);
     147      1665956 : }
     148              : 
     149              : void
     150     16086083 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
     151              : {
     152     16086083 :   visit (segment.get_ident_segment ());
     153     16086083 :   if (segment.has_generic_args ())
     154        67961 :     visit (segment.get_generic_args ());
     155     16086083 : }
     156              : void
     157     13681138 : DefaultASTVisitor::visit (AST::TypePath &path)
     158              : {
     159     28313138 :   for (auto &segment : path.get_segments ())
     160     14632000 :     visit (segment);
     161     13681138 : }
     162              : 
     163              : void
     164        25021 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
     165              : {
     166        25021 :   visit_outer_attrs (path);
     167        25021 :   visit (path.get_qualified_path_type ());
     168              : 
     169        50075 :   for (auto &segment : path.get_segments ())
     170        25054 :     visit (segment);
     171        25021 : }
     172              : 
     173              : void
     174       565618 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
     175              : {
     176       565618 :   visit (path.get_type ());
     177       565618 :   if (path.has_as_clause ())
     178       546994 :     visit (path.get_as_type_path ());
     179       565618 : }
     180              : 
     181              : void
     182       647294 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
     183              : {
     184       647294 :   visit (path.get_qualified_path_type ());
     185       647294 :   visit (path.get_associated_segment ());
     186              : 
     187       647294 :   for (auto &segment : path.get_segments ())
     188            0 :     visit (segment);
     189       647294 : }
     190              : 
     191              : void
     192     34397594 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
     193              : {
     194     34397594 :   visit_outer_attrs (expr);
     195     34397594 : }
     196              : 
     197              : void
     198     18284540 : DefaultASTVisitor::visit (AST::Attribute &attribute)
     199              : {
     200     18284540 :   visit (attribute.get_path ());
     201     18284540 :   if (attribute.has_attr_input ())
     202     15735575 :     visit (attribute.get_attr_input ());
     203     18284540 : }
     204              : 
     205              : void
     206      9907571 : DefaultASTVisitor::visit (AST::AttrInputLiteral &attr_input)
     207              : {
     208      9907571 :   visit (attr_input.get_literal ());
     209      9907571 : }
     210              : 
     211              : void
     212        23001 : DefaultASTVisitor::visit (AST::AttrInputExpr &attr_input)
     213              : {
     214        23001 :   visit (attr_input.get_expr ());
     215        23001 : }
     216              : 
     217              : void
     218            0 : DefaultASTVisitor::visit (AST::MetaItemLitExpr &meta_item)
     219              : {
     220            0 :   visit (meta_item.get_literal ());
     221            0 : }
     222              : 
     223              : void
     224     18781912 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
     225     18781912 : {}
     226              : 
     227              : void
     228     18646315 : DefaultASTVisitor::visit (AST::SimplePath &path)
     229              : {
     230     37428227 :   for (auto &segment : path.get_segments ())
     231     18781912 :     visit (segment);
     232     18646315 : }
     233              : 
     234              : void
     235            1 : DefaultASTVisitor::visit (AST::MetaItemPathExpr &meta_item)
     236              : {
     237            1 :   visit (meta_item.get_path ());
     238            1 :   visit (meta_item.get_expr ());
     239            1 : }
     240              : 
     241              : void
     242      1233586 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
     243              : {
     244      1233586 :   visit_outer_attrs (expr);
     245      1233586 :   visit (expr.get_borrowed_expr ());
     246      1233586 : }
     247              : 
     248              : void
     249       629066 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
     250              : {
     251       629066 :   visit_outer_attrs (expr);
     252       629066 :   visit (expr.get_dereferenced_expr ());
     253       629066 : }
     254              : 
     255              : void
     256        85182 : DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
     257              : {
     258        85182 :   visit_outer_attrs (expr);
     259        85182 :   visit (expr.get_propagating_expr ());
     260        85182 : }
     261              : 
     262              : void
     263       190613 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
     264              : {
     265       190613 :   visit_outer_attrs (expr);
     266       190613 :   visit (expr.get_negated_expr ());
     267       190613 : }
     268              : 
     269              : void
     270      6339438 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
     271              : {
     272      6339438 :   visit_outer_attrs (expr);
     273      6339438 :   visit (expr.get_left_expr ());
     274      6339438 :   visit (expr.get_right_expr ());
     275      6339438 : }
     276              : 
     277              : void
     278       595906 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
     279              : {
     280       595906 :   visit_outer_attrs (expr);
     281       595906 :   visit (expr.get_left_expr ());
     282       595906 :   visit (expr.get_right_expr ());
     283       595906 : }
     284              : 
     285              : void
     286       146726 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
     287              : {
     288       146726 :   visit_outer_attrs (expr);
     289       146726 :   visit (expr.get_left_expr ());
     290       146726 :   visit (expr.get_right_expr ());
     291       146726 : }
     292              : 
     293              : void
     294       986220 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
     295              : {
     296       986220 :   visit_outer_attrs (expr);
     297       986220 :   visit (expr.get_casted_expr ());
     298       986220 :   visit (expr.get_type_to_cast_to ());
     299       986220 : }
     300              : 
     301              : void
     302       409902 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
     303              : {
     304       409902 :   visit_outer_attrs (expr);
     305       409902 :   visit (expr.get_left_expr ());
     306       409902 :   visit (expr.get_right_expr ());
     307       409902 : }
     308              : 
     309              : void
     310       242943 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
     311              : {
     312       242943 :   visit_outer_attrs (expr);
     313       242943 :   visit (expr.get_left_expr ());
     314       242943 :   visit (expr.get_right_expr ());
     315       242943 : }
     316              : 
     317              : void
     318      1162616 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
     319              : {
     320      1162616 :   visit_outer_attrs (expr);
     321      1162616 :   visit_inner_attrs (expr);
     322      1162616 :   visit (expr.get_expr_in_parens ());
     323      1162616 : }
     324              : 
     325              : void
     326      1303673 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
     327              : {
     328     13710406 :   for (auto &value : elems.get_values ())
     329     12406733 :     visit (value);
     330      1303673 : }
     331              : 
     332              : void
     333        11675 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
     334              : {
     335        11675 :   visit (elems.get_elem_to_copy ());
     336        11675 :   visit (elems.get_num_copies ());
     337        11675 : }
     338              : 
     339              : void
     340      2521132 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
     341              : {
     342      2521132 :   visit_outer_attrs (expr);
     343      2521132 :   visit_inner_attrs (expr);
     344      2521132 :   visit (expr.get_array_elems ());
     345      2521132 : }
     346              : 
     347              : void
     348       172393 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
     349              : {
     350       172393 :   visit_outer_attrs (expr);
     351       172393 :   visit (expr.get_array_expr ());
     352       172393 :   visit (expr.get_index_expr ());
     353       172393 : }
     354              : 
     355              : void
     356       450391 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
     357              : {
     358       450391 :   visit_outer_attrs (expr);
     359       450391 :   visit_inner_attrs (expr);
     360      1287133 :   for (auto &elem : expr.get_tuple_elems ())
     361       836742 :     visit (elem);
     362       450391 : }
     363              : 
     364              : void
     365       807086 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
     366              : {
     367       807086 :   visit_outer_attrs (expr);
     368       807086 :   visit (expr.get_tuple_expr ());
     369       807086 : }
     370              : 
     371              : void
     372         4950 : DefaultASTVisitor::visit (AST::StructExprStruct &expr)
     373              : {
     374         4950 :   visit_outer_attrs (expr);
     375         4950 :   visit_inner_attrs (expr);
     376         4950 :   visit (expr.get_struct_name ());
     377         4950 : }
     378              : 
     379              : void
     380        52246 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
     381        52246 : {}
     382              : 
     383              : void
     384       196147 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
     385              : {
     386       196147 :   visit (field.get_value ());
     387       196147 : }
     388              : 
     389              : void
     390          748 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
     391              : {
     392          748 :   visit (field.get_value ());
     393          748 : }
     394              : 
     395              : void
     396         1785 : DefaultASTVisitor::visit (AST::StructBase &base)
     397              : {
     398         1785 :   visit (base.get_base_struct ());
     399         1785 : }
     400              : 
     401              : void
     402       160006 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
     403              : {
     404       160006 :   visit_outer_attrs (expr);
     405       160006 :   visit_inner_attrs (expr);
     406       160006 :   visit (expr.get_struct_name ());
     407       160006 :   if (expr.has_struct_base ())
     408         2261 :     visit (expr.get_struct_base ());
     409       464475 :   for (auto &field : expr.get_fields ())
     410       304469 :     visit (field);
     411       160006 : }
     412              : 
     413              : void
     414            0 : DefaultASTVisitor::visit (AST::StructExprStructBase &expr)
     415              : {
     416            0 :   visit_outer_attrs (expr);
     417            0 :   visit_inner_attrs (expr);
     418            0 :   visit (expr.get_struct_name ());
     419            0 :   visit (expr.get_struct_base ());
     420            0 : }
     421              : 
     422              : void
     423     10810884 : DefaultASTVisitor::visit (AST::CallExpr &expr)
     424              : {
     425     10810884 :   visit_outer_attrs (expr);
     426     10810884 :   visit (expr.get_function_expr ());
     427     37718431 :   for (auto &param : expr.get_params ())
     428     26907548 :     visit (param);
     429     10810883 : }
     430              : 
     431              : void
     432      6424075 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
     433              : {
     434      6424075 :   visit_outer_attrs (expr);
     435      6424075 :   visit (expr.get_receiver_expr ());
     436      6424075 :   visit (expr.get_method_name ());
     437      7451999 :   for (auto &param : expr.get_params ())
     438      1027924 :     visit (param);
     439      6424075 : }
     440              : 
     441              : void
     442      1110816 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
     443              : {
     444      1110816 :   visit_outer_attrs (expr);
     445      1110816 :   visit (expr.get_receiver_expr ());
     446      1110816 : }
     447              : 
     448              : void
     449        61922 : DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
     450              : {
     451        61922 :   visit_outer_attrs (expr);
     452       133470 :   for (auto &param : expr.get_params ())
     453        71548 :     visit (param);
     454        61922 :   visit (expr.get_definition_expr ());
     455        61922 : }
     456              : 
     457              : void
     458      3616754 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
     459              : {
     460      3616754 :   visit_outer_attrs (expr);
     461      3616754 :   visit_inner_attrs (expr);
     462              : 
     463      3616754 :   if (expr.has_label ())
     464           51 :     visit (expr.get_label ());
     465              : 
     466      5763396 :   for (auto &stmt : expr.get_statements ())
     467      2146645 :     visit (stmt);
     468              : 
     469      3616751 :   if (expr.has_tail_expr ())
     470      3048839 :     visit (expr.get_tail_expr ());
     471      3616749 : }
     472              : 
     473              : void
     474          280 : DefaultASTVisitor::visit (AST::ConstBlock &expr)
     475              : {
     476          280 :   visit (expr.get_const_expr ());
     477          280 : }
     478              : 
     479              : void
     480        72604 : DefaultASTVisitor::visit (AST::AnonConst &expr)
     481              : {
     482        72604 :   if (!expr.is_deferred ())
     483        72381 :     visit (expr.get_inner_expr ());
     484        72604 : }
     485              : 
     486              : void
     487          439 : DefaultASTVisitor::visit (AST::ClosureExprInnerTyped &expr)
     488              : {
     489          439 :   visit_outer_attrs (expr);
     490          955 :   for (auto &param : expr.get_params ())
     491          516 :     visit (param);
     492          439 :   visit (expr.get_return_type ());
     493          439 :   visit (expr.get_definition_expr ());
     494          439 : }
     495              : 
     496              : void
     497        99319 : DefaultASTVisitor::visit (AST::ClosureParam &param)
     498              : {
     499        99319 :   visit_outer_attrs (param);
     500        99319 :   visit (param.get_pattern ());
     501        99319 :   if (param.has_type_given ())
     502         5479 :     visit (param.get_type ());
     503        99319 : }
     504              : 
     505              : void
     506         1982 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
     507              : {
     508         1982 :   visit_outer_attrs (expr);
     509         1982 :   if (expr.has_label ())
     510          765 :     visit (expr.get_label_unchecked ());
     511         1982 : }
     512              : 
     513              : void
     514        16021 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
     515              : {
     516        16021 :   visit_outer_attrs (expr);
     517        16021 :   if (expr.has_label ())
     518          831 :     visit (expr.get_label_unchecked ());
     519              : 
     520        16021 :   if (expr.has_break_expr ())
     521          668 :     visit (expr.get_break_expr_unchecked ());
     522        16020 : }
     523              : 
     524              : void
     525        55868 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
     526              : {
     527        55868 :   visit (expr.get_from_expr ());
     528        55868 :   visit (expr.get_to_expr ());
     529        55868 : }
     530              : 
     531              : void
     532        22301 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
     533              : {
     534        22301 :   visit (expr.get_from_expr ());
     535        22301 : }
     536              : 
     537              : void
     538        34428 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
     539              : {
     540        34428 :   visit (expr.get_to_expr ());
     541        34428 : }
     542              : 
     543              : void
     544        18543 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
     545        18543 : {}
     546              : 
     547              : void
     548         1493 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
     549              : {
     550         1493 :   visit (expr.get_from_expr ());
     551         1493 :   visit (expr.get_to_expr ());
     552         1493 : }
     553              : 
     554              : void
     555            0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
     556              : {
     557            0 :   visit (expr.get_to_expr ());
     558            0 : }
     559              : 
     560              : void
     561       146069 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
     562              : {
     563       146069 :   visit_outer_attrs (expr);
     564       146069 :   if (expr.has_returned_expr ())
     565       140818 :     visit (expr.get_returned_expr ());
     566       146069 : }
     567              : 
     568              : void
     569         7081 : DefaultASTVisitor::visit (AST::TryExpr &expr)
     570              : {
     571         7081 :   visit_outer_attrs (expr);
     572         7081 :   visit (expr.get_block_expr ());
     573         7081 : }
     574              : 
     575              : void
     576          630 : DefaultASTVisitor::visit (AST::BoxExpr &expr)
     577              : {
     578          630 :   visit_outer_attrs (expr);
     579          630 :   visit (expr.get_boxed_expr ());
     580          630 : }
     581              : 
     582              : void
     583       313622 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
     584              : {
     585       313622 :   visit_outer_attrs (expr);
     586       313622 :   visit (expr.get_block_expr ());
     587       313622 : }
     588              : 
     589              : void
     590         2580 : DefaultASTVisitor::visit (AST::LoopLabel &label)
     591              : {
     592         2580 :   visit (label.get_lifetime ());
     593         2580 : }
     594              : 
     595              : void
     596        15264 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
     597              : {
     598        15264 :   visit_outer_attrs (expr);
     599        15264 :   if (expr.has_loop_label ())
     600         1146 :     visit (expr.get_loop_label ());
     601        15264 :   visit (expr.get_loop_block ());
     602        15263 : }
     603              : 
     604              : void
     605        27849 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
     606              : {
     607        27849 :   visit_outer_attrs (expr);
     608        27849 :   if (expr.has_loop_label ())
     609          119 :     visit (expr.get_loop_label ());
     610        27849 :   visit (expr.get_predicate_expr ());
     611        27849 :   visit (expr.get_loop_block ());
     612        27849 : }
     613              : 
     614              : void
     615         5978 : DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
     616              : {
     617         5978 :   visit_outer_attrs (expr);
     618         5978 :   visit (expr.get_pattern ());
     619              : 
     620         5978 :   if (expr.has_loop_label ())
     621            9 :     visit (expr.get_loop_label ());
     622              : 
     623         5978 :   visit (expr.get_scrutinee_expr ());
     624         5978 :   visit (expr.get_loop_block ());
     625         5978 : }
     626              : 
     627              : void
     628        28020 : DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
     629              : {
     630        28020 :   visit_outer_attrs (expr);
     631        28020 :   visit (expr.get_pattern ());
     632        28020 :   visit (expr.get_iterator_expr ());
     633        28020 :   if (expr.has_loop_label ())
     634            0 :     visit (expr.get_loop_label ());
     635        28020 :   visit (expr.get_loop_block ());
     636        28020 : }
     637              : 
     638              : void
     639       438464 : DefaultASTVisitor::visit (AST::IfExpr &expr)
     640              : {
     641       438464 :   visit_outer_attrs (expr);
     642       438464 :   visit (expr.get_condition_expr ());
     643       438464 :   visit (expr.get_if_block ());
     644       438464 : }
     645              : 
     646              : void
     647       279806 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
     648              : {
     649       279806 :   visit (reinterpret_cast<AST::IfExpr &> (expr));
     650       279806 :   visit (expr.get_else_block ());
     651       279806 : }
     652              : 
     653              : void
     654        15427 : DefaultASTVisitor::visit (AST::IfLetExpr &expr)
     655              : {
     656        15427 :   visit_outer_attrs (expr);
     657        15427 :   visit (expr.get_pattern ());
     658        15427 :   visit (expr.get_value_expr ());
     659        15427 :   visit (expr.get_if_block ());
     660        15427 : }
     661              : 
     662              : void
     663         5821 : DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
     664              : {
     665         5821 :   visit (reinterpret_cast<AST::IfLetExpr &> (expr));
     666         5821 :   visit (expr.get_else_block ());
     667         5821 : }
     668              : 
     669              : void
     670      7841655 : DefaultASTVisitor::visit (AST::MatchArm &arm)
     671              : {
     672      7841655 :   visit_outer_attrs (arm);
     673      7841655 :   visit (arm.get_pattern ());
     674      7841655 :   if (arm.has_match_arm_guard ())
     675         6358 :     visit (arm.get_guard_expr ());
     676      7841655 : }
     677              : 
     678              : void
     679      7892823 : DefaultASTVisitor::visit (AST::MatchCase &arm)
     680              : {
     681      7892823 :   visit (arm.get_arm ());
     682      7892823 :   visit (arm.get_expr ());
     683      7892822 : }
     684              : 
     685              : void
     686       794801 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
     687              : {
     688       794801 :   visit_outer_attrs (expr);
     689       794801 :   visit_inner_attrs (expr);
     690       794801 :   visit (expr.get_scrutinee_expr ());
     691      8687622 :   for (auto &arm : expr.get_match_cases ())
     692      7892823 :     visit (arm);
     693       794799 : }
     694              : 
     695              : void
     696            0 : DefaultASTVisitor::visit (AST::AwaitExpr &expr)
     697              : {
     698            0 :   visit_outer_attrs (expr);
     699            0 :   visit (expr.get_awaited_expr ());
     700            0 : }
     701              : 
     702              : void
     703            0 : DefaultASTVisitor::visit (AST::AsyncBlockExpr &expr)
     704              : {
     705            0 :   visit_outer_attrs (expr);
     706            0 :   visit (expr.get_block_expr ());
     707            0 : }
     708              : 
     709              : void
     710          345 : DefaultASTVisitor::visit (AST::InlineAsm &expr)
     711              : {
     712          345 :   visit_outer_attrs (expr);
     713          345 :   using RegisterType = AST::InlineAsmOperand::RegisterType;
     714          718 :   for (auto &operand : expr.get_operands ())
     715              :     {
     716          373 :       switch (operand.get_register_type ())
     717              :         {
     718          130 :         case RegisterType::In:
     719          130 :           {
     720          130 :             visit (operand.get_in ().expr);
     721          130 :             break;
     722              :           }
     723          217 :         case RegisterType::Out:
     724          217 :           {
     725          217 :             visit (operand.get_out ().expr);
     726          217 :             break;
     727              :           }
     728            0 :         case RegisterType::InOut:
     729            0 :           {
     730            0 :             visit (operand.get_in_out ().expr);
     731            0 :             break;
     732              :           }
     733           26 :         case RegisterType::SplitInOut:
     734           26 :           {
     735           26 :             auto split = operand.get_split_in_out ();
     736           26 :             visit (split.in_expr);
     737           26 :             visit (split.out_expr);
     738           26 :             break;
     739           26 :           }
     740            0 :         case RegisterType::Const:
     741            0 :           {
     742            0 :             visit (operand.get_const ().anon_const.get_inner_expr ());
     743            0 :             break;
     744              :           }
     745            0 :         case RegisterType::Sym:
     746            0 :           {
     747            0 :             visit (operand.get_sym ().expr);
     748            0 :             break;
     749              :           }
     750            0 :         case RegisterType::Label:
     751            0 :           {
     752            0 :             visit (operand.get_label ().expr);
     753            0 :             break;
     754              :           }
     755              :         }
     756          345 :     }
     757          345 : }
     758              : 
     759              : void
     760         2219 : DefaultASTVisitor::visit (AST::LlvmInlineAsm &expr)
     761              : {
     762         2219 :   visit_outer_attrs (expr);
     763              : 
     764         5227 :   for (auto &output : expr.get_outputs ())
     765         3008 :     visit (output.expr);
     766              : 
     767         4616 :   for (auto &input : expr.get_inputs ())
     768         2397 :     visit (input.expr);
     769         2219 : }
     770              : 
     771              : void
     772       722489 : DefaultASTVisitor::visit (AST::TypeParam &param)
     773              : {
     774       722489 :   visit_outer_attrs (param);
     775       933266 :   for (auto &bound : param.get_type_param_bounds ())
     776       210777 :     visit (bound);
     777       722489 :   if (param.has_type ())
     778         6654 :     visit (param.get_type ());
     779       722489 : }
     780              : 
     781              : void
     782          256 : DefaultASTVisitor::visit (AST::LifetimeWhereClauseItem &item)
     783              : {
     784          256 :   visit (item.get_lifetime ());
     785          512 :   for (auto &bound : item.get_lifetime_bounds ())
     786          256 :     visit (bound);
     787          256 : }
     788              : 
     789              : void
     790       190118 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
     791              : {
     792       190444 :   for (auto &lifetime : item.get_for_lifetimes ())
     793          326 :     visit (lifetime);
     794       190118 :   visit (item.get_type ());
     795       389194 :   for (auto &param : item.get_type_param_bounds ())
     796       199076 :     visit (param);
     797       190118 : }
     798              : 
     799              : void
     800      6166031 : DefaultASTVisitor::visit (AST::Visibility &vis)
     801              : {
     802      6166031 :   if (vis.has_path ())
     803        68159 :     visit (vis.get_path ());
     804      6166031 : }
     805              : 
     806              : void
     807      3090169 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
     808      3090169 : {}
     809              : 
     810              : void
     811       169936 : DefaultASTVisitor::visit (AST::WhereClause &where)
     812              : {
     813       401473 :   for (auto &item : where.get_items ())
     814       231537 :     visit (item);
     815       169936 : }
     816              : void
     817      2646666 : DefaultASTVisitor::visit (AST::FunctionParam &param)
     818              : {
     819      2646666 :   visit_outer_attrs (param);
     820      2646666 :   if (param.has_name ())
     821      2646666 :     visit (param.get_pattern ());
     822              : 
     823      2646666 :   visit (param.get_type ());
     824      2646666 : }
     825              : 
     826              : void
     827      1641811 : DefaultASTVisitor::visit (AST::SelfParam &param)
     828              : {
     829      1641811 :   visit_outer_attrs (param);
     830              : 
     831      1641811 :   if (param.has_lifetime ())
     832       775263 :     visit (param.get_lifetime ());
     833              : 
     834      1641811 :   if (param.has_type ())
     835         2802 :     visit (param.get_type ());
     836      1641811 : }
     837              : 
     838              : void
     839        51333 : DefaultASTVisitor::visit (AST::Module &module)
     840              : {
     841        51333 :   visit_outer_attrs (module);
     842        51333 :   visit (module.get_visibility ());
     843        51333 :   visit_inner_attrs (module);
     844      1374904 :   for (auto &item : module.get_items ())
     845      1323571 :     visit (item);
     846        51333 : }
     847              : 
     848              : void
     849          556 : DefaultASTVisitor::visit (AST::ExternCrate &crate)
     850              : {
     851          556 :   visit_outer_attrs (crate);
     852          556 :   visit (crate.get_visibility ());
     853          556 : }
     854              : 
     855              : void
     856         8186 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
     857              : {
     858         8186 :   visit (use_tree.get_path ());
     859         8186 : }
     860              : 
     861              : void
     862        28447 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
     863              : {
     864        28447 :   visit (use_tree.get_path ());
     865        28447 : }
     866              : 
     867              : void
     868        59327 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
     869              : {
     870        59327 :   visit (use_tree.get_path ());
     871        59327 : }
     872              : 
     873              : void
     874        96088 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
     875              : {
     876        96088 :   visit (use_decl.get_visibility ());
     877        96088 :   visit (use_decl.get_tree ());
     878        96088 : }
     879              : 
     880              : void
     881      2454921 : DefaultASTVisitor::visit_function_params (AST::Function &function)
     882              : {
     883      6713140 :   for (auto &param : function.get_function_params ())
     884      4258219 :     visit (param);
     885      2454921 : }
     886              : 
     887              : void
     888      2487806 : DefaultASTVisitor::visit (AST::Function &function)
     889              : {
     890      2487806 :   visit_outer_attrs (function);
     891      2487806 :   visit (function.get_visibility ());
     892      2487806 :   visit (function.get_qualifiers ());
     893      2790879 :   for (auto &generic : function.get_generic_params ())
     894       303073 :     visit (generic);
     895              : 
     896      2487806 :   visit_function_params (function);
     897              : 
     898      2487806 :   if (function.has_return_type ())
     899      2109807 :     visit (function.get_return_type ());
     900      2487806 :   if (function.has_where_clause ())
     901        81777 :     visit (function.get_where_clause ());
     902      2487806 :   if (function.has_body ())
     903      2247575 :     visit (*function.get_definition ());
     904      2487804 : }
     905              : 
     906              : void
     907       483688 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
     908              : {
     909       483688 :   visit_outer_attrs (type_alias);
     910       483688 :   visit (type_alias.get_visibility ());
     911       484172 :   for (auto &generic : type_alias.get_generic_params ())
     912          484 :     visit (generic);
     913       483688 :   if (type_alias.has_where_clause ())
     914            0 :     visit (type_alias.get_where_clause ());
     915       483688 :   visit (type_alias.get_type_aliased ());
     916       483688 : }
     917              : 
     918              : void
     919       114486 : DefaultASTVisitor::visit (AST::StructField &field)
     920              : {
     921       114486 :   visit_outer_attrs (field);
     922       114486 :   visit (field.get_visibility ());
     923       114486 :   visit (field.get_field_type ());
     924       114486 : }
     925              : 
     926              : void
     927       261352 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
     928              : {
     929       261352 :   visit_outer_attrs (struct_item);
     930       261352 :   visit (struct_item.get_visibility ());
     931       345310 :   for (auto &generic : struct_item.get_generic_params ())
     932        83958 :     visit (generic);
     933       261352 :   if (struct_item.has_where_clause ())
     934         2910 :     visit (struct_item.get_where_clause ());
     935       408445 :   for (auto &field : struct_item.get_fields ())
     936       147093 :     visit (field);
     937       261352 : }
     938              : 
     939              : void
     940       110997 : DefaultASTVisitor::visit (AST::TupleField &field)
     941              : {
     942       110997 :   visit_outer_attrs (field);
     943       110997 :   visit (field.get_visibility ());
     944       110997 :   visit (field.get_field_type ());
     945       110997 : }
     946              : 
     947              : void
     948        45669 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
     949              : {
     950        45669 :   visit_outer_attrs (tuple_struct);
     951        45669 :   visit (tuple_struct.get_visibility ());
     952        64461 :   for (auto &generic : tuple_struct.get_generic_params ())
     953        18792 :     visit (generic);
     954        45669 :   if (tuple_struct.has_where_clause ())
     955          261 :     visit (tuple_struct.get_where_clause ());
     956       186388 :   for (auto &field : tuple_struct.get_fields ())
     957       140719 :     visit (field);
     958        45669 : }
     959              : 
     960              : void
     961        44040 : DefaultASTVisitor::visit (AST::EnumItem &item)
     962              : {
     963        44040 :   visit_outer_attrs (item);
     964        44040 :   visit (item.get_visibility ());
     965        44040 : }
     966              : 
     967              : void
     968        16202 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
     969              : {
     970        16202 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     971        34063 :   for (auto &field : item.get_tuple_fields ())
     972        17861 :     visit (field);
     973        16202 : }
     974              : 
     975              : void
     976         2031 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
     977              : {
     978         2031 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     979         5383 :   for (auto &field : item.get_struct_fields ())
     980         3352 :     visit (field);
     981         2031 : }
     982              : 
     983              : void
     984         6496 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
     985              : {
     986         6496 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     987         6496 :   visit (item.get_expr ());
     988         6496 : }
     989              : 
     990              : void
     991        21380 : DefaultASTVisitor::visit (AST::Enum &enum_item)
     992              : {
     993        21380 :   visit_outer_attrs (enum_item);
     994        21380 :   visit (enum_item.get_visibility ());
     995        32644 :   for (auto &generic : enum_item.get_generic_params ())
     996        11264 :     visit (generic);
     997        21380 :   if (enum_item.has_where_clause ())
     998           31 :     visit (enum_item.get_where_clause ());
     999        74551 :   for (auto &item : enum_item.get_variants ())
    1000        53171 :     visit (item);
    1001        21380 : }
    1002              : 
    1003              : void
    1004         2875 : DefaultASTVisitor::visit (AST::Union &union_item)
    1005              : {
    1006         2875 :   visit_outer_attrs (union_item);
    1007         2875 :   visit (union_item.get_visibility ());
    1008         5011 :   for (auto &generic : union_item.get_generic_params ())
    1009         2136 :     visit (generic);
    1010         2875 :   if (union_item.has_where_clause ())
    1011            0 :     visit (union_item.get_where_clause ());
    1012        10934 :   for (auto &variant : union_item.get_variants ())
    1013         8059 :     visit (variant);
    1014         2875 : }
    1015              : 
    1016              : void
    1017       120885 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
    1018              : {
    1019       120885 :   visit_outer_attrs (const_item);
    1020       120885 :   visit (const_item.get_visibility ());
    1021       120885 :   visit (const_item.get_type ());
    1022       120885 :   if (const_item.has_expr ())
    1023       116793 :     visit (const_item.get_expr ());
    1024       120885 : }
    1025              : 
    1026              : void
    1027         6256 : DefaultASTVisitor::visit (AST::StaticItem &static_item)
    1028              : {
    1029         6256 :   visit_outer_attrs (static_item);
    1030         6256 :   visit (static_item.get_visibility ());
    1031         6256 :   visit (static_item.get_type ());
    1032         6256 :   visit (static_item.get_expr ());
    1033         6256 : }
    1034              : 
    1035              : void
    1036        32357 : DefaultASTVisitor::visit (AST::TraitItemType &item)
    1037              : {
    1038        32357 :   visit_outer_attrs (item);
    1039        32771 :   for (auto &generic : item.get_generic_params ())
    1040          414 :     visit (generic);
    1041        39220 :   for (auto &bound : item.get_type_param_bounds ())
    1042         6863 :     visit (bound);
    1043        32357 : }
    1044              : 
    1045              : void
    1046        60570 : DefaultASTVisitor::visit (AST::Trait &trait)
    1047              : {
    1048        60570 :   visit_outer_attrs (trait);
    1049        60570 :   visit (trait.get_visibility ());
    1050              : 
    1051        60570 :   visit_inner_attrs (trait);
    1052              : 
    1053        60570 :   visit (trait.get_implicit_self ());
    1054              : 
    1055        74430 :   for (auto &generic : trait.get_generic_params ())
    1056        13860 :     visit (generic);
    1057              : 
    1058        60570 :   if (trait.has_where_clause ())
    1059           91 :     visit (trait.get_where_clause ());
    1060              : 
    1061        74562 :   for (auto &bound : trait.get_type_param_bounds ())
    1062        13992 :     visit (bound);
    1063              : 
    1064       135145 :   for (auto &item : trait.get_trait_items ())
    1065        74575 :     visit (item);
    1066        60570 : }
    1067              : 
    1068              : void
    1069        35794 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
    1070              : {
    1071        35794 :   visit_outer_attrs (impl);
    1072        35794 :   visit (impl.get_visibility ());
    1073              : 
    1074        64420 :   for (auto &generic : impl.get_generic_params ())
    1075        28626 :     visit (generic);
    1076        35794 :   if (impl.has_where_clause ())
    1077          236 :     visit (impl.get_where_clause ());
    1078        35794 :   visit (impl.get_type ());
    1079        35794 :   visit_inner_attrs (impl);
    1080       240531 :   for (auto &item : impl.get_impl_items ())
    1081       204737 :     visit (item);
    1082        35794 : }
    1083              : 
    1084              : void
    1085       548285 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
    1086              : {
    1087       548285 :   visit_outer_attrs (impl);
    1088       548285 :   visit (impl.get_visibility ());
    1089              : 
    1090      1048138 :   for (auto &generic : impl.get_generic_params ())
    1091       499853 :     visit (generic);
    1092       548285 :   if (impl.has_where_clause ())
    1093        28319 :     visit (impl.get_where_clause ());
    1094       548285 :   visit (impl.get_type ());
    1095       548285 :   visit (impl.get_trait_path ());
    1096       548285 :   visit_inner_attrs (impl);
    1097      1316822 :   for (auto &item : impl.get_impl_items ())
    1098       768537 :     visit (item);
    1099       548285 : }
    1100              : 
    1101              : void
    1102          211 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
    1103              : {
    1104          211 :   visit_outer_attrs (item);
    1105          211 :   visit (item.get_visibility ());
    1106          211 : }
    1107              : 
    1108              : void
    1109           16 : DefaultASTVisitor::visit (AST::ExternalStaticItem &item)
    1110              : {
    1111           16 :   visit_outer_attrs (item);
    1112           16 :   visit (item.get_visibility ());
    1113           16 :   visit (item.get_type ());
    1114           16 : }
    1115              : 
    1116              : void
    1117        30304 : DefaultASTVisitor::visit (AST::ExternBlock &block)
    1118              : {
    1119        30304 :   visit_outer_attrs (block);
    1120        30304 :   visit (block.get_visibility ());
    1121        30304 :   visit_inner_attrs (block);
    1122       163255 :   for (auto &item : block.get_extern_items ())
    1123       132951 :     visit (item);
    1124        30304 : }
    1125              : 
    1126              : void
    1127       225229 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
    1128       225229 : {}
    1129              : 
    1130              : void
    1131        31035 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
    1132              : {
    1133        75801 :   for (auto &m : match.get_matches ())
    1134        44766 :     visit (m);
    1135        31035 : }
    1136              : 
    1137              : void
    1138       115553 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
    1139              : {
    1140       474352 :   for (auto &m : matcher.get_matches ())
    1141       358799 :     visit (m);
    1142       115553 : }
    1143              : 
    1144              : void
    1145       109865 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
    1146              : {
    1147       109865 :   visit (transcriber.get_token_tree ());
    1148       109865 : }
    1149              : 
    1150              : void
    1151       109865 : DefaultASTVisitor::visit (AST::MacroRule &rule)
    1152              : {
    1153       109865 :   visit (rule.get_matcher ());
    1154       109865 :   visit (rule.get_transcriber ());
    1155       109865 : }
    1156              : void
    1157        99923 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
    1158              : {
    1159        99923 :   visit_outer_attrs (rules_def);
    1160       209788 :   for (auto &rule : rules_def.get_macro_rules ())
    1161       109865 :     visit (rule);
    1162        99923 : }
    1163              : 
    1164              : void
    1165       178630 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
    1166              : {
    1167       178630 :   visit (data.get_path ());
    1168       178630 :   visit (data.get_delim_tok_tree ());
    1169       178630 : }
    1170              : void
    1171       178630 : DefaultASTVisitor::visit (AST::MacroInvocation &macro_invoc)
    1172              : {
    1173       178630 :   visit_outer_attrs (macro_invoc);
    1174       178630 :   visit (macro_invoc.get_invoc_data ());
    1175       178630 : }
    1176              : 
    1177              : void
    1178         2662 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
    1179              : {
    1180         2662 :   visit (meta_item.get_path ());
    1181         2662 : }
    1182              : 
    1183              : void
    1184        16363 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
    1185              : {
    1186        16363 :   visit (meta_item.get_path ());
    1187        37448 :   for (auto &inner : meta_item.get_seq ())
    1188        21085 :     visit (inner);
    1189        16363 : }
    1190              : 
    1191              : void
    1192        12202 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
    1193        12202 : {}
    1194              : 
    1195              : void
    1196        30077 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
    1197        30077 : {}
    1198              : 
    1199              : void
    1200            0 : DefaultASTVisitor::visit (AST::MetaListPaths &meta_item)
    1201              : {
    1202            0 :   for (auto &path : meta_item.get_paths ())
    1203            0 :     visit (path);
    1204            0 : }
    1205              : 
    1206              : void
    1207            0 : DefaultASTVisitor::visit (AST::MetaListNameValueStr &meta_item)
    1208              : {
    1209            0 :   for (auto &str : meta_item.get_values ())
    1210            0 :     visit (str);
    1211            0 : }
    1212              : 
    1213              : void
    1214     10473502 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
    1215     10473502 : {}
    1216              : 
    1217              : void
    1218      1871497 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
    1219              : {
    1220      1871497 :   if (pattern.has_subpattern ())
    1221         2796 :     visit (pattern.get_subpattern ());
    1222      1871497 : }
    1223              : 
    1224              : void
    1225      1050737 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
    1226      1050737 : {}
    1227              : 
    1228              : void
    1229         3673 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
    1230         3673 : {}
    1231              : 
    1232              : void
    1233        47342 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
    1234        47342 : {}
    1235              : 
    1236              : void
    1237          404 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
    1238              : {
    1239          404 :   visit (bound.get_path ());
    1240          404 : }
    1241              : 
    1242              : void
    1243            0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
    1244              : {
    1245            0 :   visit (bound.get_qualified_path ());
    1246            0 : }
    1247              : 
    1248              : void
    1249        18479 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
    1250              : {
    1251        18479 :   if (pattern.get_has_lower_bound ())
    1252        18479 :     visit (pattern.get_lower_bound ());
    1253        18479 :   if (pattern.get_has_upper_bound ())
    1254        18479 :     visit (pattern.get_upper_bound ());
    1255        18479 : }
    1256              : 
    1257              : void
    1258        48205 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
    1259              : {
    1260        48205 :   visit (pattern.get_referenced_pattern ());
    1261        48205 : }
    1262              : 
    1263              : void
    1264          527 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
    1265              : {
    1266          527 :   visit_outer_attrs (field);
    1267          527 :   visit (field.get_index_pattern ());
    1268          527 : }
    1269              : 
    1270              : void
    1271        10522 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
    1272              : {
    1273        10522 :   visit_outer_attrs (field);
    1274        10522 :   visit (field.get_ident_pattern ());
    1275        10522 : }
    1276              : 
    1277              : void
    1278         4610 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
    1279              : {
    1280         4610 :   visit_outer_attrs (field);
    1281         4610 : }
    1282              : 
    1283              : void
    1284        11939 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
    1285              : {
    1286        28876 :   for (auto &field : spe.get_struct_pattern_fields ())
    1287        16937 :     visit (field);
    1288        11939 :   for (auto &attribute : spe.get_etc_outer_attrs ())
    1289            0 :     visit (attribute);
    1290        11939 : }
    1291              : 
    1292              : void
    1293        11939 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
    1294              : {
    1295        11939 :   visit (pattern.get_path ());
    1296        11939 :   visit (pattern.get_struct_pattern_elems ());
    1297        11939 : }
    1298              : 
    1299              : void
    1300       198220 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRest &tuple_items)
    1301              : {
    1302       403771 :   for (auto &pattern : tuple_items.get_patterns ())
    1303       205551 :     visit (pattern);
    1304       198220 : }
    1305              : 
    1306              : void
    1307         2227 : DefaultASTVisitor::visit (AST::TupleStructItemsHasRest &tuple_items)
    1308              : {
    1309         2853 :   for (auto &lower : tuple_items.get_lower_patterns ())
    1310          626 :     visit (lower);
    1311         2610 :   for (auto &upper : tuple_items.get_upper_patterns ())
    1312          383 :     visit (upper);
    1313         2227 : }
    1314              : 
    1315              : void
    1316       263080 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
    1317              : {
    1318       263080 :   visit (pattern.get_path ());
    1319       263080 :   visit (pattern.get_items ());
    1320       263080 : }
    1321              : 
    1322              : void
    1323       507455 : DefaultASTVisitor::visit (AST::TuplePatternItemsNoRest &tuple_items)
    1324              : {
    1325      1665534 :   for (auto &pattern : tuple_items.get_patterns ())
    1326      1158079 :     visit (pattern);
    1327       507455 : }
    1328              : 
    1329              : void
    1330          643 : DefaultASTVisitor::visit (AST::TuplePatternItemsHasRest &tuple_items)
    1331              : {
    1332         1196 :   for (auto &lower : tuple_items.get_lower_patterns ())
    1333          553 :     visit (lower);
    1334         1241 :   for (auto &upper : tuple_items.get_upper_patterns ())
    1335          598 :     visit (upper);
    1336          643 : }
    1337              : 
    1338              : void
    1339       686248 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
    1340              : {
    1341       686248 :   visit (pattern.get_items ());
    1342       686248 : }
    1343              : 
    1344              : void
    1345          861 : DefaultASTVisitor::visit (AST::GroupedPattern &pattern)
    1346              : {
    1347          861 :   visit (pattern.get_pattern_in_parens ());
    1348          861 : }
    1349              : 
    1350              : void
    1351         4479 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
    1352              : {
    1353        14161 :   for (auto &pat : pattern.get_patterns ())
    1354         9682 :     visit (pat);
    1355         4479 : }
    1356              : 
    1357              : void
    1358        10725 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
    1359              : {
    1360        37375 :   for (auto &alt : pattern.get_alts ())
    1361        26650 :     visit (alt);
    1362        10725 : }
    1363              : 
    1364              : void
    1365         1474 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
    1366         1474 : {}
    1367              : 
    1368              : void
    1369      1120208 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
    1370              : {
    1371      1120208 :   visit_outer_attrs (stmt);
    1372      1120208 :   visit (stmt.get_pattern ());
    1373      1120208 :   if (stmt.has_type ())
    1374       129875 :     visit (stmt.get_type ());
    1375      1120208 :   if (stmt.has_init_expr ())
    1376      1074413 :     visit (stmt.get_init_expr ());
    1377      1120208 : }
    1378              : 
    1379              : void
    1380      1491306 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
    1381              : {
    1382      1491306 :   visit (stmt.get_expr ());
    1383      1491304 : }
    1384              : 
    1385              : void
    1386       727401 : DefaultASTVisitor::visit (AST::TraitBound &bound)
    1387              : {
    1388       727717 :   for (auto &lifetime : bound.get_for_lifetimes ())
    1389          316 :     visit (lifetime);
    1390       727401 :   visit (bound.get_type_path ());
    1391       727401 : }
    1392              : 
    1393              : void
    1394        18085 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
    1395              : {
    1396        36836 :   for (auto &bound : type.get_type_param_bounds ())
    1397        18751 :     visit (bound);
    1398        18085 : }
    1399              : 
    1400              : void
    1401        13028 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
    1402              : {
    1403        39704 :   for (auto &bound : type.get_type_param_bounds ())
    1404        26676 :     visit (bound);
    1405        13028 : }
    1406              : 
    1407              : void
    1408         1897 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
    1409              : {
    1410         1897 :   visit (type.get_type_in_parens ());
    1411         1897 : }
    1412              : 
    1413              : void
    1414        35237 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
    1415              : {
    1416        35237 :   visit (type.get_trait_bound ());
    1417        35237 : }
    1418              : 
    1419              : void
    1420         9063 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
    1421              : {
    1422         9063 :   visit (type.get_trait_bound ());
    1423         9063 : }
    1424              : 
    1425              : void
    1426       195345 : DefaultASTVisitor::visit (AST::TupleType &type)
    1427              : {
    1428       627120 :   for (auto &elem : type.get_elems ())
    1429       431775 :     visit (elem);
    1430       195345 : }
    1431              : 
    1432              : void
    1433        17293 : DefaultASTVisitor::visit (AST::NeverType &type)
    1434        17293 : {}
    1435              : 
    1436              : void
    1437       415455 : DefaultASTVisitor::visit (AST::RawPointerType &type)
    1438              : {
    1439       415455 :   visit (type.get_type_pointed_to ());
    1440       415455 : }
    1441              : 
    1442              : void
    1443      1659901 : DefaultASTVisitor::visit (AST::ReferenceType &type)
    1444              : {
    1445      1659901 :   visit (type.get_lifetime ());
    1446      1659901 :   visit (type.get_base_type ());
    1447      1659901 : }
    1448              : 
    1449              : void
    1450        72385 : DefaultASTVisitor::visit (AST::ArrayType &type)
    1451              : {
    1452        72385 :   visit (type.get_elem_type ());
    1453        72385 :   visit (type.get_size_expr ());
    1454        72385 : }
    1455              : 
    1456              : void
    1457       139946 : DefaultASTVisitor::visit (AST::SliceType &type)
    1458              : {
    1459       139946 :   visit (type.get_elem_type ());
    1460       139946 : }
    1461              : 
    1462              : void
    1463        63321 : DefaultASTVisitor::visit (AST::InferredType &type)
    1464        63321 : {}
    1465              : 
    1466              : void
    1467       460181 : DefaultASTVisitor::visit (AST::MaybeNamedParam &param)
    1468              : {
    1469       460181 :   visit_outer_attrs (param);
    1470       460181 :   visit (param.get_type ());
    1471       460181 : }
    1472              : 
    1473              : void
    1474        78336 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
    1475              : {
    1476        78401 :   for (auto &lifetime : type.get_for_lifetimes ())
    1477           65 :     visit (lifetime);
    1478        78336 :   visit (type.get_function_qualifiers ());
    1479       538517 :   for (auto &param : type.get_function_params ())
    1480       460181 :     visit (param);
    1481        78336 :   if (type.is_variadic ())
    1482        23352 :     for (auto attr : type.get_variadic_attr ())
    1483            0 :       visit (attr);
    1484        78336 :   if (type.has_return_type ())
    1485        76203 :     visit (type.get_return_type ());
    1486        78336 : }
    1487              : 
    1488              : void
    1489            0 : DefaultASTVisitor::visit (AST::FormatArgs &)
    1490              : {
    1491              :   // FIXME: Do we have anything to do? any subnodes to visit? Probably, right?
    1492            0 : }
    1493              : 
    1494              : void
    1495          170 : DefaultASTVisitor::visit (AST::OffsetOf &offset_of)
    1496              : {
    1497          170 :   visit (offset_of.get_type ());
    1498          170 : }
    1499              : 
    1500              : void
    1501        14797 : DefaultASTVisitor::visit (AST::VariadicParam &param)
    1502              : {
    1503        14797 :   if (param.has_pattern ())
    1504          176 :     visit (param.get_pattern ());
    1505        14797 : }
    1506              : 
    1507              : void
    1508         4975 : ContextualASTVisitor::visit (AST::Crate &crate)
    1509              : {
    1510         4975 :   ctx.enter (Kind::CRATE);
    1511         4975 :   DefaultASTVisitor::visit (crate);
    1512         4975 :   ctx.exit ();
    1513         4975 : }
    1514              : 
    1515              : void
    1516         1535 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
    1517              : {
    1518         1535 :   ctx.enter (Kind::INHERENT_IMPL);
    1519         1535 :   DefaultASTVisitor::visit (impl);
    1520         1535 :   ctx.exit ();
    1521         1535 : }
    1522              : 
    1523              : void
    1524        13160 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
    1525              : {
    1526        13160 :   ctx.enter (Kind::TRAIT_IMPL);
    1527        13160 :   DefaultASTVisitor::visit (impl);
    1528        13160 :   ctx.exit ();
    1529        13160 : }
    1530              : 
    1531              : void
    1532         4466 : ContextualASTVisitor::visit (AST::Trait &trait)
    1533              : {
    1534         4466 :   ctx.enter (Kind::TRAIT);
    1535         4466 :   DefaultASTVisitor::visit (trait);
    1536         4466 :   ctx.exit ();
    1537         4466 : }
    1538              : 
    1539              : void
    1540        34844 : ContextualASTVisitor::visit (AST::Function &function)
    1541              : {
    1542        34844 :   ctx.enter (Kind::FUNCTION);
    1543        34844 :   DefaultASTVisitor::visit (function);
    1544        34844 :   ctx.exit ();
    1545        34844 : }
    1546              : 
    1547              : } // namespace AST
    1548              : } // 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.