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.0 % 932 876
Test Date: 2026-09-12 16:25:28 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        89356 : DefaultASTVisitor::visit (AST::Crate &crate)
      36              : {
      37        89356 :   visit_inner_attrs (crate);
      38       479492 :   for (auto &item : crate.items)
      39       390138 :     visit (item);
      40        89354 : }
      41              : 
      42              : void
      43     32762233 : DefaultASTVisitor::visit (AST::Token &tok)
      44     32762233 : {}
      45              : 
      46              : void
      47      4340789 : DefaultASTVisitor::visit (AST::DelimTokenTree &delim_tok_tree)
      48              : {
      49     38639856 :   for (auto &token : delim_tok_tree.get_token_trees ())
      50     34299067 :     visit (token);
      51      4340789 : }
      52              : 
      53              : void
      54        29193 : DefaultASTVisitor::visit (AST::AttrInputMetaItemContainer &input)
      55              : {
      56        59073 :   for (auto &item : input.get_items ())
      57        29880 :     visit (item);
      58        29193 : }
      59              : 
      60              : void
      61     27223303 : DefaultASTVisitor::visit (AST::IdentifierExpr &ident_expr)
      62              : {
      63     27223303 :   visit_outer_attrs (ident_expr);
      64     27223303 : }
      65              : 
      66              : void
      67      3417337 : DefaultASTVisitor::visit (AST::Lifetime &lifetime)
      68      3417337 : {}
      69              : 
      70              : void
      71       174785 : DefaultASTVisitor::visit (AST::LifetimeParam &lifetime_param)
      72              : {
      73       174785 :   visit_outer_attrs (lifetime_param);
      74       174785 :   visit (lifetime_param.get_lifetime ());
      75       177807 :   for (auto &lifetime_bound : lifetime_param.get_lifetime_bounds ())
      76         3022 :     visit (lifetime_bound);
      77       174785 : }
      78              : 
      79              : void
      80        13151 : DefaultASTVisitor::visit (AST::ConstGenericParam &const_param)
      81              : {
      82        13151 :   visit_outer_attrs (const_param);
      83        13151 :   if (const_param.has_type ())
      84        13151 :     visit (const_param.get_type ());
      85        13151 :   if (const_param.has_default_value ())
      86          319 :     visit (const_param.get_default_value_unchecked ());
      87        13151 : }
      88              : 
      89              : void
      90      8225927 : DefaultASTVisitor::visit (AST::PathInExpression &path)
      91              : {
      92      8225927 :   visit_outer_attrs (path);
      93              : 
      94      8225927 :   if (!path.is_lang_item ())
      95     17664590 :     for (auto &segment : path.get_segments ())
      96      9469414 :       visit (segment);
      97      8225927 : }
      98              : 
      99              : void
     100     16046033 : DefaultASTVisitor::visit (AST::TypePathSegment &segment)
     101     16046033 : {}
     102              : 
     103              : void
     104        29450 : DefaultASTVisitor::visit (GenericArgsBinding &binding)
     105              : {
     106        29450 :   visit (binding.get_type ());
     107        29450 : }
     108              : 
     109              : void
     110      1559646 : DefaultASTVisitor::visit (AST::TypePathSegmentGeneric &segment)
     111              : {
     112      1559646 :   if (segment.has_generic_args ())
     113      1559632 :     visit (segment.get_generic_args ());
     114      1559646 : }
     115              : 
     116              : void
     117        98424 : DefaultASTVisitor::visit (AST::TypePathFunction &tpf)
     118              : {
     119       238964 :   for (auto &input : tpf.get_params ())
     120       140540 :     visit (input);
     121        98424 :   if (tpf.has_return_type ())
     122        95133 :     visit (tpf.get_return_type ());
     123        98424 : }
     124              : 
     125              : void
     126     20693329 : DefaultASTVisitor::visit (AST::PathIdentSegment &segment)
     127     20693329 : {}
     128              : 
     129              : void
     130        98424 : DefaultASTVisitor::visit (AST::TypePathSegmentFunction &segment)
     131              : {
     132        98424 :   visit (segment.get_type_path_function ());
     133        98424 :   visit (segment.get_ident_segment ());
     134        98424 : }
     135              : 
     136              : void
     137      1605593 : DefaultASTVisitor::visit (AST::GenericArgs &args)
     138              : {
     139      1764741 :   for (auto &lifetime : args.get_lifetime_args ())
     140       159148 :     visit (lifetime);
     141              : 
     142      3183396 :   for (auto &generic : args.get_generic_args ())
     143      1577803 :     visit (generic);
     144              : 
     145      1634713 :   for (auto &binding : args.get_binding_args ())
     146        29120 :     visit (binding);
     147      1605593 : }
     148              : 
     149              : void
     150     15785628 : DefaultASTVisitor::visit (AST::PathExprSegment &segment)
     151              : {
     152     15785628 :   visit (segment.get_ident_segment ());
     153     15785628 :   if (segment.has_generic_args ())
     154        64528 :     visit (segment.get_generic_args ());
     155     15785628 : }
     156              : void
     157     13334073 : DefaultASTVisitor::visit (AST::TypePath &path)
     158              : {
     159     27576801 :   for (auto &segment : path.get_segments ())
     160     14242728 :     visit (segment);
     161     13334073 : }
     162              : 
     163              : void
     164        24326 : DefaultASTVisitor::visit (AST::QualifiedPathInExpression &path)
     165              : {
     166        24326 :   visit_outer_attrs (path);
     167        24326 :   visit (path.get_qualified_path_type ());
     168              : 
     169        48652 :   for (auto &segment : path.get_segments ())
     170        24326 :     visit (segment);
     171        24326 : }
     172              : 
     173              : void
     174       564360 : DefaultASTVisitor::visit (AST::QualifiedPathType &path)
     175              : {
     176       564360 :   visit (path.get_type ());
     177       564360 :   if (path.has_as_clause ())
     178       545964 :     visit (path.get_as_type_path ());
     179       564360 : }
     180              : 
     181              : void
     182       646636 : DefaultASTVisitor::visit (AST::QualifiedPathInType &path)
     183              : {
     184       646636 :   visit (path.get_qualified_path_type ());
     185       646636 :   visit (path.get_associated_segment ());
     186              : 
     187       646636 :   for (auto &segment : path.get_segments ())
     188            0 :     visit (segment);
     189       646636 : }
     190              : 
     191              : void
     192     34086372 : DefaultASTVisitor::visit (AST::LiteralExpr &expr)
     193              : {
     194     34086372 :   visit_outer_attrs (expr);
     195     34086372 : }
     196              : 
     197              : void
     198     17794354 : DefaultASTVisitor::visit (AST::Attribute &attribute)
     199              : {
     200     17794354 :   visit (attribute.get_path ());
     201     17794354 :   if (attribute.has_attr_input ())
     202     15270508 :     visit (attribute.get_attr_input ());
     203     17794354 : }
     204              : 
     205              : void
     206      9539843 : DefaultASTVisitor::visit (AST::AttrInputLiteral &attr_input)
     207              : {
     208      9539843 :   visit (attr_input.get_literal ());
     209      9539843 : }
     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     18266555 : DefaultASTVisitor::visit (AST::SimplePathSegment &segment)
     225     18266555 : {}
     226              : 
     227              : void
     228     18144083 : DefaultASTVisitor::visit (AST::SimplePath &path)
     229              : {
     230     36410638 :   for (auto &segment : path.get_segments ())
     231     18266555 :     visit (segment);
     232     18144083 : }
     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      1206310 : DefaultASTVisitor::visit (AST::BorrowExpr &expr)
     243              : {
     244      1206310 :   visit_outer_attrs (expr);
     245      1206310 :   visit (expr.get_borrowed_expr ());
     246      1206310 : }
     247              : 
     248              : void
     249       615887 : DefaultASTVisitor::visit (AST::DereferenceExpr &expr)
     250              : {
     251       615887 :   visit_outer_attrs (expr);
     252       615887 :   visit (expr.get_dereferenced_expr ());
     253       615887 : }
     254              : 
     255              : void
     256        83786 : DefaultASTVisitor::visit (AST::ErrorPropagationExpr &expr)
     257              : {
     258        83786 :   visit_outer_attrs (expr);
     259        83786 :   visit (expr.get_propagating_expr ());
     260        83786 : }
     261              : 
     262              : void
     263       188579 : DefaultASTVisitor::visit (AST::NegationExpr &expr)
     264              : {
     265       188579 :   visit_outer_attrs (expr);
     266       188579 :   visit (expr.get_negated_expr ());
     267       188579 : }
     268              : 
     269              : void
     270      6314661 : DefaultASTVisitor::visit (AST::ArithmeticOrLogicalExpr &expr)
     271              : {
     272      6314661 :   visit_outer_attrs (expr);
     273      6314661 :   visit (expr.get_left_expr ());
     274      6314661 :   visit (expr.get_right_expr ());
     275      6314661 : }
     276              : 
     277              : void
     278       580487 : DefaultASTVisitor::visit (AST::ComparisonExpr &expr)
     279              : {
     280       580487 :   visit_outer_attrs (expr);
     281       580487 :   visit (expr.get_left_expr ());
     282       580487 :   visit (expr.get_right_expr ());
     283       580487 : }
     284              : 
     285              : void
     286       144246 : DefaultASTVisitor::visit (AST::LazyBooleanExpr &expr)
     287              : {
     288       144246 :   visit_outer_attrs (expr);
     289       144246 :   visit (expr.get_left_expr ());
     290       144246 :   visit (expr.get_right_expr ());
     291       144246 : }
     292              : 
     293              : void
     294       967409 : DefaultASTVisitor::visit (AST::TypeCastExpr &expr)
     295              : {
     296       967409 :   visit_outer_attrs (expr);
     297       967409 :   visit (expr.get_casted_expr ());
     298       967409 :   visit (expr.get_type_to_cast_to ());
     299       967409 : }
     300              : 
     301              : void
     302       396065 : DefaultASTVisitor::visit (AST::AssignmentExpr &expr)
     303              : {
     304       396065 :   visit_outer_attrs (expr);
     305       396065 :   visit (expr.get_left_expr ());
     306       396065 :   visit (expr.get_right_expr ());
     307       396065 : }
     308              : 
     309              : void
     310       238805 : DefaultASTVisitor::visit (AST::CompoundAssignmentExpr &expr)
     311              : {
     312       238805 :   visit_outer_attrs (expr);
     313       238805 :   visit (expr.get_left_expr ());
     314       238805 :   visit (expr.get_right_expr ());
     315       238805 : }
     316              : 
     317              : void
     318      1155332 : DefaultASTVisitor::visit (AST::GroupedExpr &expr)
     319              : {
     320      1155332 :   visit_outer_attrs (expr);
     321      1155332 :   visit_inner_attrs (expr);
     322      1155332 :   visit (expr.get_expr_in_parens ());
     323      1155332 : }
     324              : 
     325              : void
     326      1303539 : DefaultASTVisitor::visit (AST::ArrayElemsValues &elems)
     327              : {
     328     13710116 :   for (auto &value : elems.get_values ())
     329     12406577 :     visit (value);
     330      1303539 : }
     331              : 
     332              : void
     333        11476 : DefaultASTVisitor::visit (AST::ArrayElemsCopied &elems)
     334              : {
     335        11476 :   visit (elems.get_elem_to_copy ());
     336        11476 :   visit (elems.get_num_copies ());
     337        11476 : }
     338              : 
     339              : void
     340      2520591 : DefaultASTVisitor::visit (AST::ArrayExpr &expr)
     341              : {
     342      2520591 :   visit_outer_attrs (expr);
     343      2520591 :   visit_inner_attrs (expr);
     344      2520591 :   visit (expr.get_array_elems ());
     345      2520591 : }
     346              : 
     347              : void
     348       166119 : DefaultASTVisitor::visit (AST::ArrayIndexExpr &expr)
     349              : {
     350       166119 :   visit_outer_attrs (expr);
     351       166119 :   visit (expr.get_array_expr ());
     352       166119 :   visit (expr.get_index_expr ());
     353       166119 : }
     354              : 
     355              : void
     356       445930 : DefaultASTVisitor::visit (AST::TupleExpr &expr)
     357              : {
     358       445930 :   visit_outer_attrs (expr);
     359       445930 :   visit_inner_attrs (expr);
     360      1275880 :   for (auto &elem : expr.get_tuple_elems ())
     361       829950 :     visit (elem);
     362       445930 : }
     363              : 
     364              : void
     365       800379 : DefaultASTVisitor::visit (AST::TupleIndexExpr &expr)
     366              : {
     367       800379 :   visit_outer_attrs (expr);
     368       800379 :   visit (expr.get_tuple_expr ());
     369       800379 : }
     370              : 
     371              : void
     372         4611 : DefaultASTVisitor::visit (AST::StructExprStruct &expr)
     373              : {
     374         4611 :   visit_outer_attrs (expr);
     375         4611 :   visit_inner_attrs (expr);
     376         4611 :   visit (expr.get_struct_name ());
     377         4611 : }
     378              : 
     379              : void
     380        48952 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifier &field)
     381        48952 : {}
     382              : 
     383              : void
     384       182621 : DefaultASTVisitor::visit (AST::StructExprFieldIdentifierValue &field)
     385              : {
     386       182621 :   visit (field.get_value ());
     387       182621 : }
     388              : 
     389              : void
     390          748 : DefaultASTVisitor::visit (AST::StructExprFieldIndexValue &field)
     391              : {
     392          748 :   visit (field.get_value ());
     393          748 : }
     394              : 
     395              : void
     396         1677 : DefaultASTVisitor::visit (AST::StructBase &base)
     397              : {
     398         1677 :   visit (base.get_base_struct ());
     399         1677 : }
     400              : 
     401              : void
     402       149899 : DefaultASTVisitor::visit (AST::StructExprStructFields &expr)
     403              : {
     404       149899 :   visit_outer_attrs (expr);
     405       149899 :   visit_inner_attrs (expr);
     406       149899 :   visit (expr.get_struct_name ());
     407       149899 :   if (expr.has_struct_base ())
     408         2135 :     visit (expr.get_struct_base ());
     409       433399 :   for (auto &field : expr.get_fields ())
     410       283500 :     visit (field);
     411       149899 : }
     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     10733234 : DefaultASTVisitor::visit (AST::CallExpr &expr)
     424              : {
     425     10733234 :   visit_outer_attrs (expr);
     426     10733234 :   visit (expr.get_function_expr ());
     427     37536362 :   for (auto &param : expr.get_params ())
     428     26803129 :     visit (param);
     429     10733233 : }
     430              : 
     431              : void
     432      6291888 : DefaultASTVisitor::visit (AST::MethodCallExpr &expr)
     433              : {
     434      6291888 :   visit_outer_attrs (expr);
     435      6291888 :   visit (expr.get_receiver_expr ());
     436      6291888 :   visit (expr.get_method_name ());
     437      7261737 :   for (auto &param : expr.get_params ())
     438       969849 :     visit (param);
     439      6291888 : }
     440              : 
     441              : void
     442      1041262 : DefaultASTVisitor::visit (AST::FieldAccessExpr &expr)
     443              : {
     444      1041262 :   visit_outer_attrs (expr);
     445      1041262 :   visit (expr.get_receiver_expr ());
     446      1041262 : }
     447              : 
     448              : void
     449        56911 : DefaultASTVisitor::visit (AST::ClosureExprInner &expr)
     450              : {
     451        56911 :   visit_outer_attrs (expr);
     452       123565 :   for (auto &param : expr.get_params ())
     453        66654 :     visit (param);
     454        56911 :   visit (expr.get_definition_expr ());
     455        56911 : }
     456              : 
     457              : void
     458      3490289 : DefaultASTVisitor::visit (AST::BlockExpr &expr)
     459              : {
     460      3490289 :   visit_outer_attrs (expr);
     461      3490289 :   visit_inner_attrs (expr);
     462              : 
     463      3490289 :   if (expr.has_label ())
     464           51 :     visit (expr.get_label ());
     465              : 
     466      5546923 :   for (auto &stmt : expr.get_statements ())
     467      2056637 :     visit (stmt);
     468              : 
     469      3490286 :   if (expr.has_tail_expr ())
     470      2950278 :     visit (expr.get_tail_expr ());
     471      3490284 : }
     472              : 
     473              : void
     474          280 : DefaultASTVisitor::visit (AST::ConstBlock &expr)
     475              : {
     476          280 :   visit (expr.get_const_expr ());
     477          280 : }
     478              : 
     479              : void
     480        69106 : DefaultASTVisitor::visit (AST::AnonConst &expr)
     481              : {
     482        69106 :   if (!expr.is_deferred ())
     483        68883 :     visit (expr.get_inner_expr ());
     484        69106 : }
     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        93048 : DefaultASTVisitor::visit (AST::ClosureParam &param)
     498              : {
     499        93048 :   visit_outer_attrs (param);
     500        93048 :   visit (param.get_pattern ());
     501        93048 :   if (param.has_type_given ())
     502         5269 :     visit (param.get_type ());
     503        93048 : }
     504              : 
     505              : void
     506         1946 : DefaultASTVisitor::visit (AST::ContinueExpr &expr)
     507              : {
     508         1946 :   visit_outer_attrs (expr);
     509         1946 :   if (expr.has_label ())
     510          765 :     visit (expr.get_label_unchecked ());
     511         1946 : }
     512              : 
     513              : void
     514        14987 : DefaultASTVisitor::visit (AST::BreakExpr &expr)
     515              : {
     516        14987 :   visit_outer_attrs (expr);
     517        14987 :   if (expr.has_label ())
     518          831 :     visit (expr.get_label_unchecked ());
     519              : 
     520        14987 :   if (expr.has_break_expr ())
     521          668 :     visit (expr.get_break_expr_unchecked ());
     522        14986 : }
     523              : 
     524              : void
     525        53662 : DefaultASTVisitor::visit (AST::RangeFromToExpr &expr)
     526              : {
     527        53662 :   visit (expr.get_from_expr ());
     528        53662 :   visit (expr.get_to_expr ());
     529        53662 : }
     530              : 
     531              : void
     532        22004 : DefaultASTVisitor::visit (AST::RangeFromExpr &expr)
     533              : {
     534        22004 :   visit (expr.get_from_expr ());
     535        22004 : }
     536              : 
     537              : void
     538        34144 : DefaultASTVisitor::visit (AST::RangeToExpr &expr)
     539              : {
     540        34144 :   visit (expr.get_to_expr ());
     541        34144 : }
     542              : 
     543              : void
     544        14584 : DefaultASTVisitor::visit (AST::RangeFullExpr &expr)
     545        14584 : {}
     546              : 
     547              : void
     548         1211 : DefaultASTVisitor::visit (AST::RangeFromToInclExpr &expr)
     549              : {
     550         1211 :   visit (expr.get_from_expr ());
     551         1211 :   visit (expr.get_to_expr ());
     552         1211 : }
     553              : 
     554              : void
     555            0 : DefaultASTVisitor::visit (AST::RangeToInclExpr &expr)
     556              : {
     557            0 :   visit (expr.get_to_expr ());
     558            0 : }
     559              : 
     560              : void
     561       140970 : DefaultASTVisitor::visit (AST::ReturnExpr &expr)
     562              : {
     563       140970 :   visit_outer_attrs (expr);
     564       140970 :   if (expr.has_returned_expr ())
     565       136581 :     visit (expr.get_returned_expr ());
     566       140970 : }
     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          127 : DefaultASTVisitor::visit (AST::BoxExpr &expr)
     577              : {
     578          127 :   visit_outer_attrs (expr);
     579          127 :   visit (expr.get_boxed_expr ());
     580          127 : }
     581              : 
     582              : void
     583       290393 : DefaultASTVisitor::visit (AST::UnsafeBlockExpr &expr)
     584              : {
     585       290393 :   visit_outer_attrs (expr);
     586       290393 :   visit (expr.get_block_expr ());
     587       290393 : }
     588              : 
     589              : void
     590         2580 : DefaultASTVisitor::visit (AST::LoopLabel &label)
     591              : {
     592         2580 :   visit (label.get_lifetime ());
     593         2580 : }
     594              : 
     595              : void
     596         9916 : DefaultASTVisitor::visit (AST::LoopExpr &expr)
     597              : {
     598         9916 :   visit_outer_attrs (expr);
     599         9916 :   if (expr.has_loop_label ())
     600         1146 :     visit (expr.get_loop_label ());
     601         9916 :   visit (expr.get_loop_block ());
     602         9915 : }
     603              : 
     604              : void
     605        26723 : DefaultASTVisitor::visit (AST::WhileLoopExpr &expr)
     606              : {
     607        26723 :   visit_outer_attrs (expr);
     608        26723 :   if (expr.has_loop_label ())
     609          119 :     visit (expr.get_loop_label ());
     610        26723 :   visit (expr.get_predicate_expr ());
     611        26723 :   visit (expr.get_loop_block ());
     612        26723 : }
     613              : 
     614              : void
     615         5358 : DefaultASTVisitor::visit (AST::WhileLetLoopExpr &expr)
     616              : {
     617         5358 :   visit_outer_attrs (expr);
     618         5358 :   visit (expr.get_pattern ());
     619              : 
     620         5358 :   if (expr.has_loop_label ())
     621            9 :     visit (expr.get_loop_label ());
     622              : 
     623         5358 :   visit (expr.get_scrutinee_expr ());
     624         5358 :   visit (expr.get_loop_block ());
     625         5358 : }
     626              : 
     627              : void
     628        26568 : DefaultASTVisitor::visit (AST::ForLoopExpr &expr)
     629              : {
     630        26568 :   visit_outer_attrs (expr);
     631        26568 :   visit (expr.get_pattern ());
     632        26568 :   visit (expr.get_iterator_expr ());
     633        26568 :   if (expr.has_loop_label ())
     634            0 :     visit (expr.get_loop_label ());
     635        26568 :   visit (expr.get_loop_block ());
     636        26568 : }
     637              : 
     638              : void
     639       427741 : DefaultASTVisitor::visit (AST::IfExpr &expr)
     640              : {
     641       427741 :   visit_outer_attrs (expr);
     642       427741 :   visit (expr.get_condition_expr ());
     643       427741 :   visit (expr.get_if_block ());
     644       427741 : }
     645              : 
     646              : void
     647       273362 : DefaultASTVisitor::visit (AST::IfExprConseqElse &expr)
     648              : {
     649       273362 :   visit (reinterpret_cast<AST::IfExpr &> (expr));
     650       273362 :   visit (expr.get_else_block ());
     651       273362 : }
     652              : 
     653              : void
     654        14537 : DefaultASTVisitor::visit (AST::IfLetExpr &expr)
     655              : {
     656        14537 :   visit_outer_attrs (expr);
     657        14537 :   visit (expr.get_pattern ());
     658        14537 :   visit (expr.get_value_expr ());
     659        14537 :   visit (expr.get_if_block ());
     660        14537 : }
     661              : 
     662              : void
     663         4959 : DefaultASTVisitor::visit (AST::IfLetExprConseqElse &expr)
     664              : {
     665         4959 :   visit (reinterpret_cast<AST::IfLetExpr &> (expr));
     666         4959 :   visit (expr.get_else_block ());
     667         4959 : }
     668              : 
     669              : void
     670      7825865 : DefaultASTVisitor::visit (AST::MatchArm &arm)
     671              : {
     672      7825865 :   visit_outer_attrs (arm);
     673      7825865 :   visit (arm.get_pattern ());
     674      7825865 :   if (arm.has_match_arm_guard ())
     675         6108 :     visit (arm.get_guard_expr ());
     676      7825865 : }
     677              : 
     678              : void
     679      7876972 : DefaultASTVisitor::visit (AST::MatchCase &arm)
     680              : {
     681      7876972 :   visit (arm.get_arm ());
     682      7876972 :   visit (arm.get_expr ());
     683      7876971 : }
     684              : 
     685              : void
     686       787909 : DefaultASTVisitor::visit (AST::MatchExpr &expr)
     687              : {
     688       787909 :   visit_outer_attrs (expr);
     689       787909 :   visit_inner_attrs (expr);
     690       787909 :   visit (expr.get_scrutinee_expr ());
     691      8664879 :   for (auto &arm : expr.get_match_cases ())
     692      7876972 :     visit (arm);
     693       787907 : }
     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       690257 : DefaultASTVisitor::visit (AST::TypeParam &param)
     773              : {
     774       690257 :   visit_outer_attrs (param);
     775       886086 :   for (auto &bound : param.get_type_param_bounds ())
     776       195829 :     visit (bound);
     777       690257 :   if (param.has_type ())
     778         6025 :     visit (param.get_type ());
     779       690257 : }
     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       183963 : DefaultASTVisitor::visit (AST::TypeBoundWhereClauseItem &item)
     791              : {
     792       184289 :   for (auto &lifetime : item.get_for_lifetimes ())
     793          326 :     visit (lifetime);
     794       183963 :   visit (item.get_type ());
     795       376236 :   for (auto &param : item.get_type_param_bounds ())
     796       192273 :     visit (param);
     797       183963 : }
     798              : 
     799              : void
     800      5968879 : DefaultASTVisitor::visit (AST::Visibility &vis)
     801              : {
     802      5968879 :   if (vis.has_path ())
     803        67199 :     visit (vis.get_path ());
     804      5968879 : }
     805              : 
     806              : void
     807      2998535 : DefaultASTVisitor::visit (AST::FunctionQualifiers &qualifiers)
     808      2998535 : {}
     809              : 
     810              : void
     811       164330 : DefaultASTVisitor::visit (AST::WhereClause &where)
     812              : {
     813       388357 :   for (auto &item : where.get_items ())
     814       224027 :     visit (item);
     815       164330 : }
     816              : void
     817      2590001 : DefaultASTVisitor::visit (AST::FunctionParam &param)
     818              : {
     819      2590001 :   visit_outer_attrs (param);
     820      2590001 :   if (param.has_name ())
     821      2590001 :     visit (param.get_pattern ());
     822              : 
     823      2590001 :   visit (param.get_type ());
     824      2590001 : }
     825              : 
     826              : void
     827      1584240 : DefaultASTVisitor::visit (AST::SelfParam &param)
     828              : {
     829      1584240 :   visit_outer_attrs (param);
     830              : 
     831      1584240 :   if (param.has_lifetime ())
     832       740163 :     visit (param.get_lifetime ());
     833              : 
     834      1584240 :   if (param.has_type ())
     835         2490 :     visit (param.get_type ());
     836      1584240 : }
     837              : 
     838              : void
     839        47916 : DefaultASTVisitor::visit (AST::Module &module)
     840              : {
     841        47916 :   visit_outer_attrs (module);
     842        47916 :   visit (module.get_visibility ());
     843        47916 :   visit_inner_attrs (module);
     844      1326587 :   for (auto &item : module.get_items ())
     845      1278671 :     visit (item);
     846        47916 : }
     847              : 
     848              : void
     849          554 : DefaultASTVisitor::visit (AST::ExternCrate &crate)
     850              : {
     851          554 :   visit_outer_attrs (crate);
     852          554 :   visit (crate.get_visibility ());
     853          554 : }
     854              : 
     855              : void
     856         7459 : DefaultASTVisitor::visit (AST::UseTreeGlob &use_tree)
     857              : {
     858         7459 :   visit (use_tree.get_path ());
     859         7459 : }
     860              : 
     861              : void
     862        25230 : DefaultASTVisitor::visit (AST::UseTreeList &use_tree)
     863              : {
     864        25230 :   visit (use_tree.get_path ());
     865        25230 : }
     866              : 
     867              : void
     868        54227 : DefaultASTVisitor::visit (AST::UseTreeRebind &use_tree)
     869              : {
     870        54227 :   visit (use_tree.get_path ());
     871        54227 : }
     872              : 
     873              : void
     874        87001 : DefaultASTVisitor::visit (AST::UseDeclaration &use_decl)
     875              : {
     876        87001 :   visit (use_decl.get_visibility ());
     877        87001 :   visit (use_decl.get_tree ());
     878        87001 : }
     879              : 
     880              : void
     881      2379401 : DefaultASTVisitor::visit_function_params (AST::Function &function)
     882              : {
     883      6525191 :   for (auto &param : function.get_function_params ())
     884      4145790 :     visit (param);
     885      2379401 : }
     886              : 
     887              : void
     888      2410970 : DefaultASTVisitor::visit (AST::Function &function)
     889              : {
     890      2410970 :   visit_outer_attrs (function);
     891      2410970 :   visit (function.get_visibility ());
     892      2410970 :   visit (function.get_qualifiers ());
     893      2702857 :   for (auto &generic : function.get_generic_params ())
     894       291887 :     visit (generic);
     895              : 
     896      2410970 :   visit_function_params (function);
     897              : 
     898      2410970 :   if (function.has_return_type ())
     899      2045226 :     visit (function.get_return_type ());
     900      2410970 :   if (function.has_where_clause ())
     901        79307 :     visit (function.get_where_clause ());
     902      2410970 :   if (function.has_body ())
     903      2179853 :     visit (*function.get_definition ());
     904      2410968 : }
     905              : 
     906              : void
     907       475641 : DefaultASTVisitor::visit (AST::TypeAlias &type_alias)
     908              : {
     909       475641 :   visit_outer_attrs (type_alias);
     910       475641 :   visit (type_alias.get_visibility ());
     911       476125 :   for (auto &generic : type_alias.get_generic_params ())
     912          484 :     visit (generic);
     913       475641 :   if (type_alias.has_where_clause ())
     914            0 :     visit (type_alias.get_where_clause ());
     915       475641 :   visit (type_alias.get_type_aliased ());
     916       475641 : }
     917              : 
     918              : void
     919       105053 : DefaultASTVisitor::visit (AST::StructField &field)
     920              : {
     921       105053 :   visit_outer_attrs (field);
     922       105053 :   visit (field.get_visibility ());
     923       105053 :   visit (field.get_field_type ());
     924       105053 : }
     925              : 
     926              : void
     927       253569 : DefaultASTVisitor::visit (AST::StructStruct &struct_item)
     928              : {
     929       253569 :   visit_outer_attrs (struct_item);
     930       253569 :   visit (struct_item.get_visibility ());
     931       327983 :   for (auto &generic : struct_item.get_generic_params ())
     932        74414 :     visit (generic);
     933       253569 :   if (struct_item.has_where_clause ())
     934         2442 :     visit (struct_item.get_where_clause ());
     935       387994 :   for (auto &field : struct_item.get_fields ())
     936       134425 :     visit (field);
     937       253569 : }
     938              : 
     939              : void
     940       107008 : DefaultASTVisitor::visit (AST::TupleField &field)
     941              : {
     942       107008 :   visit_outer_attrs (field);
     943       107008 :   visit (field.get_visibility ());
     944       107008 :   visit (field.get_field_type ());
     945       107008 : }
     946              : 
     947              : void
     948        43966 : DefaultASTVisitor::visit (AST::TupleStruct &tuple_struct)
     949              : {
     950        43966 :   visit_outer_attrs (tuple_struct);
     951        43966 :   visit (tuple_struct.get_visibility ());
     952        61025 :   for (auto &generic : tuple_struct.get_generic_params ())
     953        17059 :     visit (generic);
     954        43966 :   if (tuple_struct.has_where_clause ())
     955          218 :     visit (tuple_struct.get_where_clause ());
     956       180944 :   for (auto &field : tuple_struct.get_fields ())
     957       136978 :     visit (field);
     958        43966 : }
     959              : 
     960              : void
     961        41331 : DefaultASTVisitor::visit (AST::EnumItem &item)
     962              : {
     963        41331 :   visit_outer_attrs (item);
     964        41331 :   visit (item.get_visibility ());
     965        41331 : }
     966              : 
     967              : void
     968        14591 : DefaultASTVisitor::visit (AST::EnumItemTuple &item)
     969              : {
     970        14591 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     971        30733 :   for (auto &field : item.get_tuple_fields ())
     972        16142 :     visit (field);
     973        14591 : }
     974              : 
     975              : void
     976         1896 : DefaultASTVisitor::visit (AST::EnumItemStruct &item)
     977              : {
     978         1896 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     979         4978 :   for (auto &field : item.get_struct_fields ())
     980         3082 :     visit (field);
     981         1896 : }
     982              : 
     983              : void
     984         6349 : DefaultASTVisitor::visit (AST::EnumItemDiscriminant &item)
     985              : {
     986         6349 :   DefaultASTVisitor::visit (static_cast<EnumItem &> (item));
     987         6349 :   visit (item.get_expr ());
     988         6349 : }
     989              : 
     990              : void
     991        19816 : DefaultASTVisitor::visit (AST::Enum &enum_item)
     992              : {
     993        19816 :   visit_outer_attrs (enum_item);
     994        19816 :   visit (enum_item.get_visibility ());
     995        29207 :   for (auto &generic : enum_item.get_generic_params ())
     996         9391 :     visit (generic);
     997        19816 :   if (enum_item.has_where_clause ())
     998            0 :     visit (enum_item.get_where_clause ());
     999        69769 :   for (auto &item : enum_item.get_variants ())
    1000        49953 :     visit (item);
    1001        19816 : }
    1002              : 
    1003              : void
    1004         2813 : DefaultASTVisitor::visit (AST::Union &union_item)
    1005              : {
    1006         2813 :   visit_outer_attrs (union_item);
    1007         2813 :   visit (union_item.get_visibility ());
    1008         4887 :   for (auto &generic : union_item.get_generic_params ())
    1009         2074 :     visit (generic);
    1010         2813 :   if (union_item.has_where_clause ())
    1011            0 :     visit (union_item.get_where_clause ());
    1012        10717 :   for (auto &variant : union_item.get_variants ())
    1013         7904 :     visit (variant);
    1014         2813 : }
    1015              : 
    1016              : void
    1017       120349 : DefaultASTVisitor::visit (AST::ConstantItem &const_item)
    1018              : {
    1019       120349 :   visit_outer_attrs (const_item);
    1020       120349 :   visit (const_item.get_visibility ());
    1021       120349 :   visit (const_item.get_type ());
    1022       120349 :   if (const_item.has_expr ())
    1023       116275 :     visit (const_item.get_expr ());
    1024       120349 : }
    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        29012 : DefaultASTVisitor::visit (AST::TraitItemType &item)
    1037              : {
    1038        29012 :   visit_outer_attrs (item);
    1039        29426 :   for (auto &generic : item.get_generic_params ())
    1040          414 :     visit (generic);
    1041        35288 :   for (auto &bound : item.get_type_param_bounds ())
    1042         6276 :     visit (bound);
    1043        29012 : }
    1044              : 
    1045              : void
    1046        57021 : DefaultASTVisitor::visit (AST::Trait &trait)
    1047              : {
    1048        57021 :   visit_outer_attrs (trait);
    1049        57021 :   visit (trait.get_visibility ());
    1050              : 
    1051        57021 :   visit_inner_attrs (trait);
    1052              : 
    1053        57021 :   visit (trait.get_implicit_self ());
    1054              : 
    1055        69415 :   for (auto &generic : trait.get_generic_params ())
    1056        12394 :     visit (generic);
    1057              : 
    1058        57021 :   if (trait.has_where_clause ())
    1059           91 :     visit (trait.get_where_clause ());
    1060              : 
    1061        70028 :   for (auto &bound : trait.get_type_param_bounds ())
    1062        13007 :     visit (bound);
    1063              : 
    1064       126054 :   for (auto &item : trait.get_trait_items ())
    1065        69033 :     visit (item);
    1066        57021 : }
    1067              : 
    1068              : void
    1069        32853 : DefaultASTVisitor::visit (AST::InherentImpl &impl)
    1070              : {
    1071        32853 :   visit_outer_attrs (impl);
    1072        32853 :   visit (impl.get_visibility ());
    1073              : 
    1074        56561 :   for (auto &generic : impl.get_generic_params ())
    1075        23708 :     visit (generic);
    1076        32853 :   if (impl.has_where_clause ())
    1077          236 :     visit (impl.get_where_clause ());
    1078        32853 :   visit (impl.get_type ());
    1079        32853 :   visit_inner_attrs (impl);
    1080       224415 :   for (auto &item : impl.get_impl_items ())
    1081       191562 :     visit (item);
    1082        32853 : }
    1083              : 
    1084              : void
    1085       529950 : DefaultASTVisitor::visit (AST::TraitImpl &impl)
    1086              : {
    1087       529950 :   visit_outer_attrs (impl);
    1088       529950 :   visit (impl.get_visibility ());
    1089              : 
    1090      1014629 :   for (auto &generic : impl.get_generic_params ())
    1091       484679 :     visit (generic);
    1092       529950 :   if (impl.has_where_clause ())
    1093        27265 :     visit (impl.get_where_clause ());
    1094       529950 :   visit (impl.get_type ());
    1095       529950 :   visit (impl.get_trait_path ());
    1096       529950 :   visit_inner_attrs (impl);
    1097      1276970 :   for (auto &item : impl.get_impl_items ())
    1098       747020 :     visit (item);
    1099       529950 : }
    1100              : 
    1101              : void
    1102          179 : DefaultASTVisitor::visit (AST::ExternalTypeItem &item)
    1103              : {
    1104          179 :   visit_outer_attrs (item);
    1105          179 :   visit (item.get_visibility ());
    1106          179 : }
    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        29654 : DefaultASTVisitor::visit (AST::ExternBlock &block)
    1118              : {
    1119        29654 :   visit_outer_attrs (block);
    1120        29654 :   visit (block.get_visibility ());
    1121        29654 :   visit_inner_attrs (block);
    1122       160083 :   for (auto &item : block.get_extern_items ())
    1123       130429 :     visit (item);
    1124        29654 : }
    1125              : 
    1126              : void
    1127       222635 : DefaultASTVisitor::visit (AST::MacroMatchFragment &match)
    1128       222635 : {}
    1129              : 
    1130              : void
    1131        29289 : DefaultASTVisitor::visit (AST::MacroMatchRepetition &match)
    1132              : {
    1133        71954 :   for (auto &m : match.get_matches ())
    1134        42665 :     visit (m);
    1135        29289 : }
    1136              : 
    1137              : void
    1138       113214 : DefaultASTVisitor::visit (AST::MacroMatcher &matcher)
    1139              : {
    1140       468910 :   for (auto &m : matcher.get_matches ())
    1141       355696 :     visit (m);
    1142       113214 : }
    1143              : 
    1144              : void
    1145       107729 : DefaultASTVisitor::visit (AST::MacroTranscriber &transcriber)
    1146              : {
    1147       107729 :   visit (transcriber.get_token_tree ());
    1148       107729 : }
    1149              : 
    1150              : void
    1151       107729 : DefaultASTVisitor::visit (AST::MacroRule &rule)
    1152              : {
    1153       107729 :   visit (rule.get_matcher ());
    1154       107729 :   visit (rule.get_transcriber ());
    1155       107729 : }
    1156              : void
    1157        97821 : DefaultASTVisitor::visit (AST::MacroRulesDefinition &rules_def)
    1158              : {
    1159        97821 :   visit_outer_attrs (rules_def);
    1160       205550 :   for (auto &rule : rules_def.get_macro_rules ())
    1161       107729 :     visit (rule);
    1162        97821 : }
    1163              : 
    1164              : void
    1165       177713 : DefaultASTVisitor::visit (AST::MacroInvocData &data)
    1166              : {
    1167       177713 :   visit (data.get_path ());
    1168       177713 :   visit (data.get_delim_tok_tree ());
    1169       177713 : }
    1170              : void
    1171       177713 : DefaultASTVisitor::visit (AST::MacroInvocation &macro_invoc)
    1172              : {
    1173       177713 :   visit_outer_attrs (macro_invoc);
    1174       177713 :   visit (macro_invoc.get_invoc_data ());
    1175       177713 : }
    1176              : 
    1177              : void
    1178         2146 : DefaultASTVisitor::visit (AST::MetaItemPath &meta_item)
    1179              : {
    1180         2146 :   visit (meta_item.get_path ());
    1181         2146 : }
    1182              : 
    1183              : void
    1184        15754 : DefaultASTVisitor::visit (AST::MetaItemSeq &meta_item)
    1185              : {
    1186        15754 :   visit (meta_item.get_path ());
    1187        36157 :   for (auto &inner : meta_item.get_seq ())
    1188        20403 :     visit (inner);
    1189        15754 : }
    1190              : 
    1191              : void
    1192        11527 : DefaultASTVisitor::visit (AST::MetaWord &meta_item)
    1193        11527 : {}
    1194              : 
    1195              : void
    1196        27911 : DefaultASTVisitor::visit (AST::MetaNameValueStr &meta_item)
    1197        27911 : {}
    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     10470011 : DefaultASTVisitor::visit (AST::LiteralPattern &pattern)
    1215     10470011 : {}
    1216              : 
    1217              : void
    1218      1807322 : DefaultASTVisitor::visit (AST::IdentifierPattern &pattern)
    1219              : {
    1220      1807322 :   if (pattern.has_subpattern ())
    1221         2691 :     visit (pattern.get_subpattern ());
    1222      1807322 : }
    1223              : 
    1224              : void
    1225      1040794 : DefaultASTVisitor::visit (AST::WildcardPattern &pattern)
    1226      1040794 : {}
    1227              : 
    1228              : void
    1229         3673 : DefaultASTVisitor::visit (AST::RestPattern &pattern)
    1230         3673 : {}
    1231              : 
    1232              : void
    1233        47312 : DefaultASTVisitor::visit (AST::RangePatternBoundLiteral &bound)
    1234        47312 : {}
    1235              : 
    1236              : void
    1237          378 : DefaultASTVisitor::visit (AST::RangePatternBoundPath &bound)
    1238              : {
    1239          378 :   visit (bound.get_path ());
    1240          378 : }
    1241              : 
    1242              : void
    1243            0 : DefaultASTVisitor::visit (AST::RangePatternBoundQualPath &bound)
    1244              : {
    1245            0 :   visit (bound.get_qualified_path ());
    1246            0 : }
    1247              : 
    1248              : void
    1249        18458 : DefaultASTVisitor::visit (AST::RangePattern &pattern)
    1250              : {
    1251        18458 :   if (pattern.get_has_lower_bound ())
    1252        18458 :     visit (pattern.get_lower_bound ());
    1253        18458 :   if (pattern.get_has_upper_bound ())
    1254        18458 :     visit (pattern.get_upper_bound ());
    1255        18458 : }
    1256              : 
    1257              : void
    1258        45628 : DefaultASTVisitor::visit (AST::ReferencePattern &pattern)
    1259              : {
    1260        45628 :   visit (pattern.get_referenced_pattern ());
    1261        45628 : }
    1262              : 
    1263              : void
    1264          391 : DefaultASTVisitor::visit (AST::StructPatternFieldTuplePat &field)
    1265              : {
    1266          391 :   visit_outer_attrs (field);
    1267          391 :   visit (field.get_index_pattern ());
    1268          391 : }
    1269              : 
    1270              : void
    1271        10047 : DefaultASTVisitor::visit (AST::StructPatternFieldIdentPat &field)
    1272              : {
    1273        10047 :   visit_outer_attrs (field);
    1274        10047 :   visit (field.get_ident_pattern ());
    1275        10047 : }
    1276              : 
    1277              : void
    1278         3463 : DefaultASTVisitor::visit (AST::StructPatternFieldIdent &field)
    1279              : {
    1280         3463 :   visit_outer_attrs (field);
    1281         3463 : }
    1282              : 
    1283              : void
    1284        10673 : DefaultASTVisitor::visit (AST::StructPatternElements &spe)
    1285              : {
    1286        25636 :   for (auto &field : spe.get_struct_pattern_fields ())
    1287        14963 :     visit (field);
    1288        10673 :   for (auto &attribute : spe.get_etc_outer_attrs ())
    1289            0 :     visit (attribute);
    1290        10673 : }
    1291              : 
    1292              : void
    1293        10673 : DefaultASTVisitor::visit (AST::StructPattern &pattern)
    1294              : {
    1295        10673 :   visit (pattern.get_path ());
    1296        10673 :   visit (pattern.get_struct_pattern_elems ());
    1297        10673 : }
    1298              : 
    1299              : void
    1300       185733 : DefaultASTVisitor::visit (AST::TupleStructItemsNoRest &tuple_items)
    1301              : {
    1302       378603 :   for (auto &pattern : tuple_items.get_patterns ())
    1303       192870 :     visit (pattern);
    1304       185733 : }
    1305              : 
    1306              : void
    1307         2175 : DefaultASTVisitor::visit (AST::TupleStructItemsHasRest &tuple_items)
    1308              : {
    1309         2801 :   for (auto &lower : tuple_items.get_lower_patterns ())
    1310          626 :     visit (lower);
    1311         2558 :   for (auto &upper : tuple_items.get_upper_patterns ())
    1312          383 :     visit (upper);
    1313         2175 : }
    1314              : 
    1315              : void
    1316       247015 : DefaultASTVisitor::visit (AST::TupleStructPattern &pattern)
    1317              : {
    1318       247015 :   visit (pattern.get_path ());
    1319       247015 :   visit (pattern.get_items ());
    1320       247015 : }
    1321              : 
    1322              : void
    1323       494917 : DefaultASTVisitor::visit (AST::TuplePatternItemsNoRest &tuple_items)
    1324              : {
    1325      1626898 :   for (auto &pattern : tuple_items.get_patterns ())
    1326      1131981 :     visit (pattern);
    1327       494917 : }
    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       670810 : DefaultASTVisitor::visit (AST::TuplePattern &pattern)
    1340              : {
    1341       670810 :   visit (pattern.get_items ());
    1342       670810 : }
    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         4281 : DefaultASTVisitor::visit (AST::SlicePattern &pattern)
    1352              : {
    1353        13369 :   for (auto &pat : pattern.get_patterns ())
    1354         9088 :     visit (pat);
    1355         4281 : }
    1356              : 
    1357              : void
    1358        10595 : DefaultASTVisitor::visit (AST::AltPattern &pattern)
    1359              : {
    1360        36985 :   for (auto &alt : pattern.get_alts ())
    1361        26390 :     visit (alt);
    1362        10595 : }
    1363              : 
    1364              : void
    1365         1474 : DefaultASTVisitor::visit (AST::EmptyStmt &stmt)
    1366         1474 : {}
    1367              : 
    1368              : void
    1369      1069804 : DefaultASTVisitor::visit (AST::LetStmt &stmt)
    1370              : {
    1371      1069804 :   visit_outer_attrs (stmt);
    1372      1069804 :   visit (stmt.get_pattern ());
    1373      1069804 :   if (stmt.has_type ())
    1374       126579 :     visit (stmt.get_type ());
    1375      1069804 :   if (stmt.has_init_expr ())
    1376      1025775 :     visit (stmt.get_init_expr ());
    1377      1069804 : }
    1378              : 
    1379              : void
    1380      1424453 : DefaultASTVisitor::visit (AST::ExprStmt &stmt)
    1381              : {
    1382      1424453 :   visit (stmt.get_expr ());
    1383      1424451 : }
    1384              : 
    1385              : void
    1386       692427 : DefaultASTVisitor::visit (AST::TraitBound &bound)
    1387              : {
    1388       692743 :   for (auto &lifetime : bound.get_for_lifetimes ())
    1389          316 :     visit (lifetime);
    1390       692427 :   visit (bound.get_type_path ());
    1391       692427 : }
    1392              : 
    1393              : void
    1394          646 : DefaultASTVisitor::visit (AST::ImplTraitType &type)
    1395              : {
    1396         1938 :   for (auto &bound : type.get_type_param_bounds ())
    1397         1292 :     visit (bound);
    1398          646 : }
    1399              : 
    1400              : void
    1401        29977 : DefaultASTVisitor::visit (AST::TraitObjectType &type)
    1402              : {
    1403        73431 :   for (auto &bound : type.get_type_param_bounds ())
    1404        43454 :     visit (bound);
    1405        29977 : }
    1406              : 
    1407              : void
    1408         1837 : DefaultASTVisitor::visit (AST::ParenthesisedType &type)
    1409              : {
    1410         1837 :   visit (type.get_type_in_parens ());
    1411         1837 : }
    1412              : 
    1413              : void
    1414        34897 : DefaultASTVisitor::visit (AST::ImplTraitTypeOneBound &type)
    1415              : {
    1416        34897 :   visit (type.get_trait_bound ());
    1417        34897 : }
    1418              : 
    1419              : void
    1420         8932 : DefaultASTVisitor::visit (AST::TraitObjectTypeOneBound &type)
    1421              : {
    1422         8932 :   visit (type.get_trait_bound ());
    1423         8932 : }
    1424              : 
    1425              : void
    1426       188187 : DefaultASTVisitor::visit (AST::TupleType &type)
    1427              : {
    1428       608524 :   for (auto &elem : type.get_elems ())
    1429       420337 :     visit (elem);
    1430       188187 : }
    1431              : 
    1432              : void
    1433        16486 : DefaultASTVisitor::visit (AST::NeverType &type)
    1434        16486 : {}
    1435              : 
    1436              : void
    1437       399000 : DefaultASTVisitor::visit (AST::RawPointerType &type)
    1438              : {
    1439       399000 :   visit (type.get_type_pointed_to ());
    1440       399000 : }
    1441              : 
    1442              : void
    1443      1621646 : DefaultASTVisitor::visit (AST::ReferenceType &type)
    1444              : {
    1445      1621646 :   visit (type.get_lifetime ());
    1446      1621646 :   visit (type.get_base_type ());
    1447      1621646 : }
    1448              : 
    1449              : void
    1450        68887 : DefaultASTVisitor::visit (AST::ArrayType &type)
    1451              : {
    1452        68887 :   visit (type.get_elem_type ());
    1453        68887 :   visit (type.get_size_expr ());
    1454        68887 : }
    1455              : 
    1456              : void
    1457       131948 : DefaultASTVisitor::visit (AST::SliceType &type)
    1458              : {
    1459       131948 :   visit (type.get_elem_type ());
    1460       131948 : }
    1461              : 
    1462              : void
    1463        60770 : DefaultASTVisitor::visit (AST::InferredType &type)
    1464        60770 : {}
    1465              : 
    1466              : void
    1467       459962 : DefaultASTVisitor::visit (AST::MaybeNamedParam &param)
    1468              : {
    1469       459962 :   visit_outer_attrs (param);
    1470       459962 :   visit (param.get_type ());
    1471       459962 : }
    1472              : 
    1473              : void
    1474        78143 : DefaultASTVisitor::visit (AST::BareFunctionType &type)
    1475              : {
    1476        78208 :   for (auto &lifetime : type.get_for_lifetimes ())
    1477           65 :     visit (lifetime);
    1478        78143 :   visit (type.get_function_qualifiers ());
    1479       538105 :   for (auto &param : type.get_function_params ())
    1480       459962 :     visit (param);
    1481        78143 :   if (type.is_variadic ())
    1482        23352 :     for (auto attr : type.get_variadic_attr ())
    1483            0 :       visit (attr);
    1484        78143 :   if (type.has_return_type ())
    1485        76125 :     visit (type.get_return_type ());
    1486        78143 : }
    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        14589 : DefaultASTVisitor::visit (AST::VariadicParam &param)
    1502              : {
    1503        14589 :   if (param.has_pattern ())
    1504          176 :     visit (param.get_pattern ());
    1505        14589 : }
    1506              : 
    1507              : void
    1508         4911 : ContextualASTVisitor::visit (AST::Crate &crate)
    1509              : {
    1510         4911 :   ctx.enter (Kind::CRATE);
    1511         4911 :   DefaultASTVisitor::visit (crate);
    1512         4911 :   ctx.exit ();
    1513         4911 : }
    1514              : 
    1515              : void
    1516         1304 : ContextualASTVisitor::visit (AST::InherentImpl &impl)
    1517              : {
    1518         1304 :   ctx.enter (Kind::INHERENT_IMPL);
    1519         1304 :   DefaultASTVisitor::visit (impl);
    1520         1304 :   ctx.exit ();
    1521         1304 : }
    1522              : 
    1523              : void
    1524        11605 : ContextualASTVisitor::visit (AST::TraitImpl &impl)
    1525              : {
    1526        11605 :   ctx.enter (Kind::TRAIT_IMPL);
    1527        11605 :   DefaultASTVisitor::visit (impl);
    1528        11605 :   ctx.exit ();
    1529        11605 : }
    1530              : 
    1531              : void
    1532         4195 : ContextualASTVisitor::visit (AST::Trait &trait)
    1533              : {
    1534         4195 :   ctx.enter (Kind::TRAIT);
    1535         4195 :   DefaultASTVisitor::visit (trait);
    1536         4195 :   ctx.exit ();
    1537         4195 : }
    1538              : 
    1539              : void
    1540        31615 : ContextualASTVisitor::visit (AST::Function &function)
    1541              : {
    1542        31615 :   ctx.enter (Kind::FUNCTION);
    1543        31615 :   DefaultASTVisitor::visit (function);
    1544        31615 :   ctx.exit ();
    1545        31615 : }
    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.